TSVWG                                                          J. Touch
Internet Draft                                                 USC/ISI
Intended status: Best Current Practice                     May 30, 2012
Expires: November 2012



                  Recommendations for Transport Port Uses
                     draft-ietf-tsvwg-port-use-00.txt


Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six
   months and may be updated, replaced, or obsoleted by other documents
   at any time.  It is inappropriate to use Internet-Drafts as
   reference material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html

   This Internet-Draft will expire on November 30, 2012.

Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors. All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document. Please review these documents
   carefully, as they describe your rights and restrictions with
   respect to this document. Code Components extracted from this
   document must include Simplified BSD License text as described in
   Section 4.e of the Trust Legal Provisions and are provided without




Touch                 Expires November 30, 2012                [Page 1]


Internet-Draft  Recommendations for Transport Port Use         May 2012


   warranty as described in the Simplified BSD License.


Abstract

   This document provides recommendations to application and service
   designers on how to use the transport protocol port number space to
   help in its preservation. **NOTE THAT THIS CURRENT VERSION IS
   LARGELY AN OUTLINE OF ISSUES**.

Table of Contents


   1. Introduction...................................................2
   2. Conventions used in this document..............................2
   3. History........................................................3
   4. Current Port Use...............................................4
   5. What is a Port?................................................5
   6. Conservation...................................................6
   7. How to Use Registered Ports....................................6
      7.1. Do You Need a Port?.......................................6
      7.2. How Many Ports?...........................................6
      7.3. Picking a Port Number.....................................7
      7.4. Support for Security......................................7
      7.5. Support for Future Versions...............................7
      7.6. Transport Protocols.......................................7
      7.7. When to Register..........................................7
      7.8. Other Considerations......................................8
   8. Recommendations for Future Allocation..........................8
   9. Security Considerations........................................8
   10. IANA Considerations...........................................8
   11. Conclusions...................................................9
   12. References....................................................9
      12.1. Normative References.....................................9
      12.2. Informative References...................................9
   13. Acknowledgments..............................................11

1. Introduction

   (TBD)

2. Conventions used in this document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC-2119 [RFC2119].



Touch                 Expires November 30, 2012                [Page 2]


Internet-Draft  Recommendations for Transport Port Use         May 2012


   In this document, these words will appear with that interpretation
   only when in ALL CAPS. Lower case uses of these words are not to be
   interpreted as carrying RFC-2119 significance.

   In this document, the characters ">>" preceding an indented line(s)
   indicates a compliance requirement statement using the key words
   listed above. This convention aids reviewers in quickly identifying
   or finding the explicit compliance requirements of this RFC.

3. History

   The term 'port' was first used in RFC33 to describe a simplex
   communication path from a process [RFC33]. At a meeting described in
   RFC37, an idea was presented to decouple connections between
   processes and links that they use as paths, and thus to include
   source and destination socket identifiers in packets. RFC38 explains
   this in detail, in which processes might have more than one of these
   paths, and that more than one may be active at a time [RFC38]. As a
   result, there was the need to add a process identifier to the header
   of each message, so that the incoming data could be demultiplexed to
   the appropriate process. RFC38 further suggested that 32 bits would
   be used for these identifiers. RFC48 discusses the current notion of
   listening on a given port, but does not discuss how the issue of
   port determination [RFC48]. RFC61 notes that the challenge of
   knowing the appropriate port numbers is "left to the processes" in
   general, but introduces the concept of a "well-known" port for
   common services [RFC61].

   RFC76 addresses this issue more constructively, proposing a
   "telephone book" by which an index would allow ports to be used by
   name, but still assumes that both source and destination ports are
   fixed by such a system [RFC76]. RFC333 suggests that the port pair,
   rather than an individual port, would be used on both sides of the
   connection for demultiplexing messages [RFC333]. This is the final
   view in RFC793 (and its predecessors, including IEN 112 [IEN112]),
   and brings us to their current meaning. RFC739 introduces the notion
   of generic reserved ports, used for groups of protocols, such as
   "any private RJE server" [RFC739]. Although the overall range of
   such ports was (and remains) 16 bits, only the first 256 (high 8
   bits cleared) in the range were considered assigned.

   RFC758 is the first to describe a list of such well-known ports, as
   well as describing ranges used for different purposes [RFC758]:






