UDP and me
reed.com
reed.com
UDP was a general encapsulation for doing the same thing one level higher. Instead of IP level protocol numbers, the whole thing was repeated one level higher, and there are standard UDP port numbers.[2] At the network level, there's no big gain here, and it adds another header and some overhead. But BSD and the socket interface made a big distinction between software based on existing protocols and ones using the "raw socket" interface. That pushed new work to UDP and away from the IP protocol level.
If you want to have fun with your network, crank up something that speaks ISO-TP4 (protocol #29) such as Windows 2000 and see how far the packets get. Or look at your corporate network's packet traffic and see if there's any activity on the old protocol numbers.
[1] http://www.iana.org/assignments/protocol-numbers/protocol-nu... [2] http://www.iana.org/assignments/service-names-port-numbers/s...
It's interesting to read him saying this, because Reed is also one of the co-authors on this foundational paper on Internet design:
http://web.mit.edu/Saltzer/www/publications/endtoend/endtoen...
... and a straightforward consequence of the philosophy of the End To End Argument is that encryption doesn't belong in TCP at all --- different applications will have different service models, and E2E tells us not to confine those applications to a lowest common denominator provided by a low level protocol.
At any rate, given the evolution of transport cryptography between 1980 and 2010, the lack of mandatory TCP encryption is almost certainly a mercy.
Plus, we'd be stuck with useless 1980 crypto forever.
I don't know if I've noticed you comment specifically on QUIC, for example, but there do seem to be more recent efforts to embed exactly the right amount of crypto in the transport layer.
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 overly complex design.
Actually he should not be embarrassed. Engineering at the core is taking something complex and making it simple, as simple as can be but not too simple. It takes tons of effort to simplify. That is why most engineers/developers think that complexity shows their knowledge, it is actually the direct reverse of that. But where you try to simplify you will feel currents pulling you the other way and you'll have to swim upstream for a bit.
Thank you for inventing UDP and by inventing I mean simplifying something unnecessarily complex into something usable. It has been the key to many game technologies and has made possible and been a base platform for some wonderfully complex things, simply by being simple. Complexity only through simple parts.
“Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.” ― Ernst F. Schumacher
“Life is really simple, but we insist on making it complicated.” ― Confucius
Rich Hickey, “Simple Made Easy”: http://www.infoq.com/presentations/Simple-Made-Easy
Stu Halloway, “Simplicity Ain’t Easy”: https://www.youtube.com/watch?v=cidchWg74Y4
Its difficult making complicated things seem simple.
I am glad that my kernel still has a loose source routing compile option and that my #1 UDP client (and #2 TCP client, right after djb's tcpclient) has source routing options. That client is the orginal nc.
Those options do not get much use (yet) but they represent history I do not want to forget: what is being discussed in the blog post.
Apparently people did believe this was the way routing should be done; I like that thinking. As I see it, assumptions were 1. user is not stupid and 2. user should be allowed at least some control.
Given a choice between the (theoretical) "end-to-end" internet and the (actual) third party "policy-based" routed internet, I would take the former. But what do I know? I'm just a dumb user.
Short of that, I'll settle for an overlay with source routing. UDP works well enough for making overlays, so thank you Mr. Reed.
Recently I read a small but significant paper by Carl A. Sunshine [1] (from the beginning of 1977) about Source Routing and some of its implications. This was written at a time when there was still a very active community researching the fundamentals of Computer Networking.
He shows how one could build an even simpler and dumber (while still functional) core computer network with no routing infrastructure (pretty amazing concept when you think of it), no global addresses and no global node naming. All that complexity would be transferred to the endpoints, making the whole network even more configurable and adaptable to topology changes. Endpoints would have a more powerful and free participation in that network. The End-to-End Principle taken to its limits.
Is there still some deep fundamental research on the feasibility of such a large scale network based on Source Routing ?
[1] Source Routing in Computer Networks http://cartap.us/p29-sunshine.pdf
SIP has it,too, one of their many mistakes that has to be dealt with by sysadmins in production.
> [...] 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.
"The term distributed computing has been used to describe the loosely coupled systems built using this technology. But like many other fashionable terms, distributed computing means different things to different users of the term"
For typical webapps it wouldn't help because of the difficulty traversing firewalls. This seems to be about standardizing facilities for browser-based OSes like FXOS and ChromeOS to make things like IRC clients
It is only designed in the way that it explicitly has no design.
There's four fields in the UDP header.