[ih] History of the TCP/UDP port space

David P. Reed dpreed at reed.com
Mon Jan 23 18:51:17 PST 2006


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