diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc5595.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc5595.txt')
-rw-r--r-- | doc/rfc/rfc5595.txt | 1067 |
1 files changed, 1067 insertions, 0 deletions
diff --git a/doc/rfc/rfc5595.txt b/doc/rfc/rfc5595.txt new file mode 100644 index 0000000..64a7e06 --- /dev/null +++ b/doc/rfc/rfc5595.txt @@ -0,0 +1,1067 @@ + + + + + + +Network Working Group G. Fairhurst +Request for Comments: 5595 University of Aberdeen +Updates: 4340 September 2009 +Category: Standards Track + + + The Datagram Congestion Control Protocol (DCCP) Service Codes + +Abstract + + This document describes the usage of Service Codes by the Datagram + Congestion Control Protocol, RFC 4340. It motivates the setting of a + Service Code by applications. Service Codes provide a method to + identify the intended service/application to process a DCCP + connection request. This provides improved flexibility in the use + and assignment of port numbers for connection multiplexing. The use + of a DCCP Service Code can also enable more explicit coordination of + services with middleboxes (e.g., network address translators and + firewalls). This document updates the specification provided in RFC + 4340. + +Status of This Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright and License Notice + + Copyright (c) 2009 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 warranty as + described in the BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + + + +Fairhurst Standards Track [Page 1] + +RFC 5595 DCCP Service Codes September 2009 + + + modifications of such material outside the IETF Standards Process. + Without obtaining an adequate license from the person(s) controlling + the copyright in such materials, this document may not be modified + outside the IETF Standards Process, and derivative works of it may + not be created outside the IETF Standards Process, except to format + it for publication as an RFC or to translate it into languages other + than English. + +Table of Contents + + 1. Introduction ....................................................3 + 1.1. History ....................................................3 + 1.2. Conventions Used in This Document ..........................6 + 2. An Architecture for Service Codes ...............................6 + 2.1. IANA Port Numbers ..........................................6 + 2.2. DCCP Service Code Values ...................................7 + 2.2.1. New Versions of Applications or Protocols ...........8 + 2.3. Service Code Registry ......................................8 + 2.4. Zero Service Code ..........................................9 + 2.5. Invalid Service Code .......................................9 + 2.6. SDP for Describing Service Codes ...........................9 + 2.7. A Method to Hash the Service Code to a Dynamic Port ........9 + 3. Use of the DCCP Service Code ...................................10 + 3.1. Setting Service Codes at the Client .......................11 + 3.2. Using Service Codes in the Network ........................11 + 3.3. Using Service Codes at the Server .........................12 + 3.3.1. Reception of a DCCP-Request ........................13 + 3.3.2. Multiple Associations of a Service Code + with Ports .........................................14 + 3.3.3. Automatically Launching a Server ...................14 + 4. Security Considerations ........................................14 + 4.1. Server Port Number Reuse ..................................15 + 4.2. Association of Applications with Service Codes ............15 + 4.3. Interactions with IPsec ...................................15 + 5. IANA Considerations ............................................16 + 6. Acknowledgments ................................................16 + 7. References .....................................................17 + 7.1. Normative References ......................................17 + 7.2. Informative References ....................................17 + + + + + + + + + + + + +Fairhurst Standards Track [Page 2] + +RFC 5595 DCCP Service Codes September 2009 + + +1. Introduction + + DCCP specifies a Service Code as a 4-byte value (32 bits) that + describes the application-level service to which a client application + wishes to connect ([RFC4340], Section 8.1.2). A Service Code + identifies the protocol (or the standard profile, e.g., [RTP-DCCP]) + to be used at the application layer. It is not intended to be used + to specify a variant of an application or a specific variant of a + protocol (Section 2.2). + + The Service Code mechanism allows an application to declare the set + of services that are associated with server port numbers. This can + affect how an application interacts with DCCP. It also allows + decoupling of the role of port numbers to indicate a desired service + from the role of port numbers in demultiplexing and state management. + A DCCP application identifies the requested service by the Service + Code value in a DCCP-Request packet. Each application therefore + associates one or more Service Codes with each listening port + ([RFC4340], Section 8.1.2). + + The use of Service Codes can assist in identifying the intended + service by a firewall and may assist other middleboxes (e.g., a proxy + server or network address translator (NAT) [RFC2663]). Middleboxes + that desire to identify the type of data a flow claims to transport + should utilize the Service Code for this purpose. When consistently + used, the Service Code can provide a more specific indication of the + actual service (e.g., indicating the type of multimedia flow or + intended application behaviour) than deriving this information from + the server port value. + + The more flexible use of server ports can also offer benefits to + applications where servers need to handle very large numbers of + simultaneous-open ports to the same service. + + RFC 4340 omits a description of the motivation behind Service Codes, + and it does not properly describe how Well Known and Registered + server ports relate to Service Codes. The intent of this document is + to clarify these issues. + + RFC 4340 states that Service Codes are not intended to be DCCP- + specific. Service Codes, or similar concepts, may therefore also be + useful to other IETF transport protocols. + +1.1. History + + It is simplest to understand the motivation for defining Service + Codes by describing the history of the DCCP protocol. + + + + +Fairhurst Standards Track [Page 3] + +RFC 5595 DCCP Service Codes September 2009 + + + Most current Internet transport protocols (TCP [RFC793], UDP + [RFC768], SCTP (the Stream Control Transmission Protocol) [RFC4960], + and UDP-Lite [RFC3828]) use "Published" port numbers from the Well + Known or Registered number spaces [RFC814]. These 16-bit values + indicate the application service associated with a connection or + message. The server port must be known to the client to allow a + connection to be established. This may be achieved using out-of-band + signalling (e.g., described using SDP [RFC4566]), but more commonly a + Published port is allocated to a particular protocol or application; + for example, HTTP commonly uses port 80 and SMTP commonly uses port + 25. Making a port number Published [RFC1122] involves registration + with the Internet Assigned Numbers Authority (IANA), which includes + defining a service by a unique keyword and reserving a port number + from among a fixed pool [IANA]. + + In the earliest draft of DCCP, the authors wanted to address the + issue of Published ports in a future-proof manner, since this method + suffers from several problems: + + o The port space is not sufficiently large for ports to be easily + allocated (e.g., in an unregulated manner). Thus, many + applications operate using unregistered ports, possibly colliding + with use by other applications. + + o The use of port-based firewalls encourages application writers to + disguise one application as another in an attempt to bypass + firewall filter rules. This motivates firewall writers to use + deep packet inspection in an attempt to identify the service + associated with a port number. + + o ISPs often deploy transparent proxies, primarily to improve + performance and reduce costs. For example, TCP requests destined + to TCP port 80 are often redirected to a web proxy. + + These issues are coupled. When applications collide on the same + Published-but-unregistered port, there is no simple way for network + security equipment to tell them apart, and thus it is likely that + problems will be introduced through the interaction of features. + + There is little that a transport protocol designer can do about + applications that attempt to masquerade as other applications. For + ones that are not attempting to hide, the problem may be simply that + they cannot trivially obtain a Published port. Ideally, it should be + sufficiently easy that every application writer can request a Well + Known or Registered port and receive one instantly with no questions + asked. The 16-bit port space traditionally used is not large enough + to support such a trivial allocation of ports. + + + + +Fairhurst Standards Track [Page 4] + +RFC 5595 DCCP Service Codes September 2009 + + + Thus, the designers of DCCP sought an alternative solution. The idea + was simple. A 32-bit server port space should be sufficiently large + to enable use of very simple allocation policies. However, overhead + considerations made a 32-bit port value undesirable (DCCP needed to + be useful for low-rate applications). + + The solution in DCCP to this problem was to use a 32-bit Service Code + [RFC4340] that is included only in the DCCP-Request packet. The use + of a 32-bit value was intended to make it trivially simple to obtain + a unique value for each application. Placing the value in a DCCP- + Request packet requires no additional overhead for the actual data + flow. It is however sufficient for both the end systems, and + provides any stateful middleboxes along the path with additional + information to understand what applications are being used. + + Early discussion of the DCCP protocol considered an alternative to + the use of traditional ports; instead, it was suggested that a client + use a 32-bit identifier to uniquely identify each connection and that + the server listen on a socket bound only to a Service Code. This + solution was unambiguous; the Service Code was the only identifier + for a listening socket at the server side. The DCCP client included + a Service Code in the request, allowing it to reach the corresponding + listening application. One downside was that this prevented + deployment of two servers for the same service on a single machine, + something that is trivial with ports. The design also suffered from + the downside of being sufficiently different from existing protocols + that there were concerns that it would hinder the use of DCCP through + NATs and other middleboxes. + + RFC 4340 abandoned the use of a 32-bit connection identifier in favor + of two traditional 16-bit port values, one chosen by the server and + one by the client. This allows middleboxes to utilize similar + techniques for DCCP, UDP, TCP, etc. However, it introduced a new + problem: "How does the server port relate to the Service Code?" The + intent was that the Service Code identified the application or + protocol using DCCP, providing middleboxes with information about the + intended use of a connection, and that the pair of ports effectively + formed a 32-bit connection identifier, which was unique between a + pair of end systems. + + The large number of available, unique Service Code values allows all + applications to be assigned a unique Service Code. However, there + remained a problem: the server port was chosen by the server, but the + client needed to know this port to establish a connection. It was + undesirable to mandate out-of-band communication to discover the + server port. The chosen solution was to register DCCP server ports. + The limited availability of DCCP server ports appears to contradict + the benefits of DCCP Service Codes because, although it may be + + + +Fairhurst Standards Track [Page 5] + +RFC 5595 DCCP Service Codes September 2009 + + + trivial to obtain a Service Code, it has not traditionally been + trivial to obtain a Registered port from IANA and, in the long-run, + it may not be possible to allocate a unique Registered DCCP port to + new applications. As port numbers become scarce, this motivates the + need to associate more than one Service Code with a listening port + (e.g., two different applications could be assigned the same server + port and need to run on the same host at the same time, + differentiated by their different associated Service Codes). + + Service Codes provide flexibility in the way clients identify the + server application to which they wish to communicate. The mechanism + allows a server to associate a set of server ports with a service. + The set may be common with other services available at the same + server host, allowing a larger number of concurrent connections for a + particular service than possible when the service is identified by a + single Published port number. + +1.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]. + +2. An Architecture for Service Codes + + DCCP defines the use of a combination of ports and Service Codes to + identify the server application ([RFC4340], Section 8.1.2). These + are described in the following sections. + +2.1. IANA Port Numbers + + In DCCP, the packets belonging to a connection are demultiplexed + based on a combination of four values {source IP address, source + port, dest IP address, dest port}, as in TCP. An endpoint address is + associated with a port number (e.g., forming a socket) and a pair of + associations uniquely identifies each connection. Ports provide the + fundamental per-packet demultiplexing function. + + The Internet Assigned Numbers Authority currently manages the set of + globally reserved port numbers [IANA]. The source port associated + with a connection request, often known as the "ephemeral port", is + traditionally in the range 49152-65535 and also includes the range + 1024-49151. The value used for the ephemeral port is usually chosen + by the client operating system. It has been suggested that a + randomized choice port number value can help defend against "blind" + attacks [Rand] in TCP. This method may be applicable to other IETF- + defined transport protocols, including DCCP. + + + + +Fairhurst Standards Track [Page 6] + +RFC 5595 DCCP Service Codes September 2009 + + + Traditionally, the destination (server) port value associated with a + service is determined either by an operating system index that points + to a copy of the IANA table (e.g., getportbyname() in Unix, which + indexes the /etc/services file) or by the application specifying a + direct mapping. + + The UDP and TCP port number space: 0..65535, is split into three + ranges [RFC2780]: + + o 0..1023 "Well Known", also called "system" ports, + + o 1024..49151 "Registered", also called "user" ports, and + + o 49152..65535 "Dynamic", also called "private" ports. + + DCCP supports Well Known and Registered ports. These are allocated + in the DCCP IANA Port Numbers registry ([RFC4340], Section 19.9). + Each Registered DCCP port MUST be associated with at least one pre- + defined Service Code. + + Applications that do not need to use a server port in the Well Known + or Registered range SHOULD use a Dynamic server port (i.e., one not + required to be registered in the DCCP Port registry). Clients can + identify the server port value for the services to which they wish to + connect using a range of methods. One common method is by reception + of an SDP record (Section 2.6) exchanged out-of-band (e.g., using SIP + [RFC3261] or the Real Time Streaming Protocol (RTSP) [RFC2326]). DNS + SRV resource records also provide a way to identify a server port for + a particular service based on the service's string name [RFC2782]. + + Applications that do not use out-of-band signalling can still + communicate, provided that both client and server agree on the port + value to be used. This eliminates the need for each registered + Service Code to be allocated to an IANA-assigned server port (see + also Section 2.7). + +2.2. DCCP Service Code Values + + DCCP specifies a 4-byte Service Code ([RFC4340], Section 8.1.2) + represented in one of three forms: a decimal number (the canonical + method), a 4-character ASCII string [ANSI.X3-4.1986], or an 8-digit + hexadecimal number. All standards assigned Service Codes, including + all values assigned by IANA, are required to use a value that may be + represented using a subset of the ASCII character set. Private + Service Codes do not need to follow this convention, although RFC + 4340 suggests that users choose Service Codes that may also be + represented in ASCII. + + + + +Fairhurst Standards Track [Page 7] + +RFC 5595 DCCP Service Codes September 2009 + + + The Service Code identifies the application-level service to which a + client application wishes to connect. For example, services have + been defined for the Real-Time Protocol (RTP) [RTP-DCCP]. In a + different example, Datagram Transport Layer Security (DTLS) [RFC5238] + provides a transport-service (not an application-layer service); + therefore, applications using DTLS are individually identified by a + set of corresponding Service Code values. + + Endpoints MUST associate a Service Code with every DCCP socket + [RFC4340], both actively and passively opened. The application will + generally supply this Service Code. A single passive-listening port + may be associated with more than one Service Code value. The set of + Service Codes could be associated with one or more server + applications. This permits a more flexible correspondence between + services and port numbers than is possible using the corresponding + socket pair (4-tuple of layer-3 addresses and layer-4 ports). In the + currently defined set of packet types, the Service Code value is + present only in DCCP-Request ([RFC4340], Section 5.2) and DCCP- + Response packets ([RFC4340], Section 5.3). Note that new DCCP packet + types (e.g., [RFC5596]) could also carry a Service Code value. + +2.2.1. New Versions of Applications or Protocols + + Applications/protocols that provide version negotiation or indication + in the protocol operating over DCCP do not require a new server port + or new Service Code for each new protocol version. New versions of + such applications/protocols SHOULD continue to use the same Service + Code. If the application developers feel that the new version + provides significant new capabilities (e.g., that will change the + behavior of middleboxes), they MAY allocate a new Service Code + associated with the same or different set of Well Known ports. If + the new Service Code is associated with a Well Known or Registered + port, the DCCP Ports registry MUST also be updated to include the new + Service Code value, but MAY share the same server port assignment(s). + +2.3. Service Code Registry + + The set of registered Service Codes specified for use within the + general Internet are defined in an IANA-controlled name space. IANA + manages new allocations of Service Codes in this space [RFC4340]. + Private Service Codes are not centrally allocated and are denoted by + the decimal range 1056964608-1073741823 (i.e., 32-bit values with the + high-order byte equal to a value of 63, corresponding to the ASCII + character '?'). + + Associations of Service Code with Well Known ports are also defined + in the IANA DCCP Port registry (Section 2.1). + + + + +Fairhurst Standards Track [Page 8] + +RFC 5595 DCCP Service Codes September 2009 + + +2.4. Zero Service Code + + A Service Code of zero is "permanently reserved (it represents the + absence of a meaningful Service Code)" [RFC4340]. This indicates + that no application information was provided. RFC 4340 states that + applications MAY be associated with this Service Code in the same way + as other Service Code values. This use is permitted for any server + port. + + This document clarifies Section 19.8 of RFC 4340 by adding the + following: + + Applications SHOULD NOT use a Service Code of zero. + + Application writers that need a temporary Service Code value + SHOULD choose a value from the private range (Section 2.3). + + Applications intended for deployment in the Internet are + encouraged to use an IANA-defined Service Code. If no specific + Service Code exists, they SHOULD request a new assignment from the + IANA. + +2.5. Invalid Service Code + + RFC 4340 defines the Service Code value of 4294967295 in decimal + (0xFFFFFFFF) as "invalid". This is provided so implementations can + use a special 4-byte value to indicate "no valid Service Code". + Implementations MUST NOT accept a DCCP-Request with this value, and + SHOULD NOT allow applications to bind to this Service Code value + [RFC4340]. + +2.6. SDP for Describing Service Codes + + Methods that currently signal destination port numbers, such as the + Session Description Protocol (SDP) [RFC4566], require an extension to + support DCCP Service Codes [RTP-DCCP]. + +2.7. A Method to Hash the Service Code to a Dynamic Port + + Applications that do not use out-of-band signalling or an IANA- + assigned port still require both the client and server to agree on + the server port value to be used. This section describes an optional + method that allows an application to derive a default server port + number from the Service Code. The returned value is in the Dynamic + port range [RFC4340]: + + + + + + +Fairhurst Standards Track [Page 9] + +RFC 5595 DCCP Service Codes September 2009 + + + int s_port; /* server port */ + s_port = ((sc[0]<<7)^(sc[1]<<5)^(sc[2]<<3)^sc[3]) | 0xC000; + if (s_port==0xFFFF) {s_port = 0xC000;} + + where sc[] represents the 4 bytes of the Service Code, and sc[3] is + the least significant byte. For example, this function associates + SC:fdpz with the server port 64634. + + This algorithm has the following properties: + + o It identifies a default server port for each service. + + o It seeks to assign different Service Codes to different ports, but + does not guarantee an assignment is unique. + + o It preserves the 4 lowest bits of the final bytes of the Service + Code, which allows many common series of Service Codes to be + mapped to a set of adjacent port numbers, e.g., Foo1, and Foo2; + Fooa and Foob would be assigned adjacent ports. (Note: this + consecutive numbering only applies to characters in the range 0-9 + and A-O and P-Z. When the characters cross a range boundary, the + algorithm introduces a discontinuity, resulting in mapping to + non-consecutive ports. Hence, Fooo and Foop respectively map to + the decimal values of 65015 and 65000). + + o It avoids the port 0xFFFF, which is not accessible on all host + platforms. + + Applications and higher-layer protocols that have been assigned a + Service Code (or use a Service Code from the unassigned private + space) may use this method. It does not preclude other applications + using the selected server port, since DCCP servers are differentiated + by the Service Code value. + +3. Use of the DCCP Service Code + + The basic operation of Service Codes is as follows: + + A client initiating a connection: + + - issues a DCCP-Request with a Service Code and chooses a + destination (server) port number that is expected to be + associated with the specified Service Code at the destination. + + + + + + + + +Fairhurst Standards Track [Page 10] + +RFC 5595 DCCP Service Codes September 2009 + + + A server that receives a DCCP-Request: + + - determines whether an available service matching the Service + Code is supported for the specified destination server port. + The session is associated with the Service Code and a + corresponding server. A DCCP-Response is returned. + + - if the service is not available, the session is rejected and a + DCCP-Reset packet is returned. + +3.1. Setting Service Codes at the Client + + A client application MUST associate every DCCP connection (and hence + every DCCP active socket) with a single Service Code value + [RFC4340]). This value is used in the corresponding DCCP-Request + packet. + +3.2. Using Service Codes in the Network + + DCCP connections identified by the Service Code continue to use IP + addresses and ports, although neither port number may be Published. + + Port numbers and IP addresses are the traditional methods to identify + a flow within an IP network. Middlebox [RFC3234] implementors + therefore need to note that new DCCP connections are identified by + the pair of server port and Service Code in addition to the IP + address. This means that the IANA may allocate a server port to more + than one DCCP application [RFC4340]. + + Network address and port translators, known collectively as NATs + [RFC2663], may interpret DCCP ports ([RFC2993] and [RFC5597]). They + may also interpret DCCP Service Codes. Interpreting DCCP Service + Codes can reduce the need to correctly interpret port numbers, + leading to new opportunities for network address and port + translators. Although it is encouraged to associate specific + delivery properties with the Service Code, e.g., to identify the + real-time nature of a flow that claims to be using RTP, there is no + guarantee that the actual connection data corresponds to the + associated Service Code. A middlebox implementor may still use deep + packet inspection, and other means, in an attempt to verify the + content of a connection. + + The use of the DCCP Service Code can potentially lead to interactions + with other protocols that interpret or modify DCCP port numbers + [RFC3234]. The following additional clarifications update the + description provided in Section 16 of RFC 4340: + + + + + +Fairhurst Standards Track [Page 11] + +RFC 5595 DCCP Service Codes September 2009 + + + o A middlebox that intends to differentiate applications SHOULD + test the Service Code in addition to the destination or source + port of a DCCP-Request or DCCP-Response packet. + + o A middlebox that does not modify the intended application + (e.g., NATs [RFC5597] and Firewalls) MUST NOT change the + Service Code. + + o A middlebox MAY send a DCCP-Reset in response to a packet with + a Service Code that is considered unsuitable. + +3.3. Using Service Codes at the Server + + The combination of the Service Code and server port disambiguates + incoming DCCP-Requests received by a server. The Service Code is + used to associate a new DCCP connection with the corresponding + application service. Four cases can arise when two DCCP server + applications passively listen on the same host: + + o The simplest case arises when two servers are associated with + different Service Codes and are bound to different server ports + (Section 3.3.1). + + o Two servers may be associated with the same DCCP Service Code + value but be bound to different server ports (Section 3.3.2). + + o Two servers could use different DCCP Service Code values and be + bound to the same server port (Section 3.3.1). + + o Two servers could attempt to use the same DCCP Service Code and + bind to the same server port. A DCCP implementation MUST + disallow this, since there is no way for the DCCP host to + direct a new connection to the correct server application. + + RFC 4340 (Section 8.1.2) states that an implementation: + + o MUST associate each active socket with exactly one Service Code + on a specified server port. + + In addition, Section 8.1.2 of RFC 4340 also states: + + o Passive sockets MAY, at the implementation's discretion, be + associated with more than one Service Code; this might let + multiple applications, or multiple versions of the same + application, listen on the same port, differentiated by Service + Code. + + + + + +Fairhurst Standards Track [Page 12] + +RFC 5595 DCCP Service Codes September 2009 + + + This document updates the above text from RFC 4340 by replacing it + with the following: + + o An implementation SHOULD allow more than one Service Code to be + associated with a passive server port, enabling multiple + applications, or multiple versions of an application, to listen + on the same port, differentiated by the associated Service + Code. + + It also adds: + + o An implementation SHOULD provide a method that informs a server + of the Service Code value that was selected by an active + connection. + + A single passively opened (listening) port MAY therefore be + associated with multiple Service Codes, although an active (open) + connection can only be associated with a single Service Code. A + single application may wish to accept connections for more than one + Service Code using the same server port. This may allow a server to + offer more than the limit of 65,536 services depending on the size of + the Port field. The upper limit is based solely on the number of + unique connections between two hosts (i.e., 4,294,967,296). + +3.3.1. Reception of a DCCP-Request + + When a DCCP-Request is received and the specified destination port is + not bound to a server, the host MUST reject the connection by issuing + a DCCP-Reset with the Reset Code "Connection Refused". A host MAY + also use the Reset Code "Too Busy" ([RFC4340], Section 8.1.3). + + When the requested destination port is bound to a server, the host + MUST also verify that the server port is associated with the + specified Service Code (there could be multiple Service Code values + associated with the same server port). Two cases can occur: + + o If the receiving host is listening on a server port and the DCCP- + Request uses a Service Code that is associated with the port, the + host accepts the connection. Once connected, the server returns a + copy of the Service Code in the DCCP-Response packet, completing + the initial handshake [RFC4340]. + + o If the server port is not associated with the requested Service + Code, the server SHOULD reject the request by sending a DCCP-Reset + packet with the Reset Code 8, "Bad Service Code" ([RFC4340], + Section 8.1.2), but MAY use the reason "Connection Refused". + + + + + +Fairhurst Standards Track [Page 13] + +RFC 5595 DCCP Service Codes September 2009 + + + After a connection has been accepted, the protocol control block is + associated with a pair of ports, a pair of IP addresses, and a single + Service Code value. + +3.3.2. Multiple Associations of a Service Code with Ports + + DCCP Service Codes are not restricted to specific ports, although + they may be associated with a specific Well Known port. This allows + the same DCCP Service Code value to be associated with more than one + server port (in either the active or passive state). + +3.3.3. Automatically Launching a Server + + A host implementation may permit a service to be associated with a + server port (or range of ports) that is not permanently running at + the server. In this case, the arrival of a DCCP-Request may require + a method to associate a DCCP-Request with a server that handles the + corresponding Service Code. This operation could resemble that of + "inetd" [inetd]. + + As in the previous section, when the specified Service Code is not + associated with the specified server port, the connection MUST be + aborted and a DCCP Reset message sent [RFC4340]. + +4. Security Considerations + + The security considerations of RFC 4340 identify and offer guidance + on security issues relating to DCCP. This document discusses the + usage of Service Codes. It does not describe new protocol functions. + + All IPsec modes protect the integrity of the DCCP header. This + protects the Service Code field from undetected modification within + the network. In addition, the IPsec Encapsulated Security Payload + (ESP) mode may be used to encrypt the Service Code field, hiding the + Service Code value within the network and also preventing + interpretation by middleboxes. The DCCP header is not protected by + application-layer security (e.g., the use of DTLS [RFC5238] as + specified in DTLS/DCCP [RFC4347]). + + There are four areas of security that are important: + + 1. Server Port number reuse (Section 4.1). + + 2. Interaction with NATs and firewalls (Section 3.2 describes + middlebox behavior). Requirements relating to DCCP are described + in [RFC5597]. + + + + + +Fairhurst Standards Track [Page 14] + +RFC 5595 DCCP Service Codes September 2009 + + + 3. Interpretation of DCCP Service Codes overriding traditional use of + reserved/Well Known port numbers (Section 4.2). + + 4. Interaction with IPsec and DTLS security (Section 4.3). + +4.1. Server Port Number Reuse + + Service Codes are used in addition to ports when demultiplexing + incoming connections. This changes the service model to be used by + applications and middleboxes. The Port Numbers registry already + contains instances of multiple application registrations for a single + port number for TCP and UDP. These are relatively rare. Since the + DCCP Service Code allows multiple applications to safely share the + same port number, even on the same host, server port number reuse in + DCCP may be more common than in TCP and UDP. + +4.2. Association of Applications with Service Codes + + The use of Service Codes provides more ready feedback that a concrete + service is associated with a given port on a server than for a + service that does not employ Service Codes. By responding to an + inbound connection request, systems not using these codes may + indicate that some service is, or is not, available on a given port, + but systems using this mechanism immediately provide confirmation (or + denial) that a particular service is present. This may have + implications in terms of port scanning and reconnaissance. + + Care needs to be exercised when interpreting the mapping of a Service + Code value to the corresponding service. The same service + (application) may be accessed using more than one Service Code. + Examples include the use of separate Service Codes for an application + layered directly upon DCCP and one using DTLS transport over DCCP + [RFC5238]. Other possibilities include the use of a private Service + Code to map to an application that has already been assigned an IANA- + defined Service Code value, or multiple Service Code values that map + to a single application providing more than one service. Different + versions of a service (application) may also be mapped to a + corresponding set of Service Code values. + + Processing of Service Codes may imply more processing than currently + associated with incoming port numbers. Implementors need to guard + against increasing opportunities for Denial of Service attacks. + +4.3. Interactions with IPsec + + The Internet Key Exchange protocol (IKEv2) does not currently specify + a method to use DCCP Service Codes as a part of the information used + to set up an IPsec security association. + + + +Fairhurst Standards Track [Page 15] + +RFC 5595 DCCP Service Codes September 2009 + + + IPsec uses port numbers to perform access control in transport mode + [RFC4301]. Security policies can define port-specific access control + (PROTECT, BYPASS, DISCARD) as well as port-specific algorithms and + keys. Similarly, firewall policies allow or block traffic based on + port numbers. + + Use of port numbers in IPsec selectors and firewalls may assume that + the numbers correspond to Well Known services. It is useful to note + that there is no such requirement; any service may run on any port, + subject to mutual agreement between the endpoint hosts. Use of the + Service Code may interfere with this assumption both within IPsec and + within other firewall systems, but it does not add a new + vulnerability. New implementations of IPsec and firewall systems may + interpret the Service Code when implementing policy rules, but should + not rely on either port numbers or Service Codes to indicate a + specific service. + +5. IANA Considerations + + This document does not update the IANA allocation procedures for the + DCCP Port Number and DCCP Service Codes Registries as defined in RFC + 4340. + + For completeness, the document notes that it is not required to + supply an approved document (e.g., a published RFC) to support an + application for a DCCP Service Code or port number value, although + RFCs may be used to request Service Code values via the IANA + Considerations section. A specification is however required to + allocate a Service Code that uses a combination of ASCII digits, + uppercase letters, and character space, '-', '.', and '/') [RFC4340]. + +6. Acknowledgments + + This work has been supported by the EC IST SatSix Project. + Significant contributions to this document resulted from discussion + with Joe Touch, and this is gratefully acknowledged. The author also + thanks Ian McDonald, Fernando Gont, Eddie Kohler, and the DCCP WG for + helpful comments on this topic, and Gerrit Renker for his help in + determining DCCP behavior and review of this document. Mark Handley + provided significant input to the text on the definition of Service + Codes and their usage. He also contributed much of the material that + has formed the historical background section. + + + + + + + + + +Fairhurst Standards Track [Page 16] + +RFC 5595 DCCP Service Codes September 2009 + + +7. References + +7.1. Normative References + + [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - + Communication Layers", STD 3, RFC 1122, October 1989. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram + Congestion Control Protocol (DCCP)", RFC 4340, March 2006. + + [RFC5597] Denis-Courmont, R., "Network Address Translation (NAT) + Behavioral Requirements for the Datagram Congestion + Control Protocol", BCP 150, RFC 5597, September 2009. + +7.2. Informative References + + [ANSI.X3-4.1986] + American National Standards Institute, "Coded Character + Set - 7-bit American Standard Code for Information + Interchange", ANSI X3.4, 1986. + + [IANA] Internet Assigned Numbers Authority, www.iana.org. + + [RTP-DCCP] Perkins, C., "RTP and the Datagram Congestion Control + Protocol (DCCP)", Work in Progress, June 2007. + + [Rand] Larsen, M. and F. Gont, "Port Randomization", Work in + Progress, March 2009. + + [inetd] The extended inetd project, http://xinetd.org. + + [RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, + August 1980. + + [RFC793] Postel, J., "Transmission Control Protocol", STD 7, RFC + 793, September 1981. + + [RFC814] Clark, D., "Name, addresses, ports, and routes", RFC 814, + July 1982. + + [RFC2326] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time + Streaming Protocol (RTSP)", RFC 2326, April 1998. + + + + + + +Fairhurst Standards Track [Page 17] + +RFC 5595 DCCP Service Codes September 2009 + + + [RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address + Translator (NAT) Terminology and Considerations", RFC + 2663, August 1999. + + [RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For + Values In the Internet Protocol and Related Headers", BCP + 37, RFC 2780, March 2000. + + [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for + specifying the location of services (DNS SRV)", RFC 2782, + February 2000. + + [RFC2993] Hain, T., "Architectural Implications of NAT", RFC 2993, + November 2000. + + [RFC3234] Carpenter, B. and S. Brim, "Middleboxes: Taxonomy and + Issues", RFC 3234, February 2002. + + [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, + A., Peterson, J., Sparks, R., Handley, M., and E. + Schooler, "SIP: Session Initiation Protocol", RFC 3261, + June 2002. + + [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., Ed., + and G. Fairhurst, Ed., "The Lightweight User Datagram + Protocol (UDP-Lite)", RFC 3828, July 2004. + + [RFC4301] Kent, S. and K. Seo, "Security Architecture for the + Internet Protocol", RFC 4301, December 2005. + + [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer + Security", RFC 4347, April 2006. + + [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session + Description Protocol", RFC 4566, July 2006. + + [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", + RFC 4960, September 2007. + + [RFC5238] Phelan, T., "Datagram Transport Layer Security (DTLS) over + the Datagram Congestion Control Protocol (DCCP)", RFC + 5238, May 2008. + + [RFC5596] Fairhurst, G., "Datagram Congestion Control Protocol + (DCCP) Simultaneous-Open Technique to Facilitate + NAT/Middlebox Traversal", RFC 5596, September 2009. + + + + + +Fairhurst Standards Track [Page 18] + +RFC 5595 DCCP Service Codes September 2009 + + +Author's Address + + Godred Fairhurst, + School of Engineering, + University of Aberdeen, + Kings College, + Aberdeen, AB24 3UE, + UK + EMail: gorry@erg.abdn.ac.uk + URL: http://www.erg.abdn.ac.uk/users/gorry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fairhurst Standards Track [Page 19] + |