news.ycombinator.com
Vint Cerf on mistakes he made in TCP/IP
Excerpt
We're running out of IPv4 addresses, even with* NAT (and "CGNAT", which is just regular NAT with a fancy name). Most of those endpoints are users, not servers--you need at least 30 bits to give one prefix to each household with a current internet connection. Between the expected growth of internet users and all current enterprise networks, you need well in excess of 40 bits for the prefix. … ... Vint mentioned the lack of encryption as a mistake, but even on private networks, the 16-bit TCP checksums are too weak to protect against bit-flips. Many orgs noticed that enforcing encryption reduces "random" crashes and errors, because it also enforces a strong checksum, typically 128 or 256 bit. However, even a 32-bit checksum would have sufficed for ordinary use. Almost all "real" protocols built on top of TCP eventually end up reinventing the same wheels: message boundaries, logical sub-streams with priorities, and strong checksums or encryption. ... Also, IP never had a message checksum, only a header checksum. The checksumming is at the TCP layer and it is still alive. ... You generally want multiple independent streams (to avoid head of line blocking), message and stream transmission, and optional reliability on a per-stream/message basis. … Not entirely. Head-of-line blocking is an inherent problem with TCP so you can’t have real priority “streams” like you can with eg QUIC. Another “missing feature” is datagrams, ie simply opting out of the retransmission part of tcp. That said, I still agree with the general statement. foobarian on May 8, 2023 ... > As a result of implementation differences and middlebox interactions, new applications SHOULD NOT employ the TCP urgent mechanism. However, TCP implementations MUST still include support for the urgent mechanism. LegionMammal978 on May 9, 2023 Of course, basic ftp:// clients (the only kind that are really used today) would probably rather just close the control connection, which has the same effect. … The fact that we have a whole bunch of middle-boxes that don't allow DCCP, SCTP, etc, is hardly the fault of Cerf et al. zubnix on May 8, 2023 Byte streams are not ideal to deal with for protocols. As soon as you have encryption, like tls, you have discrete messages anyway (records) and the stream is largely an illusion. … * TCP should have been a layer above UDP, not beside it. Or UDP and the urgent/out-of-band option in TCP should have been equivalent. This would prevent the blocking of UDP in corporate networks and countries trying to stop P2P networks. * Both the network address and checksum should have been variable-length. * NAT should not exist, because variable-length addresses would have negated most of its usefulness (other than for censorship). * TCP should have been designed for networks with high latency (minutes/hours/days) to be ready for use in space. Optimistic delivery (is this the word?) should have been used instead of handshakes, but this might have required encryption from the start, to prevent sending sensitive information to the wrong recipient before it's verified. * Address negotiation should have been built-in, so that peers IDs stay connected if the network changes, regardless of their IP addresses. TCP is a connected protocol (unlike UDP which is connectionless) so this was never really considered, but connected protocols simply don't work on the mobile web without yak shaving or embedding the stream in a tunnel that handles reconnection. These issues are all severe enough that we probably shouldn't be using TCP directly. I know that they would haunt me had I designed it. It would be nice if the web provided a WebSocket that wasn't terrible, that handled everything mentioned above.
Related Pain Points
IPv4 address exhaustion limits scalability
8IPv4 address space is exhausted even with NAT/CGNAT, requiring 40+ bits of prefix for expected internet growth. This limits device addressability and forces reliance on NAT, which adds complexity.
Weak TCP checksums provide insufficient data integrity
716-bit TCP checksums are too weak to detect bit-flips; organizations implementing encryption see reduced crashes because encryption enforces stronger 128-256 bit checksums. This architectural weakness forces all-or-nothing security decisions.
UDP blocked by corporate firewalls and NAT middleboxes
7Middleboxes block non-TCP protocols (UDP, DCCP, SCTP) in corporate networks and censoring countries, forcing applications back to TCP despite TCP being unsuitable for many use cases.
Head-of-Line Blocking with TCP Multiplexing
6Protocols attempting to multiplex or pipeline concurrent commands over a single TCP connection encounter head-of-line blocking, where TCP's ordered delivery constraint prevents concurrent messages from being processed independently, forcing developers to re-implement flow control and framing.
TCP Unused or Broken Protocol Features
3TCP has a long history of unused or broken features (e.g., TCP urgent flag) that add complexity without functional benefit, creating legacy cruft that cannot be removed due to backward compatibility constraints.