udp and me
A number of people have lately taken to introducing me as “the designer of UDP”, or worse “the inventor of UDP.” While I’m honored whenever anybody appreciates important design choices where I’ve been involved, this is not quite right, and it’s a little embarrassing to be the inventor of something so simple.
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. Originally, the ARPANET end-to-end protocol NCP was a “kitchen sink” oriented toward providing remote teletype-centric access using the “telnet” protocol and the “FTP” protocol to remote machines over a packet network.
A group of us, interested in a mix of real-time telephony, local area networks, distributed operating systems, and communications security, argued for several years for a datagram based network, rather than a virtual circuit based network. The group involved me, John Schoch and Yogen Dalal of Xerox PARC, Danny Cohen of ISI (now at Caltech, I think), and Steve Crocker, with Jon Postel as a supporter, and Vint Cerf and Bob Kahn as neutral referees.
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”.
Roughly the same group, based on the same thought process (later called the “end-to-end argument“) argued for factoring the Telnet features that were in NCP out of TCP, into the endpoints of teletype applications only, which used the Telnet protocol. The argument was that Telnet was the only user of NCP “out of band interrupt signalling” and “send out of order” features, and that most computer-computer apps did not need it. Uses for operating systems of the TELNET features being “the interrupt” and “line at a time transmission”. I was the guy who came up with the compromise stub for this family of stuff (the “urgent pointer”), though in fact we could have even eliminated that, using a parallel signalling connection (again the idea that two connections would be too costly for each virtual teletype kept us from completely simplifying TCP.)
And finally, I and Steve Crocker argued for a more flexible endpoint control over addressing, which got turned into a design (also by me) as “source routing” options, particularly “loose source routing”. It should have been the standard address, not an option, because the idea that a federated connection of autonomous networks gets to “decide” routing in a way that can’t be overridden by endpoints has made the network less scalable and more fragile than it need be. We lost because of an argument that “addresses were too big” for teletype packets, and the thought that 232 (4 billion) machines would NEVER be part of the Internet. (this also eliminated strong arguments made for longer, hierarchical addresses).
One project where my friend and officemate Steven T. Kent (now chief scientist and vice president at BBN, and a chief advisor to NSA) and I lost was our strong argument to put mandatory end-to-end encryption into TCP (and adaptations of the ideas to UDP-based protocols, such as RTP, hich I worked out but abandoned). Steve’s design was rejected, not because it was unsound, but because NSA did not want to see ANY encryption work going on in the public domain ARPA project, some say because they did not want to see the world be “too secure” by default. (Rivest and friends had just invented RSA, and the government was trying to declare it Top Secret, then later prohibited under ITAR munitions control export laws).
I mention this because it is all still relevant today. “Inventing UDP” is actually a joke, but some people seem to take it seriously. I don’t think any one person ever “invents” anything by themselves. Sometimes they manage to frame a very important problem, which lets others build on that insight. I think we did do that in 1976-1977. This history furnished a number of examples of the arguments that led Jerry Saltzer, me, and Dave Clark to formalize the “end-to-end argument” (my Ph.D. thesis and our observations participating in secure OS kernel design were other examples).
So, as a shorthand for all the battles I joined in those early days to modularize the Internet protocols, I guess being a “designer of UDP” is not a terrible shorthand, and it gives me a chance to tell the real story as I see it. But I’m still a bit embarrassed. I’d rather people focused on the important ideas we sorted out in those days.