[e2e] purpose of pseudo header in TCP checksum

David P. Reed dpreed at reed.com
Tue Feb 15 04:39:39 PST 2005


As I was there (in 1976, when we split TCP into IP, TCP, and other 
protocols, such as UDP) for the decision to separate the checksums and 
to create a pseudo-header, here is the rationale, which is highly relevant.

TCP (and UDP) are end-to-end protocols.   In particular, the TCP 
checksum is "end-to-end".   It is a "private matter" between end points 
implementing the TCP layer, guaranteeing end-to-end reliability, not 
hop-by-hop reliability.

IP is a wrapper for TCP, which instructs the transport layer (the 
gateways and routers) where the packet is to be transported, how big it 
is, and how it may be fragmented in the process of delivery..

The Source Address, Destination address, length, etc. are part of the 
meaning of the TCP frame - in that the end point machines use that 
information in the TCP application.

Thus the function of SA, DA, etc. are "shared" because they are 
meaningful to both layers (IP and TCP).   Rather than include the same 
information twice in the packet format, the concept of a "virtual 
header" was invented to encapsulate the idea that IP is not allowed to 
change the SA and DA because they are meaningful.

Further, in the case of end-to-end encryption (in 1976 we had a complete 
design by Steven T. Kent, my office mate, which was blocked by NSA from 
being deployed) it is essential that all end-to-end meaning be 
protected.   The plan was to leave the SA and DA in the clear, but 
encrypt the rest of the TCP payload, including the checksum.  This would 
protect against a man-n-the-middle attack that delivered valid packets 
with an incorrect source address, etc. (yes, to be truly reliable, we 
would have had to use a DSA instead of the current checksum).

This was a careful design decision, wrecked irrevocably by the 
terrorists who invented NAT (which doesn't allow end--to-end encryption, 
because NAT is inherently a "man-in-the-middle" attack!).

The rise of the middleboxen have now so thoroughly corrupted the 
Internet protocol design that it's not surprising that the original 
designs are difficult to decode.   If we actually had end-to-end 
encrypted TCP (now impossible because of the NATs) we would have a much 
more secure and safe Internet, while preserving its open character.  
Instead we have a maze of twisty, disconnected passages, vulnerable to a 
zillion hackers.




More information about the end2end-interest mailing list