Rant: It should have been TCP / UDP / IP not TCP / IP
- Dominant language
- No language data
- Stars
- 328
- Forks
- 12
- PR merge metrics
- No merged PRs in 30d
Description
Once upon a time, the Engineers of the Internet decided, rightly so, to refactor the new and shiny TCP -- which was much better than the old and sluggish NCP -- into TCP/IP, a cleaner, layered design. The idea was that IP would provide the Host-to-Host connectivity in a best-effort basis, and TCP would provide reliability to streams of data. All well and good.
In that refactoring, UDP got "un-designed" as an afterthought. It was the place to put all the protocols that would not require the advanced reliability and congestion control of TCP.
> Actually, UDP was “un-designed” by me and others. By this I mean that UDP was the final expression of a process that today we would call “factoring” an overcomplex design. ... UDP was actually “designed” in 30 minutes on a blackboard when we decided pull the original TCP protocol apart into TCP and IP, and created UDP on top of IP as an alternative for multiplexing and demultiplexing IP datagrams inside a host among the various host processes or tasks. But it was a placeholder that enabled all the non-virtual-circuit protocols since then to be invented, including encapsulation, RTP, DNS, …, without having to negotiate for permission either to define a new protocol or to extend TCP by adding “features”.
> ~ David Reed, "[designer of UDP](http://www.reed.com/blog-dpr/?page_id=6)" and author of the [End-to-End Principle](http://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf).
TCP and UDP are [the new thin-waist](http://tools.ietf.org/html/draft-rosenberg-internet-waist-hourglass-00) of the internet. Thankfully, enough applications depended on UDP that NATs were forced to implement support for both TCP and UDP. Unfortunately, all new transport protocols have to be built on top of one of these.
What is UDP good for anyway? It provides packet multiplexing for distinct flows of information in each host (+ a weak checksum, that arguably should be refactored into a different layer). It's like an extended IP address: 10.20.30.40:5678 is just a 6 octet address. If only they had realized IP needed to connect programs, instead of hosts! Make IP addresses 6 octets, reduce TCP complexity, and have no UDP. But sadly, the notion of an endpoint was broken in two pieces, the IP address of the computer, and the Port of the server, inside a program, inside the computer. (You would think that with the IPv6 address size this would have been rethought...).
It gets worse. If only they had decided to do the next best thing: make UDP the standard way to multiplex information flows between hosts, and make TCP use UDP! Note that all UDP functionality is a subset of TCP. It would have been a (mostly) trivial decision then! Simpler TCP. Simpler OS network stacks. Simpler NATs. Simpler Thin Waist. Simpler Routers. Simpler network programs.
Simpler WebRTC. Yes, we will still live with this annoying indecision for a long time to come.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.