Touch                 Expires November 30, 2012                [Page 3]


Internet-Draft  Recommendations for Transport Port Use         May 2012


      Binary    Octal

      -----------------------------------------------------------

      0-63      0-77      Network Wide Standard Function

      64-127    100-177   Hosts Specific Functions

      128-223   200-337   Reserved for Future Use

      224-255   340-377   Any Experimental Function

   In RFC820, those range meanings disappeared, and a single list of
   assignments is presented [RFC820]. By RFC900, they appeared as
   decimal numbers rather than the octal ranges used previously
   [RFC900]. RFC1340 increased this range from 0..255 to 0..1023, and
   began to list TCP and UDP port assignments individually (although
   the assumption was, and remains, that once assigned a port applies
   to all transport protocols, including TCP, UDP, recently SCTP and
   DCCP, as well as ISO-TP4 for a brief period in the early 1990s)
   [RFC1340]. RFC1340 also established the Registered space of 1024-
   59151, though it notes that it is not controlled by the IANA at that
   point. The list provided by RFC1700 in 1994 remained the standard
   until it was declared replaced by an on-line version, as of RFC3232
   in 2002 [RFC1700][RFC3232].

4. Current Port Use

   The current IANA website (www.iana.org) indicates three ranges of
   port assignments:

      Binary         Hex

      -----------------------------------------------------------

      0-1023         0x03FF         Well-Known (a.k.a. 'system')

      1024-49151     0x0300-0xBFFF  Registered (a.k.a. 'user')

      49152-65535    0xC000-0xFFFF  Dynamic/Private

   Well-known encompasses the range 0..1023. On some systems, use of
   these ports requires privileged access, e.g., that the process run
   as 'root', which is why these are referred to as 'system' ports. The
   ports from 1024..49151 denotes non-privileged services, known as
   'registered'; because these ports do not run with special



Touch                 Expires November 30, 2012                [Page 4]


Internet-Draft  Recommendations for Transport Port Use         May 2012


   privileges, they are often referred to as 'user' ports. Dynamic or
   Private ports are not registered through IANA.

   Both Well-Known and Registered ports are registered through IANA, so
   both are sometimes called "registered ports". As a result, the term
   'registered' is ambiguous, referring either to the entire range 0-
   49151 or to the user ports. Complicating matters further, 'system'
   ports do not always require special (i.e., 'root') privilege.
   Regardless, for clarity, throughout the remainder of this document
   we will refer to the port ranges as 'system', 'user', and 'private'.

5. What is a Port?

   A port is a 16-bit number used for two distinct purposes:

      o  Demultiplexing transport connections within an end host

      o  Identifying a service

   The first reason requires that each transport connection between a
   given pair of IP addresses use a different pair of ports, but does
   not require either coordination or registration of port use. It is
   the second reason that drives the need for a common registry.

   Consider a user wanting to run a web server. That service could run
   on any port, provided that all clients knew what port to use to
   access that service at that host. Such information can be
   distributed out of band, e.g., in the URL, such as:

      http:51509//www.example.com/

   Ultimately, it's important to keep in mind that the correlation of a
   service with a port number is an agreement between the two endpoints
   of the connection only. The rest of the world might think that
   you're sending DNS packets on port 53, but you can run a web server
   on that port just fine, provided the server and client both decide
   that port 53 is for HTTP web server traffic.

   Which brings us to the concept of a service. A service is the
   combination of ISO Layers 5-7 that represent an application protocol
   capability. For example www (port 80) is a service that uses HTTP as
   an application protocol, and provides a common web server. However,
   it is possible to use HTTP for other purposes, such as command and
   control. This is why some current service names (HTTP, e.g.) are a
   bit overloaded - they describe not only the application protocol,
   but a particular service.



Touch                 Expires November 30, 2012                [Page 5]


