[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 
> usage.
> 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
>> interest.
>> Bob Braden
>> __________________________________________________________________
>> Barbara,
>> 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
>> dynamic.
>> 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 
>> comment:
>>   "The Registered Ports are not controlled by the IANA and on most 
>> systems
>>   can be used by ordinary user processes or programs executed by 
>> ordinary
>>   users.
>>   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
>>   community.
>>   The Registered Ports are in the range 1024-65535."
>> The Unix ports were then listed in the Registered Ports space.
>> Hope this helps,
>> Bob

More information about the internet-history mailing list