[ih] History of the TCP/UDP port space
David L. Mills
mills at udel.edu
Tue Jan 24 11:55:41 PST 2006
Non-Unix APIs? Redux the Fuzzball.
Fuzzballs were PDP11 garages in which to park one or more portable
processes implementing the RT-11 virtual machine. Each machine had an IP
address; the Hellospeak routing algorithm figured out in which garage
they were parked. Each machine had a doorbell process that listened for
a packet, looked up the destination port and loaded the designated
program, much like inetd does now. The TCP interface included simple
open and close and urgent interrupt that actually worked. I don't submit
this as novel, just as an historic example of TCP interface. The first
use I can document was for the SATNET coming-out party at the 1979
National Computer Conference.
David P. Reed wrote:
> Looking back in my memory on some non-Unix implementations of early
> TCP stacks, there were some other inputs that may not have been very
> clearly documented. In systems that had strong "security" goals, the
> right to listen on a particular port was handled in different ways.
> The "Berkeley sockets" interface is now pretty ubiquitous, but prior
> to that, the OS APIs were not part of the protocol definition. So on
> Multics and on some other early implementations I remember vaguely,
> the ability to associate a port number with a process was constrained
> by some very different APIs - the "bind" call was not standard.
> I don't have the documents near at hand, but I'd suggest that Ken
> Pogran (who did an early Multics stack with Doug Wells), Dave Clark
> (who did a stack on the Xerox Alto), Dave Moon (who helped with a
> stack, perhaps along with Stallman, Knight, and Greenblatt, for the
> MIT AI Lab's ITS), and the TENEX stack all had various constraints on
> the way ports were associated with processes that required dividing up
> the port address space. There are aspects of the design evolution
> that had little to do with BSD, which came a lot later.
> I suspect even the CADR Lisp Machine and the various VAX OS's had
> non-BSD-style APIs that shaped the requirements on the port space and
> Bob Braden wrote:
>> Barbara Denny asked me "when the port number space was divided into 3
>> groups (well-known ports, registered ports and dynamic ports)." I
>> thought the following reply might be of more general historical
>> Bob Braden
>> I just spent 2 minutes in the RFC search engine, and here is what
>> I learned.
>> Before March 1990 (I traced it as far back as RFC 760 in Jan 1981),
>> the port space was divided into well-known ports and dynamic ports,
>> where the WK ports occupied the lowest 255 values and the rest was
>> Around 1984, BSD UNIX became a factor in the Internet, and BSD reserved
>> some ports in the range 256-1024 for their specific use. These were
>> not-quite-so-well-known ports, in effect. For some years, the
>> Internetters tried to ignore this intrusion on the prerogatives of the
>> protocol jocks by the OS jocks. But in March 1990, Jon Postel conceded
>> to the reality of BSD importance by including "Unix Ports" in Assigned
>> Numbers (RFC 1060), with the comment:
>> "By convention, ports in the range 256 to 1024 are used for "Unix
>> Standard" services. Listed here are some of the normal uses of these
>> port numbers."
>> Jon resolved this untidiness in July 1992 in RFC 1340. This Assigned
>> Numbers RFC expanded the well-known port space to 0-1023 and defined
>> the rest (1024-65535) as "Registered". Registered Ports had the
>> "The Registered Ports are not controlled by the IANA and on most
>> can be used by ordinary user processes or programs executed by
>> Ports are used in the TCP [45,106] to name the ends of logical
>> connections which carry long term conversations. For the purpose of
>> providing services to unknown callers, a service contact port is
>> defined. This list specifies the port used by the server process
>> as its
>> contact port. While the IANA can not control uses of these ports it
>> does register or list uses of these ports as a convienence to the
>> The Registered Ports are in the range 1024-65535."
>> The Unix ports were then listed in the Registered Ports space.
>> Hope this helps,
More information about the internet-history