Internet-Draft  Recommendations for Transport Port Use         May 2012


   IANA registers ports so that endpoints on the Internet do not need
   to pairwise, explicitly coordinate the meaning of their port
   numbers. This is the primary reason for registering ports with IANA
   - to have a common agreement between all endpoints on the Internet
   as to the meaning of a port.

   Ports are used for other purposes as well, however. The other
   primary reason for registering ports with IANA is to simplify end
   system configuration, so individual installations do not need to
   coordinate their use of arbitrary ports. A similar reason is to
   simplify firewall management, so that a single, fixed firewall
   configuration can either permit or deny a service.

6. Conservation

   (statistics of port allocations)

   Ways to conserve, e.g., use service names (DNS SRV, TCP portnames,
   etc.), use portmapper, Bonjour, or other services for demuxing

7. How to Use Registered Ports

7.1. Do You Need a Port?

   How to carefully use experimental ports (ref TCPM doc)

   Reasons NOT to register a port, e.g.,

      o  not for a copy of an existing service

      o  not for anything a vanilla web client can connect to

      o  not for performance

      o  not for insecure versions of secure services (creates security
         hole)

   Ports vs. SRV names

   Reasons why only server ports are registered (not client)

7.2. How Many Ports?

   Reasons NOT to have multiple ports (performance, etc.)

   Techniques to reduce port use:



Touch                 Expires November 30, 2012                [Page 6]


Internet-Draft  Recommendations for Transport Port Use         May 2012


      o  When can you use a discovery service

      o  When can you use multiplexing

      o  When can you use handoff with in-band IDs

7.3. Picking a Port Number

   Would you still want one if you can't pick the value?

   Would you still want the UDP / TCP one if it didn't match the value
   for a previously assigned TCP / UDP one?

7.4. Support for Security

   Why this is generally expected

   Why this should/should not use a separate port (it's a performance
   issue, and performance would argue for multiple ports anyway, and
   ports are a limited resource)

   TLS allows optional security

7.5. Support for Future Versions

   Reasons NOT to include the version number in the name

7.6. Transport Protocols

   UDP vs. TCP vs. others - and when the transport you lookup is not
   always the one you end up using

   When/why you need multiples

   When UDP is -disc

   Caveats about using broadcast as discovery.

7.7. When to Register

   What range to use before registering

   When are you ready to register (basically when you have enough
   information to fill out the application)

   Reasons NOT to squat



Touch                 Expires November 30, 2012                [Page 7]


Internet-Draft  Recommendations for Transport Port Use         May 2012


7.8. Other Considerations

   Higher bar for system ports

   Changing a name

   Why aliases are bad and now deprecated

   Providing enough information for IANA review, e.g., to avoid
   Internet congestion, fit in MTUs, deal with reordering, etc.

   Provide enough information that's stand-alone; don't describe a
   protocol by a URL, e.g. - how to do a high-level description (what
   are we looking for?)

   Why a heartbeat port MUST be on the same port as a service.

   Relation of this doc to the IANA Port Experts review process (this
   is just a summary from the user/designer viewpoint, and is NOT
   binding to IANA or its Expert Review team)

8. Recommendations for Future Allocation

   Abolish the distinction of system ports? BIG QUESTION HERE...

   Why NOT to allocate ports or names for use as examples

9. Security Considerations

   This document discusses ways to conserve port numbers, notably
   through encouraging demultiplexing within a single port.  As such,
   there may be cases where two variants of a protocol - insecure and
   secure, are suggested to share the same port (e.g., HTTP and HTTPS,
   though currently those are assigned different ports).

   This document reminds protocol designers that port numbers are not a
   substitute for security, and should not alone be used to avoid
   denial of service or firewall traffic, notably because their use is
   not regulated or authenticated.

10. IANA Considerations

   The entirety of this document focuses on IANA issues, notably
   suggestions that help ensure the conservation of port numbers and
   provide useful hints for issuing informative requests thereof.




Touch                 Expires November 30, 2012                [Page 8]


Internet-Draft  Recommendations for Transport Port Use         May 2012


11. Conclusions

   <Add any conclusions>

12. References

