DCCP WG G.Fairhurst Internet-DraftNetwork Working Group G. Fairhurst Request for Comments: 5595 University of AberdeenIntended status: Proposed Standard May 26, 2009 Expires: October 31, 2009Updates:RFC4340 July 2009 Category: Standards Track TheDCCPDatagram Congestion Control Protocol (DCCP) ServiceCode draft-ietf-dccp-serv-codes-11.txt Status of this Memo This Internet-Draft is submitted to IETF 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 October 26, 2009.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.(e.g., network address translators and firewalls). This document updates the specification provided in RFC 4340.TableStatus ofContents 1. Introduction...................................................3 1.1. History...................................................3 1.2. Conventions used in this document.........................6 2. An ArchitectureThis Memo This document specifies an Internet standards track protocol forService Codes..............................6 2.1. IANA Port Numbers.........................................6 2.2. DCCP Service Code Values..................................8 2.2.1. New versions of Applications or Protocols............8 2.3. Service Code Registry.....................................9 2.4. Zero Service Code.........................................9 2.5. Invalid Service Code......................................9 2.6. SDPthe Internet community, and requests discussion and suggestions fordescribing Service Codes..........................9 2.7. A methodimprovements. Please refer tohashtheService Code to a Dynamic Port......10 3. Usecurrent edition of theDCCP 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"Internet Official Protocol Standards" (STD 1) for theServer........................12 3.3.1. Reception of a DCCP-Request.........................13 3.3.2. Multiple Associationsstandardization state and status ofa Service Code with Ports..14 3.3.3. Automatically launching a Server....................14 4. Security Considerations.......................................14 4.1. Server Port number re-use................................15 4.2. Associationthis protocol. Distribution ofapplications with Service Codes...........15 4.3. Interactions with IPsec..................................16 5. IANA Considerations...........................................16 6. Acknowledgments...............................................16 7. References....................................................17 7.1. Normative References.....................................17 7.2. Informative References...................................17 8. Author's Addresses............................................19 8.1. Disclaimer...............................................19 8.2.this memo is unlimited. CopyrightNotice.........................................19 1. Introduction DCCP specifies a Service CodeNotice Copyright (c) 2009 IETF Trust and the persons identified asa 4-byte value (32 bits) that describestheapplication-level service to which a client application wishesdocument authors. All rights reserved. This document is subject toconnect ([RFC4340], section 8.1.2). A Service Code identifiesBCP 78 and theprotocol (or a standard profile, e.g. [ID.RTP])IETF Trust's Legal Provisions Relating tobe used atIETF Documents in effect on theapplication layer. It is not intended to be used to specify a variant of an application, or a specific variantdate ofa protocol (Section 2.2). The Service Code mechanism allows an application to declare the setpublication ofservices that are associated with server port numbers. This can affect how an application interactsthis document (http://trustee.ietf.org/license-info). Please review these documents carefully, as they describe your rights and restrictions withDCCP. It allows decoupling the role of port numbersrespect toindicate a desired servicethis document. This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling therolecopyright inconnection demultiplexing and state management. A DCCP application identifiessome of this material may not have granted therequested service byIETF Trust theService 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 useright to allow modifications ofService Codes can assistsuch material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright inidentifyingsuch materials, this document may not be modified outside theintended service by a firewallIETF Standards Process, and derivative works of it mayassist other middleboxes (e.g., a proxy server, network address translator (NAT) [RFC2663]). Middleboxes that desire to identifynot be created outside thetype of data a flow claimsIETF Standards Process, except totransport, should utilize the Service Codeformat it forthis 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). The more flexible use of server ports can also offer benefit to applications where servers need to handle very large numbers of simultaneous open ports to the same service.publication as an RFC4340 omitsor todescribe the motivation behind Service Codes, nor doestranslate itproperly describe how Well Known and Registered server ports relate to Service Codes. The intentinto languages other than English. Table ofthis document is to clarify these issues.Contents 1. Introduction ....................................................2 1.1. HistoryIt is simplest to understand the motivation....................................................3 1.2. Conventions Used in This Document ..........................6 2. An Architecture fordefiningService Codesby describing...............................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 thehistoryService Code to a Dynamic Port ........9 3. Use of the DCCPprotocol. Most current Internet transport protocols (TCP [RFC793], UDP [RFC768], SCTP [RFC4960], UDP-Lite [RFC3828]) used "Published" port numbers fromService Code ...................................10 3.1. Setting Service Codes at theWell Known or registered number spaces [RFC814]. These 16-bit values indicateClient .......................11 3.2. Using Service Codes in theapplication service associated with a connection or message. The server port must be known toNetwork ........................11 3.3. Using Service Codes at theclient to allow a connection to be established. This may be achieved using out-of-band signaling (e.g. described using SDP [RFC4566]), but more commonly a Published port is allocated toServer .........................12 3.3.1. Reception of aparticular protocol or application; for example HTTP commonly uses port 80 and SMTP commonly uses port 25. MakingDCCP-Request ........................13 3.3.2. Multiple Associations of aport number Published [RFC1122] involves registrationService Code withthe Internet Assigned Numbers Authority (IANA), which includes definingPorts .........................................14 3.3.3. Automatically Launching aservice byServer ...................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 1. Introduction DCCP specifies aunique keyword and reservingService Code as aport number from among4-byte value (32 bits) that describes the application-level service to which afixed pool [IANA]. Inclient application wishes to connect ([RFC4340], Section 8.1.2). A Service Code identifies theearliest draft of DCCP,protocol (or theauthors wantedstandard profile, e.g., [RTP-DCCP]) toaddressbe used at theissue of Published ports in a future-proof manner, since this method suffers from several problems: o The port spaceapplication layer. It is notsufficiently large for portsintended to beeasily 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-writersused todisguise onespecify a variant of an applicationas another inor a specific variant of a protocol (Section 2.2). The Service Code mechanism allows anattemptapplication tobypass firewall filter rules.declare the set of services that are associated with server port numbers. Thismotivates firewall writers to use deep packet inspection incan affect how anattempt to identify the service associatedapplication interacts witha port number. o ISPs often deploy transparent proxies, primarily to improve performance and reduce costs. For example, TCP requests destined to TCPDCCP. It also the allows decoupling of the role of port80 are often redirectednumbers to indicate aweb 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, withdesired service from thelikelihoodrole ofintroducing problemsport 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 withinteractioneach listening port ([RFC4340], Section 8.1.2). The use offeatures. There is little that a transport protocol designerService Codes cando about applications that attempt to masquerade asassist in identifying the intended service by a firewall and may assist otherapplications. For onesmiddleboxes (e.g., a proxy server or network address translator (NAT) [RFC2663]). Middleboxes thatare not attemptingdesire tohide,identify theproblem may be simply that they cannot trivially obtaintype of data aPublished port. Ideally, itflow claims to transport shouldbe sufficiently easy that every application-writerutilize the Service Code for this purpose. When consistently used, the Service Code canrequestprovide aWell Knownmore specific indication of the actual service (e.g., indicating the type of multimedia flow orregisteredintended application behaviour) than deriving this information from the server portand receive one instantly with no questions asked.value. The16-bit port space traditionally used is notmore flexible use of server ports can also offer benefits to applications where servers need to handle very largeenoughnumbers of simultaneous-open ports tosupport suchthe same service. RFC 4340 omits atrivial allocationdescription ofports. Thus,thedesign of DCCP sought an alternative solution. The idea was simple. A 32-bit server port space should be sufficiently large thatmotivation behind Service Codes, and itenables 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 wasdoes properly describe how Well Known and Registered server ports relate touse a 32-bitServiceCode [RFC4340] that is included only in the DCCP-Request packet.Codes. Theuseintent ofa 32-bit value was intendedthis document is tomake it trivially simpleclarify these issues. 1.1. History It is simplest toobtain a unique value for each application. Placingunderstand thevalue in a DCCP- Request packet, requires no additional overheadmotivation for defining Service Codes by describing theactual data flow. It is however sufficient for bothhistory of theend systems,DCCP protocol. Most current Internet transport protocols (TCP [RFC793], UDP [RFC768], SCTP (the Stream Control Transmission Protocol) [RFC4960], andprovides any stateful middleboxes alongUDP-Lite [RFC3828]) use "Published" port numbers from thepathWell Known or Registered number spaces [RFC814]. These 16-bit values indicate the application service associated withadditional informationa connection or message. The server port must be known tounderstand what applications are being used. Early discussion oftheDCCP protocol considered an alternative to the use of traditional ports; instead it was suggested that aclientusedto allow a32-bit identifierconnection touniquely identify each connection. The server listened onbe established. This may be achieved using out-of-band signalling (e.g., described using SDP [RFC4566]), but more commonly asocket bound onlyPublished port is allocated to aService Code. This solution was unambiguous; the Service Code was the only identifierparticular protocol or application; for example, HTTP commonly uses port 80 and SMTP commonly uses port 25. Making alistening socket atport number Published [RFC1122] involves registration with theserver side. The DCCP client includedInternet Assigned Numbers Authority (IANA), which includes defining aService Code in the request, allowing it to reach the corresponding listening application. One downside was that this prevented deployment of two servers for the sameserviceonby asingle machine, something that is trivial with ports. The design also sufferedunique keyword and reserving a port number from among a fixed pool [IANA]. In thedownsideearliest draft ofbeing sufficiently different from existing protocols that there were concerns that it would hinderDCCP, theuse of DCCP through NATs and other middleboxes. RFC 4340 abandonedauthors wanted to address theuseissue ofa 32-bit connection identifierPublished ports infavor 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 introducedanew problem: "How does the serverfuture-proof manner, since this method suffers from several problems: o The portrelatespace is not sufficiently large for ports tothe Service Code?" The intent was that the Service Code identified the application or protocolbe easily allocated (e.g., in an unregulated manner). Thus, many applications operate usingDCCP, providing middleboxesunregistered ports, possibly colliding withinformation about the intendeduseof a connection, and that the pair of ports effectively formed a 32-bit connection identifier, which was unique between a pair of end-systems.by other applications. o Thelarge numberuse ofavailable unique Service Code values allows all applicationsport-based firewalls encourages application writers tobe assigned a unique Service Code. However, there remains a current problem: The server port is chosen by the server, but the client needsdisguise one application as another in an attempt toknow thisbypass firewall filter rules. This motivates firewall writers toestablishuse deep packet inspection in an attempt to identify the service associated with aconnection. It was undesirableport number. o ISPs often deploy transparent proxies, primarily tomandate out-of-band communicationimprove performance and reduce costs. For example, TCP requests destined todiscoverTCP port 80 are often redirected to a web proxy. These issues are coupled. When applications collide on theserver port. A solutionsame Published-but-unregistered port, there is no simple way for network security equipment toregister DCCP server ports. The limited availabilitytell them apart, and thus it is likely that problems will be introduced through the interaction ofDCCP server ports appearsfeatures. There is little that a transport protocol designer can do about applications that attempt tocontradictmasquerade as other applications. For ones that are not attempting to hide, thebenefits of DCCP Service Codes, because although itproblem may betrivial tosimply that they cannot trivially obtain aService Code,Published port. Ideally, ithas not traditionally been trivial to obtainshould be sufficiently easy that every application writer can request aregisteredWell Known or Registered portfrom IANAandin the long-run it mayreceive one instantly with no questions asked. The 16-bit port space traditionally used is notbe possiblelarge enough touniquely allocatesupport such aunique registeredtrivial allocation of ports. Thus, the designers of DCCP sought an alternative solution. The idea was simple. A 32-bit server port space should be sufficiently large tonew applications. As port numbers become scarce, this motivates the need to associate more than one Service Code withenable use of very simple allocation policies. However, overhead considerations made alistening32-bit port(e.g. two different applications couldvalue undesirable (DCCP needed to beassigned the same server port, and needuseful for low-rate applications). The solution in DCCP torun on the same host at the same time, differentiated by their different associated Service Codes.this problem was to use a 32-bit ServiceCodes provide flexibilityCode [RFC4340] that is included only in theway clients identify the server application to which they wish to communicate.DCCP-Request packet. Themechanism allowsuse of aserver32-bit value was intended toassociate a set of server ports withmake it trivially simple to obtain aservice. The set may be common with other services available atunique value for each application. Placing thesame server host, allowingvalue in alarger number of concurrent connectionsDCCP- Request packet requires no additional overhead fora particular service than possible whentheserviceactual data flow. It isidentified by a single Published port number. There has been confusion concerning how server ports relatehowever sufficient for both the end systems, and provides any stateful middleboxes along the path with additional information toService Codes. The goalunderstand what applications are being used. Early discussion ofthis document is to clarify this andtheissues concerningDCCP protocol considered an alternative to the use ofService Codes. RFC4340 statestraditional ports; instead, it was suggested thatService Codes are not intended to be DCCP- specific. Service Codes, or similar concepts may therefore also be usefula client use a 32-bit identifier toother IETF transport protocols. 1.2. Conventions used in this document The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",uniquely identify each connection and"OPTIONAL" in this document arethat the server listen on a socket bound only tobe interpreted as described in RFC 2119 [RFC2119]. 2. An Architecture fora ServiceCodes DCCP definesCode. This solution was unambiguous; theuse of a combination of ports andServiceCodes to identifyCode was the only identifier for a listening socket at the serverapplication ([RFC4340], section 8.1.2). These are describedside. The DCCP client included a Service Code in thefollowing Sections. 2.1. IANA Port Numbers In DCCP, the packets belongingrequest, allowing it toa connection are de-multiplexed basedreach the corresponding listening application. One downside was that this prevented deployment of two servers for the same service on acombination of four values {source IP address, source port, dest IP address, dest port}, as in TCP. An endpoint addresssingle machine, something that isassociatedtrivial witha port number, (e.g. forming a socket); and a pairports. The design also suffered from the downside ofassociations uniquely identifies each connection. Ports providebeing sufficiently different from existing protocols that there were concerns that it would hinder thefundamental per-packet de-multiplexing function. The Internet Assigned Numbers Authority currently managesuse of DCCP through NATs and other middleboxes. RFC 4340 abandoned thesetuse ofglobally reserved port numbers [IANA]. The source port associated witha 32-bit connectionrequest, often known as the "ephemeral port", is traditionallyidentifier in favor of two traditional 16-bit port values, one chosen by therange 49152-65535,server andalso includesone by therange 1024-49151. The value usedclient. This allows middleboxes to utilize similar techniques for DCCP, UDP, TCP, etc. However, it introduced a new problem: "How does theephemeralserver portis usually chosen byrelate to theclient operating system. It has been suggestedService Code?" The intent was that the Service Code identified the application or protocol using DCCP, providing middleboxes with information about the intended use of arandomized choiceconnection, and that the pair ofportports effectively formed a 32-bit connection identifier, which was unique between a pair of end systems. The large numbervalue can help defend against "blind" attacks [ID.Rand] in TCP. This method may be applicableof available, unique Service Code values allows all applications toother IETF-defined transport protocols, including DCCP. Traditionally,be assigned a unique Service Code. However, there remains a current problem: thedestination (server)server portvalue associated with a serviceisdetermined eitherchosen byan operating system index to a copy oftheIANA table (e.g., getportbyname() in Unix, which indexesserver, but the/etc/services file), or directly mapped by the application. The UDP and TCPclient needs to know this portnumber space: 0..65535,to establish a connection. It issplit into three ranges [RFC2780]: o 0..1023 "Well Known", also called "system" ports, o 1024..49151 "registered", also called "user" ports, o 49152..65535 "dynamic", also called "private" ports.undesirable to mandate out-of-band communication to discover the server port. A solution is to register DCCPsupports Well Known and registeredserver ports.These are allocated in theThe limited availability of DCCPIANA port numbers registry ([RFC4340], Section 19.9). Each registeredserver ports appears to contradict the benefits of DCCPport MUSTService Codes because, although it may beassociated with at least one pre-definedtrivial to obtain a ServiceCode. Applications that doCode, it has notneedtraditionally been trivial touseobtain aserverRegistered port from IANA and, in theWell Known or registered range SHOULD uselong-run, it may not be possible to allocate adynamic serverunique Registered DCCP port(i.e. that does not requiretobe registered innew applications. As port numbers become scarce, this motivates theDCCPneed to associate more than one Service Code with a listening portregistry). Clients can identify(e.g., two different applications could be assigned the same server portvalue forand need to run on theservicessame 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 toconnect using a range of methods. One common method is by reception of a SDP record (Section 2.6) exchanged out-of-band (e.g. using SIP [RFC3261] or RTSP [RFC2326]). DNS SRV resource records also providecommunicate. The mechanism allows awayserver toidentifyassociate a set of serverport forports with aparticular service based on the services string name [RFC2782]. Applications that do not use out-of-band signalling can still communicate, providing that both client and server agree the port value toservice. The set may beused. This eliminatescommon with other services available at theneed for each registered Service Code to be allocated an IANA-assignedsame serverport (see also Section 2.7). 2.2. DCCP Service Code Values DCCP specifieshost, allowing a4 byte Service Code ([RFC4340], section 8.1.2) represented in onelarger number ofthree forms:concurrent connections for adecimal number (the canonical method),particular service than possible when the service is identified by afour character ASCII string [ANSI.X3-4.1986], or an eight digit hexadecimalsingle Published port number.All standards assignedThere has been confusion concerning how server ports relate to ServiceCodes, including all values assigned by IANA, are requiredCodes. The goal of this document is to clarify this and the issues concerning the usea value that may be represented using a subsetofthe ASCII character set. PrivateServiceCodes do not need to follow this convention, althoughCodes. RFC 4340suggestsstates thatusers also chooseService Codesthatare not intended to be DCCP- specific. Service Codes, or similar concepts, may therefore also berepresenteduseful to other IETF transport protocols. 1.2. Conventions Used inASCII.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 ServiceCode identifiesCodes DCCP defines theapplication-level service to whichuse of aclient application wishes to connect. Examplescombination ofservicesports and Service Codes to identify the server application ([RFC4340], Section 8.1.2). These areRTP [ID.RTP], TIME (this document), ECHO (this document).described in the following sections. 2.1. IANA Port Numbers In DCCP, the packets belonging to adifferent example, DTLS [RFC5238] provides a transport-service (not an application-layer service), therefore applications using DTLSconnection areindividually identified by a set of corresponding Service Code values. Endpoints MUST associatedemultiplexed based on aService 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 setcombination ofService Codes could befour values {source IP address, source port, dest IP address, dest port}, as in TCP. An endpoint address is associated withone or more server applications. This permitsamore flexible correspondence between services andportnumbers than possible using the corresponding socketnumber (e.g., forming a socket) and a pair(4-tupleoflayer-3 addresses and layer-4 ports). Inassociations uniquely identifies each connection. Ports provide the fundamental per-packet demultiplexing function. The Internet Assigned Numbers Authority currentlydefinedmanages the set ofpacket types,globally reserved port numbers [IANA]. The source port associated with a connection request, often known as theService Code value"ephemeral port", ispresent onlytraditionally inDCCP-Request ([RFC4340], section 5.2)the range 49152-65535 andDCCP- Response packets ([RFC4340], section 5.3). Note new DCCP packet types (e.g. [ID.Simul]) couldalsocarry a Service Code value. 2.2.1. New versions of Applications or Protocols Applications/protocols that provide version negotiation or indication inincludes theprotocol operating over DCCP do not require a new server port or new Service Coderange 1024-49151. The value used foreach new protocol version. New versions of such applications/protocols SHOULD continue to use the same Service Code. Iftheapplication developers feel thatephemeral port is usually chosen by thenew version provides significant new capabilities (e.g.client operating system. It has been suggested thatwill change the behavior of middleboxes), they MAY allocateanew Service Coderandomized 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. Traditionally, the destination (server) port value associated with a service is determined either by an operating system index that points to a copy of thesameIANA table (e.g., getportbyname() in Unix, which indexes the /etc/services file) or by the application specifying adifferent set ofdirect 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 "R egistered", also called "user" ports, and o 49152..65535 "Dynamic", also called "private" ports. DCCP supports Well Known and Registered ports.IfThese are allocated in thenew Service Code isDCCP 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 registeredport,in the DCCPPorts registry MUST also be updated to include the new Service Code value, but MAY sharePort registry). Clients can identify thesameserver portassignment(s). 2.3. Service Code Registry The set of registered Service Codes specifiedvalue foruse withinthegeneral Internet are defined in an IANA-controlled name space. IANA manages new allocationsservices to which they wish to connect using a range ofService Codes in this space ([RFC4340]). Private Service Codes are not centrally allocated and are denotedmethods. One common method is by reception of an SDP record (Section 2.6) exchanged out-of-band (e.g., using SIP [RFC3261] or thedecimal range 1056964608-1073741823 (i.e. 32-bit values with the high-order byte equalReal 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 valueof 63, correspondingto be used. This eliminates theASCII character '?'). Associations ofneed for each registered Service Codewith Well Known Ports areto be allocated to an IANA-assigned server port (see alsodefined in the IANASection 2.7). 2.2. DCCPPort Registry (section 2.1). 2.4. ZeroService CodeAValues DCCP specifies a 4-byte Service Code ([RFC4340], Section 8.1.2) represented in one ofzero is "permanently reserved (it represents the absence ofthree forms: ameaningfuldecimal number (the canonical method), a 4-character ASCII string [ANSI.X3-4.1986], or an 8-digit hexadecimal number. All standards assigned ServiceCode)" [RFC4340]. This indicatesCodes, including all values assigned by IANA, are required to use a value thatno application information was provided.may be represented using a subset of the ASCII character set. Private Service Codes do not need to follow this convention, although RFC 4340statessuggests thatapplications MAYusers also choose Service Codes that may also beassociated with thisrepresented in ASCII. The Service Codeinidentifies thesame way as other Service Code values. This use is permittedapplication-level service to which a client application wishes to connect. For example, services have been defined forany server port. This document clarifies section 19.8 of RFC 4340, by addingthefollowing: "Applications SHOULD NOT useReal-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 Codeof zero. Application writers that needvalues. Endpoints MUST associate atemporaryService Codevalue SHOULD choose a value from the private range (section 2.3). Applications intended for deployment in the Internet are encouraged to use an IANA-definedwith every DCCP socket [RFC4340], both actively and passively opened. The application will generally supply this Service Code.If no specificA single passive-listening port may be associated with more than one Service Codeexists, they SHOULD requestvalue. The set of Service Codes could be associated with one or more server applications. This permits anew assignment frommore flexible correspondence between services and port numbers than is possible using theIANA." 2.5. Invalid Service Code RFC4340 definescorresponding socket pair (4-tuple of layer-3 addresses and layer-4 ports). In the currently defined set of packet types, the Service Code valueof 0xFFFFFFFF as Invalid. Thisisprovided so implementations can use a special four-byte value to indicate "no valid Service Code". Implementations MUST NOT accept apresent only in DCCP-Requestwith this value,([RFC4340], Section 5.2) andSHOULD NOT allow applications to bind to thisDCCP- Response packets ([RFC4340], Section 5.3). Note that new DCCP packet types (e.g., [RFC5596]) could also carry a Service Codevalue [RFC4340]. 2.6. SDP for describing Service Codes Methods that currently signal destination port numbers, such as the Session Description Protocol (SDP) [RFC4566] require extension to support DCCP Service Codes [ID.RTP]. 2.7. A method to hash the Service Code to a Dynamic Portvalue. 2.2.1. New Versions of Applications or Protocols Applications/protocols that provide version negotiation or indication in the protocol operating over DCCP do notuse out-of-band signalling, or an IANA- assigned port stillrequireboth the client and server to agree the server port value to be used. This Section describes an optional method that allows an application to deriveadefaultnew server portnumber fromor new Service Code for each new protocol version. New versions of such applications/protocols SHOULD continue to use the same Service Code.The returned value is inIf thedynamic port range [RFC4340]: 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[] representsapplication developers feel that thefour bytes ofnew version provides significant new capabilities (e.g., that will change the behavior of middleboxes), they MAY allocate a new ServiceCode, and sc[3] is the least significant byte, for example this function associates SC:fdpzCode associated with theserver port 64634. This algorithm has the following properties: o It identifies a default server port for each service. o It seeks to assignsame or different set of Well Known ports. If the new ServiceCodes to different ports, but does not guarantee an assignmentCode isunique. o It preservesassociated with a Well Known or Registered port, thefour bits ofDCCP Ports registry MUST also be updated to include thefinal bytes ofnew Service Code value, but MAY share the same server port assignment(s). 2.3. ServiceCode, allowing mapping common seriesCode Registry The set of registered Service Codesto adjacent ports, e.g. Foo1, and Foo2; and Fooa and Foob would be assigned adjacent ports. (Note: this consecutive numbering only applies to characters inspecified for use within therange 0-9 and A-Ogeneral 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 andP-Z. Whenare denoted by thecharacters cross adecimal rangeboundary,1056964608-1073741823 (i.e., 32-bit values with thealgorithm introduces a discontinuity, resulting in mappinghigh-order byte equal tonon-consecutive ports. Hence Fooo and Foop respectively mapa value of 63, corresponding to thedecimal valuesASCII character '?'). Associations of65015 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 aService Codefrom the unassigned private space) may use this method. It does not preclude other applications using the selected server port, since DCCP serverswith Well Known ports aredifferentiated byalso defined in the IANA DCCP Port registry (Section 2.1). 2.4. Zero Service Codevalue. 3. Use of the DCCPA Service CodeThe basic operationofService Codeszero isas follows: A client initiating a connection: . issues a DCCP-Request with"permanently reserved (it represents the absence of a meaningful ServiceCode and chooses a destination (server) port numberCode)" [RFC4340]. This indicates thatis expected tono application information was provided. RFC 4340 states that applications MAY be associated withthe specifiedthis Service Codeat the destination. o A server that receives a DCCP-Request: . determines whether an available service matchingin the same way as other Service Code values. This use issupportedpermitted forthe specified destinationany server port.The session is associated withThis document clarifies Section 19.8 of RFC 4340 by adding the following: Applications SHOULD NOT use a Service Codeandof zero. Application writers that need acorresponding server. A DCCP-Response is returned. . iftemporary Service Code value SHOULD choose a value from theservice is not available,private range (Section 2.3). Applications intended for deployment in thesession is rejected andInternet are encouraged to use an IANA-defined Service Code. If no specific Service Code exists, they SHOULD request aDCCP-Reset packet is returned. 3.1. Settingnew assignment from the IANA. 2.5. Invalid ServiceCodes atCode RFC 4340 defines theClient A client application MUST associate every DCCP connection (and hence every DCCP active socket) with a singleService Code value[RFC4340]).of 4294967295 in decimal (0xFFFFFFFF) as "invalid". Thisvalueisused in the correspondingprovided so implementations can use a special 4-byte value to indicate "no valid Service Code". Implementations MUST NOT accept a DCCP-Requestpacket. 3.2. Usingwith this value, and SHOULD NOT allow applications to bind to this Service Code value [RFC4340]. 2.6. SDP for Describing Service CodesinMethods that currently signal destination port numbers, such as theNetworkSession Description Protocol (SDP) [RFC4566], require an extension to support DCCPconnections identified byService Codes [RTP-DCCP]. 2.7. A Method to Hash the Service Codecontinueto a Dynamic Port Applications that do not useIP addresses and ports, although neitherout-of-band signalling or an IANA- assigned portnumber may be Published. Port numbersstill require both the client andIP addresses areserver to agree on thetraditional methodsserver port value toidentify a flow withinbe used. This section describes anIP network. Middlebox [RFC3234] implementors therefore need to noteoptional method thatnew DCCP connections are identified byallows an application to derive a default server port number from thepair of Server Port andServiceCodeCode. The returned value is inaddition totheIP address.Dynamic port range [RFC4340]: 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. Thismeans thatalgorithm has theIANA may allocatefollowing properties: o It identifies a default server port for each service. o It seeks tomore than one DCCP application [RFC4340]. Network address and port translators, known collectively as NATs [RFC2663], may interpret DCCP ports [RFC2993] [ID.Behave-DCCP]. They may also interpret DCCP Service Codes. Interpreting DCCPassign different Service Codescan reduce the need to correctly interpret port numbers, leadingtonew opportunities for network address and port translators. Although itdifferent ports, but does not guarantee an assignment isencouraged to associate specific delivery properties withunique. o It preserves the 4 lowest bits of the final bytes of the Service Code,e.g. to identify the real-time naturewhich allows many common series ofa flow that claimsService Codes to beusing 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 attemptmapped toverify the content ofaconnection. The useset ofthe DCCP Service Code can potentially lead to interactions with other protocols that interpret or modify DCCPadjacent portnumbers [RFC3234]. The following additional clarifications update the description provided in section 16 of RFC 4340: o "A middlebox that intendsnumbers, e.g., Foo1, and Foo2; Fooa and Foob would be assigned adjacent ports. (Note: this consecutive numbering only applies todifferentiate applications SHOULD testcharacters in theService Coderange 0-9 and A-O and P-Z. When the characters cross a range boundary, the algorithm introduces a discontinuity, resulting inadditionmapping to non-consecutive ports. Hence, Fooo and Foop respectively map to thedestination or source portdecimal values ofa DCCP-Request or DCCP-Response packet.65015 and 65000). oA middleboxIt 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 notmodifypreclude other applications using theintended application (e.g. NATs [ID.Behave-DCCP] and Firewalls), MUST NOT changeselected server port, since DCCP servers are differentiated by the ServiceCode. oCode value. 3. Use of the DCCP Service Code The basic operation of Service Codes is as follows: Amiddlebox MAY sendclient initiating aDCCP-Reset in response toconnection: - issues apacketDCCP-Request with a Service Code and chooses a destination (server) port number that isconsidered unsuitable." 3.3. Using Service Codes at the Server The combination ofexpected to be associated with the specified Service Codeandat the destination. A serverport disambiguates incoming DCCP-Requests received bythat receives aserver. TheDCCP-Request: - determines whether an available service matching the Service Code isused to associate a new DCCP connection withsupported for thecorresponding application service. Four cases can arise when two DCCPspecified destination serverapplications passively listen on the same host: oport. Thesimplest 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 besession is associated with thesame DCCP Service Code value, but be bound to different server ports (section 3.3.2). o Two servers could use different DCCPService Codevalues,andbe bound toa corresponding server. A DCCP-Response is returned. - if thesame server port (section 3.3.1). o Two servers could attempt to useservice is not available, thesame DCCP Service Codesession is rejected andbind toa DCCP-Reset packet is returned. 3.1. Setting Service Codes at thesame server port.Client ADCCP implementationclient application MUSTdisallow this, since there is no way for theassociate every DCCPhost to direct a newconnectionto the correct server application. RFC 4340 (section 8.1.2) states that an implementation: o MUST associate each(and hence every DCCP activesocketsocket) withexactly one Service Code onaspecified server port. In addition, section 8.1.2 also states: o "Passive sockets MAY, at the implementation's discretion, be associated with more than onesingle ServiceCode; this might let multiple applications, or multiple versions of the same application, listen onCode value [RFC4340]). This value is used in thesame port, differentiated bycorresponding DCCP-Request packet. 3.2. Using ServiceCode." This document updates this textCodes inRFC 4340the Network DCCP connections identified byreplacing this withthefollowing: o "An implementation SHOULD allow more than oneService Code continue tobe associated with a passive server port, enabling multiple applications, or multiple versions of an application, to listen on the same port, differentiated byuse IP addresses and ports, although neither port number may be Published. Port numbers and IP addresses are theassociated Service Code." It also adds: o "An implementation SHOULD provide a method that informstraditional methods to identify aserver of the Service Code value that was selected byflow within anactive connection." A single passively opened (listening) port MAYIP network. Middlebox [RFC3234] implementors thereforebe associated with multiple Service Codes, although an active (open) connection can only be associated with a single Service Code. A single application may wishneed toacceptnote that new DCCP connectionsfor more than oneare identified by the pair of server port and Service Codeusingin addition to thesame server port.IP address. This means that the IANA mayallowallocate a server port tooffermore thanthe limit of 65,536 services determined by 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,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 thespecified destinationneed to correctly interpret port numbers, leading to new opportunities for network address and port translators. Although it isnot boundencouraged toa server,associate specific delivery properties with thehost MUST rejectService Code, e.g., to identify theconnection by issuingreal-time nature of aDCCP-Reset with 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 boundflow that claims toa server, the host MUST also verifybe using RTP, there is no guarantee that theserver port is associated withactual connection data corresponds to thespecified Service Code (there could be multiple Service Code valuesassociatedwith the same server port). Two cases can occur: o If the receiving host is listening on a server portService Code. A middlebox implementor may still use deep packet inspection, and other means, in an attempt to verify theDCCP- Request usescontent of a connection. The use of the DCCP Service Codethat is associatedcan potentially lead to interactions with other protocols that interpret or modify DCCP port numbers [RFC3234]. The following additional clarifications update theport, the host accepts the connection. Once connected, the server returns a copydescription provided in Section 16 of RFC 4340: 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-Responsepacket completing the initial handshake [RFC4340].packet. oIf the server port isA middlebox that does notassociated with the requested Service Code,modify theserver SHOULD rejectintended application (e.g., NATs [RFC5597] and Firewalls) MUST NOT change therequest by sendingService Code. o A middlebox MAY send a DCCP-Reset in response to a packet withReseta Service Code8, "Badthat is considered unsuitable. 3.3. Using ServiceCode" ([RFC4340], Section 8.1.2), but MAY useCodes at thereason "Connection Refused". After a connection has been accepted,Server The combination of theprotocol control block is associated with a pair of ports and a pair of IP addresses and a singleService Codevalue. 3.3.2. Multiple Associations ofand server port disambiguates incoming DCCP-Requests received by a server. The Service Code is used to associate a new DCCP connection withPortsthe 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 arenot restrictedbound tospecific ports, although theydifferent server ports (Section 3.3.1). o Two servers may be associated witha specific well-known port. This allowsthe 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 beassociated with more than onebound to the same server port(in either(Section 3.3.1). o Two servers could attempt to use theactive or passive state). 3.3.3. Automatically launching a Serversame DCCP Service Code and bind to the same server port. AhostDCCP implementationmay permitMUST disallow this, since there is no way for the DCCP host to direct aservicenew connection tobe associatedthe 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 serverport (or rangeport. In addition, Section 8.1.2 ofports) that is not permanently runningRFC 4340 also states: o Passive sockets MAY, at theserver. Inimplementation's discretion, be associated with more than one Service Code; thiscase, the arrivalmight let multiple applications, or multiple versions ofa DCCP-Request may require a method to associate a DCCP-Request with a server that handlesthecorresponding Service Code. This operation could resemble that of "inetd" [inetd]. As insame application, listen on theprevious Section, whensame port, differentiated by Service Code. This document updates thespecifiedabove text from RFC 4340 by replacing it with the following: o An implementation SHOULD allow more than one Service Codeis notto be associated withthe specifieda passive server port,the connection MUST be aborted and a DCCP Reset message sent [RFC4340]. 4. Security Considerations The security considerationsenabling multiple applications, or multiple versions ofRFC 4340 identifies and offers guidance on security issues relatingan application, toDCCP. This document discusseslisten on theusage ofsame port, differentiated by the associated ServiceCodes.Code. Itdoes not describe new protocol functions. All IPsec modes protect the integrityalso adds: o An implementation SHOULD provide a method that informs a server of theDCCP header. This protects theService Codefield from undetected modification within the network. In addition, the IPsec Encapsulated Security Payload (ESP) mode mayvalue that was selected by an active connection. A single passively opened (listening) port MAY therefore beusedassociated with multiple Service Codes, although an active (open) connection can only be associated with a single Service Code. A single application may wish toencrypt theaccept connections for more than one Service Codefield, hidingusing theService Code value withinsame server port. This may allow a server to offer more than thenetwork and also preventing interpretation by middleboxes.limit of 65,536 services depending on the size of the Port field. TheDCCP headerupper limit isnot protected by application-layer security, (e.g.,based solely on theuse DTLS [RFC5238] as specified in DTLS/DCCP [RFC4347]). There are four areas of security that are important: 1. Server Portnumberreuse (section 5.1). 2. Interaction with NATs and firewalls (section 3.2 describes middlebox behaviour). Requirements relating to DCCP are described in [ID.Behave-DCCP]. 3. InterpretationofDCCP Service Codes over-riding traditional useunique connections between two hosts (i.e., 4,294,967,296). 3.3.1. Reception ofreserved/Well Known port numbers (Section 5.2). 4. Interaction with IPseca DCCP-Request When a DCCP-Request is received andDTLS security (section 5.3). 4.1. Server Port number re-use Service Codes are used in addition to ports when demultiplexing incoming connections. This changestheservice modelspecified destination port is not bound tobe useda server, the host MUST reject the connection byapplications and middleboxes. The port-numbers registry already contains instances of multiple application registrations forissuing asingleDCCP-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 portnumber for TCP and UDP. These are relatively rare. Sinceis bound to a server, theDCCPhost MUST also verify that the server port is associated with the specified Service Codeallows(there could be multipleapplications to safely shareService Code values associated with the sameport number, even onserver port). Two cases can occur: o If thesame host,receiving host is listening on a server portnumber reuse in DCCP may be more common than in TCPandUDP. 4.2. Association of applications with Service Codes The use ofthe DCCP- Request uses a ServiceCodes provides more ready feedbackCode thata concrete serviceis associated with the port, the host accepts the connection. Once connected, the server returns agiven port on a servers, than for a service that does not employing 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 termscopy ofport scanning and reconnaissance. Care needs to be exercised when interpretingthemapping of aService Codevalue toin thecorresponding service. The same service (application) may be accessed using more than oneDCCP-Response packet, completing the initial handshake [RFC4340]. o If the server port is not associated with the requested ServiceCode. Examples includeCode, 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". After a connection has been accepted, the protocol control block is associated with a pair ofseparate Service Codes for an application layered directly upon DCCPports, a pair of IP addresses, andone using DTLS transport over DCCP [RFC5238]. Other possibilities include the usea single Service Code value. 3.3.2. Multiple Associations of aprivateService Codethat mapswith Ports DCCP Service Codes are not restricted to specific ports, although they may be associated with a specific Well Known port. This allows the sameapplication as assigned to an IANA-definedDCCP Service Codevalue, or a single application that providesvalue to be associated with more than oneservice. Different versions ofserver port (in either the active or passive state). 3.3.3. Automatically Launching aservice (application)Server A host implementation mayalso be mappedpermit a service to be associated with acorresponding set of Service Code values. Processing of Service Codes may imply more processing than currently associated with incomingserver portnumbers. Implementers need to guard against increasing opportunities for Denial(or range ofService attack. 4.3. Interactions with IPsec The Internet Key Exchange protocol (IKEv2), doesports) that is notcurrently specifypermanently running at the server. In this case, the arrival of a DCCP-Request may require a method touse DCCP Service Codes asassociate apart of the information used to setup an IPsec security association. 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 assumeDCCP-Request with a server that handles thenumbers correspond to Well Known services. It is useful to notecorresponding Service Code. This operation could resemble thatthere is no such requirement; any service may run on any port, subject to mutual agreement between the endpoint hosts. Useof "inetd" [inetd]. As in the previous section, when the specified Service Codemay interfereis not associated withthis assumption both within IPsecthe specified server port, the connection MUST be aborted andin other firewall systems, but it does not addanew vulnerability. New implementationsDCCP Reset message sent [RFC4340]. 4. Security Considerations The security considerations ofIPsecRFC 4340 identify andfirewall systems may interpretoffer guidance on security issues relating to DCCP. This document discusses the usage of ServiceCode when implementing policy rules, but shouldCodes. It does notrely on either port numbers or Service Codes to indicate a specific service. 5. IANA Considerations This document does not updatedescribe new protocol functions. All IPsec modes protect theIANA allocation procedures forintegrity of the DCCPPort Number and DCCP Service Codes Registries as defined in RFC 4340. For completeness,header. This protects thedocument notes that it is not required to supply an approved document (e.g. a published RFC) to support an application for a DCCPService Codeor port number value, although RFCsfield from undetected modification within the network. In addition, the IPsec Encapsulated Security Payload (ESP) mode may be used torequestencrypt the Service Codevalues viafield, hiding theIANA Considerations Section. A specification is however required to allocate aService Codethat uses a combination of ASCII digits, uppercase letters, and character space, '-', '.', and '/') [RFC4340]. 6. Acknowledgments This work has been supported byvalue within theEC IST SatSix Project. Significant contributions to this document resulted from discussion with Joe Touch,network andthis is gratefully acknowledged. The authoralsothanks Ian McDonald, Fernando Gont, Eddie Kohler, and thepreventing interpretation by middleboxes. The DCCPWG for helpful comments on this topic, and Gerrit Renker for his helpheader is not protected by application-layer security (e.g., the use of DTLS [RFC5238] as specified indetermining DCCP behaviour and reviewDTLS/DCCP [RFC4347]). There are four areas ofthis document. Mark Handley provided significant inputsecurity 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 tothe text on definitionDCCP are described in [RFC5597]. 3. Interpretation of DCCP Service Codesand their usage. He also contributed much of the material that has formed the historical background Section. 7. References 7.1. Normative References [RFC1122] Braden, R. (ed.), "Requirements for Internet Hosts: Communication Layers, " STD 3, RFC 1122, Oct. 1989 (STANDARD). [RFC2119] Bradner, S., "Key words foroverriding 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 inRFCsaddition toIndicate Requirement Levels", BCP 14, RFC 2119, March 1997 (BEST CURRENT PRACTICE). [RFC4340] Kohler, E., M. Handley, S. Floyd, "Datagram Congestion Control Protocol (DCCP)", RFC 4340, Mar. 2006 (PROPOSED STANDARD). [ID.Behave-DCCP] R. Denis-Courmont, "Network Address Translation (NAT) Behavioral Requirementsports 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 forDCCP", IETF Work in Progress, draft-ietf-behave-dccp-05.txt. 7.2. Informative References [ANSI.X3-4.1986] American National Standards Institute, "Coded Character Set - 7-bit American Standard Codea single port number forInformation Interchange", ANSI X3.4, 1986. [IANA] Internet Assigned Numbers Authority, www.iana.org [IANA.SC] IANATCP and UDP. These are relatively rare. Since the DCCP Service CodeRegistry http://www.iana.org/assignments/service-codes [ID.Simul] G. Fairhurst, G. Renker, "DCCP Simultaneous-Open Techniqueallows multiple applications toFacilitate NAT/Middlebox Traversal", IETF Work in Progress, draft-ietf-dccp-simul-open-08.txt. [ID.RTP] C. Perkins, "RTP andsafely share theDatagram Congestion Control Protocol (DCCP)", IETF Worksame port number, even on the same host, server port number reuse inProgress, draft-ietf-dccp- rtp-07.txt. [ID.Rand] M. Larsen, F. Gont, "Port Randomization", IETF WorkDCCP may be more common than inProgress, draft-larsen-tsvwg-port-randomization-02.txt [inetd]TCP and UDP. 4.2. Association of Applications with Service Codes Theextended 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, Sept. 1981 (STANDARD). [RFC814] Clark, D., "NAME, ADDRESSES, PORTS, AND ROUTES", RFC 814, July 1982 (UNKNOWN). [RFC862] Postel, J., "Echo Protocol", STD 20, RFC 862, May 1983. [RFC2326] Schulzrinne, H., Rao, A., and R. Lanphier, "Real Time Streaming Protocol (RTSP)", RFC 2326, April 1998. [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 Implicationsuse ofNAT", 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., and G. Fairhurst, "The Lightweight User Datagram Protocol (UDP- Lite)", RFC 3828, July 2004. [RFC4301] Kent, S. and K. Seo, "Security ArchitectureService Codes provides more ready feedback that a concrete service is associated with a given port on a server than forthe 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. 8. Author's Addresses Godred (Gorry) Fairhurst, School of Engineering, University of Aberdeen, Kings College, Aberdeen, AB24 3UE, UK Email: [email protected] URL: http://www.erg.abdn.ac.uk/users/gorry 8.1. Disclaimer 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 maya service that does nothave granted the IETF Trust the rightemploy Service Codes. By responding toallow modifications of such material outside the IETF Standards Process. Without obtaininganadequate license from the person(s) controlling the copyright in such materials, this document mayinbound connection request, systems notbe modified outside the IETF Standards Process, and derivative works of itusing these codes maynot be created outside the IETF Standards Process, except to format it for publication as an RFCindicate that some service is, orto translate it into languages other than English. 8.2. Copyright Notice Copyright (c) 2009 IETF Trust and the persons identified as the document authors. All rights reserved. This documentissubject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents in effectnot, available onthe date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, as they describe your rights and restrictions with respect to this document. >>> RFC Editor please removea given port, but systems using thisSection prior to publication. Change Log. 01 introduced: -mechanism immediately provide confirmation (or denial) that areplacementparticular service is present. This may have implications in terms ofthe word *range* when referringport scanning and reconnaissance. Care needs tosets of dccp ports (they are not necessarily contiguous), noted by E. Kohler. - Additionbe exercised when interpreting the mapping ofsomea ServiceCodes in IANA Section. 02 introduced: - addCode value to theuse of profiles with DCCP, identified bycorresponding service. The same service (application) may be accessed using more than one ServiceCode, but notCode. Examples include the use ofprotocol variants. - further detail on implementation levels (more input would be good) - added security consideration for traffic generators - added ref to UDPLseparate Service Codes forcompleteness - Corrected NiTs found by Gerrit Renker +++++++++++++++++++++++++++ WG 00 (first WG version) This introduced revisions to make it a WG document. - Corrected language and responded to many helpful comments from Fernando Gontan application layered directly upon DCCP andIan McDonald. - Addedone using DTLS transport over DCCP [RFC5238]. Other possibilities include the use of atest for which server behaviour is used. - Added some speculative text on howprivate Service Code that maps toimplementtheSC. - More input and discussionsame application as isrequested from the WG. - Added an informative appendix on host configuration. - Merging of some Sectionsassigned toremove repetition and clarify wording. +++++++++++++++++++++++++++ WG 01 Historical material was added. Comments from the list have been included. The conceptan IANA- defined Service Code value, or a single application that provides more than one service. Different versions ofadding weak semanticsa service (application) may also be mapped to aSC=0 was removed. This was added at the requestcorresponding set ofimplementers, with the aimService Code values. Processing ofoffering easier implementation on at least one target platform. It has been removed in this document because it weakens interoperability and complicates the Spec. The proposalService Codes may imply more processing than currently associated with incoming port numbers. Implementors need toallow several levelsguard against increasing opportunities for Denial ofsupport was introduced in previous drafts following suggestions from the WG, but was removed in this revision.Service attacks. 4.3. Interactions with IPsec The Internet Key Exchange protocol (IKEv2) does not currently specify a methodwas seentointroduce complexity, and resulted in complex interoperability scenarios. Removed "test" method, this was no longer required. Draft was reorganizeduse DCCP Service Codes as a part of the information used toimprove clarity and simplify concepts. ---- WG 02 Updated following comments from Eddie Kohler. ---- WG 03 Fixed NiTs and addressed issues markedset up an IPsec security association. IPsec uses port numbers to perform access control inprevious version. Added 2 para at endtransport 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 portSection saying hownumbers in IPsec selectors and firewalls may assume that the numbers correspond touseWell Knownports and that you do not needservices. It is useful toregister them. ----- WG 04 Cleaned English (removing duplication) Checked textnote thatupdates RFC4340 (and remove duplicates). Updated hash algorithm for SC->s_port Updated to IANA Section. Edits in responsethere is no such requirement; any service may run on any port, subject tofeedback from Tom Phelan, et al. ----- WG-05: Various Sections were updated following feedback from the list, some specific comments were: Tom Phelan suggested clarification was needed formutual agreement between theusageendpoint hosts. Use ofwell- known ports in Section 1, and various other clarifications. Eddie Kohler suggested reworking the midbox Section. Eddie noted the hash function included the highest numbered port, which is not accessible on all OS. There was also discussion abouttheproper server port range to be usedService Code may interfere with thismethod. After previous concerns that using registered ports could have some (unknown) side effect, use was recommended in the dynamic range. Text was added to this Section. Discussions at IETF-71 lead to the idea to removingassumption 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 theIANA guidanceService Code when implementing policy rules, but should not rely onmaintaining the registrieseither port numbers or Service Codes to indicate anewspecific service. 5. IANA Considerations This documentthat defines the policy across the set of transport registries. Eddie noted that port-reuse is likely to be more common with DCCP (security considerations). Lars noted that rate-limiting benchmarking tools may be somewhat undesirable, and this related to services for testing. The text recommending andoes not updatetothe IANA allocation procedures forports and service codes has been moved to a TSV WG draft. ----- WG-06: Updated the updating paragraphs to clarify the specific clauses of RFC 4340 are changed. Comments from Eddie and Colin. Very minor editorial corrections. ----- WG-07: Portname for Perf in registry changed to all lower case. Replaced para 2 of intro and updated later parts of the introduction (feedback in LC from Eddie). Added citation totheBehave WG Requirements for NATs (now in LC). ----- WG-08: New text to address editorial corrections proposed by Alfred Hoenes. ----- WG-09:Update following review feedback Gen-ART Section 3.2: Middlebox [RFC3234] implementors therefore need to note that newDCCPconnections are identified by the pair of ServerPort Number and DCCP ServiceCode. - Added "in addition to the IP address" to the end ofCodes Registries as defined in RFC 4340. For completeness, theabove sentence for clarity. Section 3.2: Updated sentence to read: This meansdocument notes thatthe IANA may allocateit is not required to supply an approved document (e.g., aserver portpublished RFC) tomore than one DCCPsupport an application[RFC4340]. Section 3.3.2 rewritten as:for a DCCP ServiceCodes are not restricted to specific ports,Code or port number value, althoughtheyRFCs may beassociated with a specific well- known port. The same DCCPused to request Service Codevalue may therefore be associated with more than one server port (in eithervalues via theactive or passive state). Section 5.3: Added: The Internet Key Exchange protocol (IKEv2), does not currently specify a methodIANA Considerations section. A specification is however required touse DCCPallocate a ServiceCodes asCode that uses apartcombination of ASCII digits, uppercase letters, and character space, '-', '.', and '/') [RFC4340]. 6. Acknowledgments This work has been supported by theinformation usedEC IST SatSix Project. Significant contributions tosetup an IPsec security association. Sec-Dir Section 5: Added:this document resulted from discussion with Joe Touch, and this is gratefully acknowledged. Thesecurity considerations of RFC 4340 identifiesauthor also thanks Ian McDonald, Fernando Gont, Eddie Kohler, andoffers guidancethe DCCP WG for helpful comments onsecurity issues relatingthis topic, and Gerrit Renker for his help in determining DCCP behavior and review of this document. Mark Handley provided significant input toDCCP. Section 5.2: Added new paragraph: The usethe text on the definition of Service Codesprovides more ready feedbackand their usage. He also contributed much of the material thata concrete service is associated with a given port on a servers, thanhas formed the historical background section. 7. References 7.1. Normative References [RFC1122] Braden, R., Ed., "Requirements fora service that does not employing service codes. By respondingInternet Hosts - Communication Layers", STD 3, RFC 1122, October 1989. [RFC2119] Bradner, S., "Key words for use in RFCs toan 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 implicationsIndicate 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, July 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 interms of port scanningProgress, June 2007. [Rand] Larsen, M. andreconnaissance. ----- WG-10:Update following IESG review feedback Typo reported by Iain Calder was fixed: simply to obtain s/simply/simple/. Fixed syntax error reported by JariF. 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. [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 thesample pseudo code,Internet Protocol andadded more discussion ofRelated Headers", BCP 37, RFC 2780, March 2000. [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for specifying thealgorithm. A clarificationlocation ofASCII usage, suggested by: Added text: /a four character ASCII string [ANSI.X3-4.1986], or an eight digit hexadecimal number. All standards assigned values, including all values assigned by IANA, are required to use a value that may be represented using a subsetservices (DNS SRV)", RFC 2782, February 2000. [RFC2993] Hain, T., "Architectural Implications ofthe ASCII character set. Private Service Codes do not need to follow this convention, althoughNAT", 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", RFC4340 suggests that users also choose Service Codes that may also be represented in ASCII./ Added new informational reference: American National Standards Institute, "Coded Character Set - 7-bit American Standard Code3261, 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 forInformation Interchange", ANSI X3.4, 1986. URL to iperf changed, since we note CAIDA intends to shutdown all services associated withtheNLANR.NET domain in May 2009. section 3.3 changed to correct section references (error noted by Ralph Droms)Internet Protocol", RFC 4301, December 2005. [RFC4347] Rescorla, E. andadditional text added to clarify sections 3.3.1N. Modadugu, "Datagram Transport Layer Security", RFC 4347, April 2006. [RFC4566] Handley, M., Jacobson, V., and3.3.2. New text includes: /The combination ofC. 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 theService Code and server port disambiguates incoming DCCP-Requests received by a server. The Service Code is usedDatagram Congestion Control Protocol (DCCP)", RFC 5238, May 2008. [RFC5596] Fairhurst, G., "Datagram Congestion Control Protocol (DCCP) Simultaneous-Open Technique toassociate a new DCCP connection with the corresponding application service. Four cases can arise when two DCCP server applications passively listen on the same host:/ WG-11: Update following discussion with AD After discussion, the section on benchmarking was removed, and will be addressed separately. Note: This I-D will be a normative reference in draft-ietf-dccp- simul-open.Facilitate NAT/Middlebox Traversal", RFC 5596, June 2009. Author's Address Godred (Gorry) Fairhurst, School of Engineering, University of Aberdeen, Kings College, Aberdeen, AB24 3UE, UK EMail: [email protected] URL: http://www.erg.abdn.ac.uk/users/gorry