12.1. Normative References

   [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.

12.2. Informative References

   [Hi95]    Hickman, K., "The SSL Protocol", February 1995.

   [IEN112]  Postel, J., "Transmission Control Protocol", IEN 112,
             August 1979.

   [RFC33]   Crocker, S., "New Host-Host Protocol", RFC 33 February
             1970.

   [RFC37]   Crocker, S., "Network Meeting Epilogue", RFC 37, March
             1970.

   [RFC38]   Wolfe, S., "Comments on Network Protocol from NWG/RFC
             #36", RFC 38, March 1970.

   [RFC48]   Postel, J., S. Crocker, "Possible protocol plateau", RFC
             48, April 1970.

   [RFC61]   Walden, D., "Note on Interprocess Communication in a
             Resource Sharing Computer Network", RFC 61, July 1970.

   [RFC76]   Bouknight, J., J. Madden, G. Grossman, "Connection by
             name: User oriented protocol", RFC 76, October 1970.

   [RFC333]  Bressler, R., D. Murphy, D. Walden. "Proposed experiment
             with a Message Switching Protocol", RFC 333, May 1972.

   [RFC739]  Postel, J., "Assigned numbers", RFC 739, November 1977.

   [RFC758]  Postel, J., "Assigned numbers", RFC 758, August 1979.

   [RFC768]  Postel, J., "User Datagram Protocol", RFC 768, August
             1980.




Touch                 Expires November 30, 2012                [Page 9]


Internet-Draft  Recommendations for Transport Port Use         May 2012


   [RFC793]  Postel, J., "Transmission Control Protocol" RFC 793,
             September 1981

   [RFC820]  Postel, J., "Assigned numbers", RFC 820, August 1982.

   [RFC900]  Reynolds, J., J. Postel, "Assigned numbers", RFC 900, June
             1984.

   [RFC1122] Deering, S., "Host extensions for IP multicasting", RFC
             1122, August 1989.

   [RFC1340] Reynolds, J., J. Postel, "Assigned numbers", RFC 1340,
             July 1992.

   [RFC1700] Reynolds, J., J. Postel, "Assigned numbers", RFC 1700,
             October 1994.

   [RFC1918] Rekhter, Y., B. Moskowitz, D. Karrenberg, G. J. de Groot,
             E. Lear, "Address Allocation for Private Internets", RFC
             1918, February 1996.

   [RFC2616] Fielding, R., J. Gettys, J. Mogul, H. Frystyk, L.
             Masinter, P. Leach, T. Berners-Lee, "Hypertext Transfer
             Protocol -- HTTP/1.1", RFC 2616, June 1999.

   [RFC2780] Bradner, S., V. Paxson, "IANA Allocation Guidelines For
             Values In the Internet Protocol and Related Headers", RFC
             2780, March 2000.

   [RFC2817] Khare, R., S. Lawrence, "Upgrading to TLS Within
             HTTP/1.1", RFC 2817, May 2000.

   [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.

   [RFC3232] Reynolds, J. (Ed.), "Assigned Numbers: RFC 1700 is
             Replaced by an On-line Database", RFC 3232, January 2002.

   [RFC4340] Kohler, E., M. Handley, S. Floyd, "Datagram Congestion
             Control Protocol (DCCP)", RFC 4340, March 2006.

   [RFC4960] Stewart, R. (Ed.), "Stream Control Transmission Protocol",
             RFC 4960, September 2007.

   [RFC5246] Dierks, T., E. Rescorla, "The Transport Layer Security
             (TLS) Protocol Version 1.2", RFC 5246, August 2008.




Touch                 Expires November 30, 2012               [Page 10]


Internet-Draft  Recommendations for Transport Port Use         May 2012


13. Acknowledgments

   TBD

   This document was prepared using 2-Word-v2.0.template.dot.

Authors' Addresses

   Joe Touch
   USC/ISI
   4676 Admiralty Way
   Marina del Rey, CA 90292-6695
   U.S.A.

   Phone: +1 (310) 448-9151
   EMail: touch@isi.edu

































Touch                 Expires November 30, 2012               [Page 11]