summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8304.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8304.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8304.txt')
-rw-r--r--doc/rfc/rfc8304.txt1123
1 files changed, 1123 insertions, 0 deletions
diff --git a/doc/rfc/rfc8304.txt b/doc/rfc/rfc8304.txt
new file mode 100644
index 0000000..18a1675
--- /dev/null
+++ b/doc/rfc/rfc8304.txt
@@ -0,0 +1,1123 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) G. Fairhurst
+Request for Comments: 8304 T. Jones
+Category: Informational University of Aberdeen
+ISSN: 2070-1721 February 2018
+
+
+ Transport Features of the User Datagram Protocol (UDP)
+ and Lightweight UDP (UDP-Lite)
+
+Abstract
+
+ This is an informational document that describes the transport
+ protocol interface primitives provided by the User Datagram Protocol
+ (UDP) and the Lightweight User Datagram Protocol (UDP-Lite) transport
+ protocols. It identifies the datagram services exposed to
+ applications and how an application can configure and use the
+ features offered by the Internet datagram transport service. RFC
+ 8303 documents the usage of transport features provided by IETF
+ transport protocols, describing the way UDP, UDP-Lite, and other
+ transport protocols expose their services to applications and how an
+ application can configure and use the features that make up these
+ services. This document provides input to and context for that
+ document, as well as offers a road map to documentation that may help
+ users of the UDP and UDP-Lite protocols.
+
+Status of This Memo
+
+ This document is not an Internet Standards Track specification; it is
+ published for informational purposes.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Not all documents
+ approved by the IESG are a candidate for any level of Internet
+ Standard; see Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8304.
+
+
+
+
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 1]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+Copyright Notice
+
+ Copyright (c) 2018 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
+ (https://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 Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 3. UDP and UDP-Lite Primitives . . . . . . . . . . . . . . . . . 4
+ 3.1. Primitives Provided by UDP . . . . . . . . . . . . . . . 4
+ 3.1.1. Excluded Primitives . . . . . . . . . . . . . . . . . 11
+ 3.2. Primitives Provided by UDP-Lite . . . . . . . . . . . . . 12
+ 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13
+ 5. Security Considerations . . . . . . . . . . . . . . . . . . . 13
+ 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 13
+ 6.1. Normative References . . . . . . . . . . . . . . . . . . 13
+ 6.2. Informative References . . . . . . . . . . . . . . . . . 15
+ Appendix A. Multicast Primitives . . . . . . . . . . . . . . . . 17
+ Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 20
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 20
+
+1. Introduction
+
+ This document presents defined interactions between transport
+ protocols and applications in the form of 'primitives' (function
+ calls) for the User Datagram Protocol (UDP) [RFC0768] and the
+ Lightweight User Datagram Protocol (UDP-Lite) [RFC3828]. In this
+ usage, the word application refers to any program built on the
+ datagram interface, including tunnels and other upper-layer protocols
+ that use UDP and UDP-Lite.
+
+ UDP is widely implemented and deployed. It is used for a wide range
+ of applications. A special class of applications can derive benefit
+ from having partially damaged payloads delivered, rather than
+ discarded, when using paths that include error-prone links.
+ Applications that can tolerate payload corruption can choose to use
+ UDP-Lite instead of UDP and use the application programming interface
+
+
+
+Fairhurst & Jones Informational [Page 2]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ (API) to control checksum protection. Conversely, UDP applications
+ could choose to use UDP-Lite, but this is currently less widely
+ deployed, and users could encounter paths that do not support
+ UDP-Lite. These topics are discussed more in Section 3.4 of "UDP
+ Usage Guidelines" [RFC8085].
+
+ The IEEE standard API for TCP/IP applications is the "socket"
+ interface [POSIX]. An application can use the recv() and send()
+ POSIX functions as well as the recvfrom(), sendto(), recvmsg(), and
+ sendmsg() functions. The UDP and UDP-Lite sockets API differs from
+ that for TCP in several key ways. (Examples of usage of this API are
+ provided in [STEVENS].) In UDP and UDP-Lite, each datagram is a
+ self-contained message of a specified length, and options at the
+ transport layer can be used to set properties for all subsequent
+ datagrams sent using a socket or changed for each datagram. For
+ datagrams, this can require the application to use the API to set
+ IP-level information (IP Time To Live (TTL), Differentiated Services
+ Code Point (DSCP), IP fragmentation, etc.) for the datagrams it sends
+ and receives. In contrast, when using TCP and other connection-
+ oriented transports, the IP-level information normally either remains
+ the same for the duration of a connection or is controlled by the
+ transport protocol rather than the application.
+
+ Socket options are used in the sockets API to provide additional
+ functions. For example, the IP_RECVTTL socket option is used by some
+ UDP multicast applications to return the IP TTL field from the IP
+ header of a received datagram.
+
+ Some platforms also offer applications the ability to directly
+ assemble and transmit IP packets through "raw sockets" or similar
+ facilities. The raw sockets API is a second, more cumbersome, method
+ to send UDP datagrams. The use of this API is discussed in the RFC
+ series in the UDP Guidelines [RFC8085].
+
+ The list of transport service features and primitives in this
+ document is strictly based on the parts of protocol specifications in
+ the RFC series that relate to what the transport protocol provides to
+ an application that uses it and how the application interacts with
+ the transport protocol. Primitives can be invoked by an application
+ or a transport protocol; the latter type is called an "event".
+
+ The description in Section 3 follows the methodology defined by the
+ IETF TAPS Working Group in [RFC8303]. Specifically, this document
+ provides the first pass of this process, which discusses the relevant
+ RFC text describing primitives for each protocol. [RFC8303] uses
+ this input to document the usage of transport features provided by
+ IETF transport protocols, describing the way UDP, UDP-Lite, and other
+
+
+
+
+Fairhurst & Jones Informational [Page 3]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ transport protocols expose their services to applications and how an
+ application can configure and use the features that make up these
+ services.
+
+ The presented road map to documentation of the transport interface
+ may also help developers working with UDP and UDP-Lite.
+
+2. Terminology
+
+ This document provides details for the pass 1 analysis of UDP and
+ UDP-Lite that is used in "On the Usage of Transport Features Provided
+ by IETF Transport Protocols" [RFC8303]. It uses common terminology
+ defined in that document and also quotes RFCs that use the
+ terminology of RFC 2119 [RFC2119].
+
+3. UDP and UDP-Lite Primitives
+
+ UDP [RFC0768] [RFC8200] and UDP-Lite [RFC3828] are IETF Standards
+ Track transport protocols. These protocols provide unidirectional,
+ datagram services, supporting transmit and receive operations that
+ preserve message boundaries.
+
+ This section summarizes the relevant text parts of the RFCs
+ describing the UDP and UDP-Lite protocols, focusing on what the
+ transport protocols provide to the application and how the transport
+ is used (based on abstract API descriptions, where they are
+ available). It describes how UDP is used with IPv4 or IPv6 to send
+ unicast or anycast datagrams and is used to send broadcast datagrams
+ for IPv4. A set of network-layer primitives required to use UDP or
+ UDP-Lite with IP multicast (for IPv4 and IPv6) have been specified in
+ the RFC series. Appendix A describes where to find documentation for
+ network-layer primitives required to use UDP or UDP-Lite with IP
+ multicast (for IPv4 and IPv6).
+
+3.1. Primitives Provided by UDP
+
+ "User Datagram Protocol" [RFC0768] states:
+
+ This User Datagram Protocol (UDP) is defined to make available a
+ datagram mode of packet-switched computer communication in the
+ environment of an interconnected set of computer networks...This
+ protocol provides a procedure for application programs to send
+ messages to other programs with a minimum of protocol mechanism.
+
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 4]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ The User Interface section of RFC 768 states that the user interface
+ to an application should allow
+
+ the creation of new receive ports, receive operations on the
+ receive ports that return the data octets and an indication of
+ source port and source address, and an operation that allows a
+ datagram to be sent, specifying the data, source and destination
+ ports and addresses to be sent.
+
+ UDP has been defined for IPv6 [RFC8200], together with API extensions
+ for "Basic Socket Interface Extensions for IPv6" [RFC3493].
+
+ [RFC6935] and [RFC6936] define an update to the UDP transport
+ originally specified in [RFC2460] (note that RFC 2460 has been
+ obsoleted by RFC 8200). This enables use of a zero UDP checksum mode
+ with a tunnel protocol, providing that the method satisfies the
+ requirements in the corresponding applicability statement [RFC6936].
+
+ UDP offers only a basic transport interface. UDP datagrams may be
+ directly sent and received, without exchanging messages between the
+ endpoints to set up a connection (i.e., no handshake is performed by
+ the transport protocol prior to communication). Using the sockets
+ API, applications can receive packets from more than one IP source
+ address on a single UDP socket. Common support allows specification
+ of the local IP address, destination IP address, local port, and
+ destination port values. Any or all of these can be indicated, with
+ defaults supplied by the local system when these are not specified.
+ The local endpoint address is set using the BIND call. At the remote
+ end, the remote endpoint address is set using the CONNECT call. The
+ CLOSE function has local significance only. It does not impact the
+ status of the remote endpoint.
+
+ Neither UDP nor UDP-Lite provide congestion control, retransmission,
+ or mechanisms for application-level packetization that would avoid IP
+ fragmentation and other transport functions. This means that
+ applications using UDP need to provide additional functions on top of
+ the UDP transport API [RFC8085]. Some transport functions require
+ parameters to be passed through the API to control the network layer
+ (IPv4 or IPv6). These additional primitives could be considered a
+ part of the network layer (e.g., control of the setting of the Don't
+ Fragment (DF) flag on a transmitted IPv4 datagram) but are
+ nonetheless essential to allow a user of the UDP API to implement
+ functions that are normally associated with the transport layer (such
+ as probing for the path maximum transmission size). This document
+ includes such primitives.
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 5]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ Guidance on the use of the services provided by UDP is provided in
+ the UDP Guidelines [RFC8085]. This also states that
+
+ many operating systems also allow a UDP socket to be connected,
+ i.e., to bind a UDP socket to a specific pair of addresses and
+ ports. This is similar to the corresponding TCP sockets API
+ functionality. However, for UDP, this is only a local operation
+ that serves to simplify the local send/receive functions and to
+ filter the traffic for the specified addresses and ports. Binding
+ a UDP socket does not establish a connection -- UDP does not
+ notify the remote end when a local UDP socket is bound. Binding a
+ socket also allows configuring options that affect the UDP or IP
+ layers, for example, use of the UDP checksum or the IP Timestamp
+ option. On some stacks, a bound socket also allows an application
+ to be notified when ICMP error messages are received for its
+ transmissions [RFC1122].
+
+ The POSIX Base Specifications [POSIX] define an API that offers
+ mechanisms for an application to receive asynchronous data events at
+ the socket layer. Calls such as "poll", "select", or "queue" allow
+ an application to be notified when data has arrived at a socket or
+ when a socket has flushed its buffers.
+
+ A callback-driven API to the network interface can be structured on
+ top of these calls. Implicit connection setup allows an application
+ to delegate connection life management to the transport API. The
+ transport API uses protocol primitives to offer the automated service
+ to the application via the sockets API. By combining UDP primitives
+ (CONNECT.UDP and SEND.UDP), a higher-level API could offer a similar
+ service.
+
+ The following datagram primitives are specified:
+
+ CONNECT: The CONNECT primitive allows the association of source and
+ destination port sets to a socket to enable creation of a
+ 'connection' for UDP traffic. This UDP connection allows an
+ application to be notified of errors received from the network
+ stack and provides a shorthand access to the SEND and RECEIVE
+ primitives. Since UDP is itself connectionless, no datagrams are
+ sent because this primitive is executed. A further connect call
+ can be used to change the association.
+
+
+
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 6]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ The roles of a client and a server are often not appropriate for
+ UDP, where connections can be peer-to-peer. The listening
+ functions are performed using one of the forms of the CONNECT
+ primitive:
+
+ 1. bind(): A bind operation sets the local port either
+ implicitly, triggered by a "sendto" operation on an unbound
+ unconnected socket using an ephemeral port, or by an explicit
+ "bind" to use a configured or well-known port.
+
+ 2. bind(); connect(): A bind operation that is followed by a
+ CONNECT primitive. The bind operation establishes the use of
+ a known local port for datagrams rather than using an
+ ephemeral port. The connect operation specifies a known
+ address port combination to be used by default for future
+ datagrams. This form either is used after receiving a
+ datagram from an endpoint that causes the creation of a
+ connection or can be triggered by a third-party configuration
+ or a protocol trigger (such as reception of a UDP Service
+ Description Protocol (SDP) [RFC4566] record).
+
+ SEND: The SEND primitive hands over a provided number of bytes that
+ UDP should send to the other side of a UDP connection in a UDP
+ datagram. The primitive can be used by an application to directly
+ send datagrams to an endpoint defined by an address/port pair. If
+ a connection has been created, then the address/port pair is
+ inferred from the current connection for the socket. Connecting a
+ socket allows network errors to be returned to the application as
+ a notification on the SEND primitive. Messages passed to the SEND
+ primitive that cannot be sent atomically in an IP packet will not
+ be sent by the network layer, generating an error.
+
+ RECEIVE: The RECEIVE primitive allocates a receiving buffer to
+ accommodate a received datagram. The primitive returns the number
+ of bytes provided from a received UDP datagram. Section 4.1.3.5
+ of the requirements of Internet hosts [RFC1122] states "When a UDP
+ datagram is received, its specific-destination address MUST be
+ passed up to the application layer."
+
+ CHECKSUM_ENABLED: The optional CHECKSUM_ENABLED primitive controls
+ whether a sender enables the UDP checksum when sending datagrams
+ [RFC0768] [RFC6935] [RFC6936] [RFC8085]. When unset, this
+ overrides the default UDP behavior, disabling the checksum on
+ sending. Section 4.1.3.4 of the requirements for Internet hosts
+ [RFC1122] states that "An application MAY optionally be able to
+ control whether a UDP checksum will be generated, but it MUST
+ default to checksumming on."
+
+
+
+
+Fairhurst & Jones Informational [Page 7]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ REQUIRE_CHECKSUM: The optional REQUIRE_CHECKSUM primitive determines
+ whether UDP datagrams received with a zero checksum are permitted
+ or discarded; UDP defaults to requiring checksums.
+ Section 4.1.3.4 of the requirements for Internet hosts [RFC1122]
+ states that "An application MAY optionally be able to control
+ whether UDP datagrams without checksums should be discarded or
+ passed to the application." Section 3.1 of the specification for
+ UDP-Lite [RFC3828] requires that the checksum field be non-zero;
+ hence, the UDP-Lite API must discard all datagrams received with a
+ zero checksum.
+
+ SET_IP_OPTIONS: The SET_IP_OPTIONS primitive requests the network
+ layer to send a datagram with the specified IP options.
+ Section 4.1.3.2 of the requirements for Internet hosts [RFC1122]
+ states that an "application MUST be able to specify IP options to
+ be sent in its UDP datagrams, and UDP MUST pass these options to
+ the IP layer."
+
+ GET_IP_OPTIONS: The GET_IP_OPTIONS primitive retrieves the IP
+ options of a datagram received at the network layer.
+ Section 4.1.3.2 of the requirements for Internet hosts [RFC1122]
+ states that a UDP receiver "MUST pass any IP option that it
+ receives from the IP layer transparently to the application
+ layer."
+
+ SET_DF: The SET_DF primitive allows the network layer to fragment
+ packets using the Fragment Offset in IPv4 [RFC6864] and a host to
+ use Fragment Headers in IPv6 [RFC8200]. The SET_DF primitive sets
+ the Don't Fragment (DF) flag in the IPv4 packet header that
+ carries a UDP datagram, which allows routers to fragment IPv4
+ packets. Although some specific applications rely on
+ fragmentation support, in general, a UDP application should
+ implement a method that avoids IP fragmentation (Section 4 of
+ [RFC8085]). NOTE: In many other IETF transports (e.g., TCP and
+ the Stream Control Transmission Protocol (SCTP)), the transport
+ provides the support needed to use DF. However, when using UDP,
+ the application is responsible for the techniques needed to
+ discover the effective Path MTU (PMTU) allowed on the network
+ path, coordinating with the network layer. Classical Path MTU
+ Discovery (PMTUD) [RFC1191] relies upon the network path returning
+ ICMP Fragmentation Needed or ICMPv6 Packet Too Big messages to the
+ sender. When these ICMP messages are not delivered (or filtered),
+ a sender is unable to learn the actual PMTU, and UDP datagrams
+ larger than the PMTU will be "black holed". To avoid this, an
+ application can instead implement Packetization Layer Path MTU
+ Discovery (PLPMTUD) [RFC4821] that does not rely upon network
+
+
+
+
+
+Fairhurst & Jones Informational [Page 8]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ support for ICMPv6 messages and is therefore considered more
+ robust than standard PMTUD, as recommended in [RFC8085] and
+ [RFC8201].
+
+ GET_MMS_S: The GET_MMS_S primitive retrieves a network-layer value
+ that indicates the maximum message size (MMS) that may be sent at
+ the transport layer using a non-fragmented IP packet from the
+ configured interface. This value is specified in Section 6.1 of
+ [RFC1191] and Section 5.1 of [RFC8201]. It is calculated from
+ Effective MTU for Sending (EMTU_S) and the link MTU for the given
+ source IP address. This takes into account the size of the IP
+ header plus space reserved by the IP layer for additional headers
+ (if any). UDP applications should use this value as part of a
+ method to avoid sending UDP datagrams that would result in IP
+ packets that exceed the effective PMTU allowed across the network
+ path. The effective PMTU (specified in Section 1 of [RFC1191]) is
+ equivalent to the EMTU_S (specified in [RFC1122]). The
+ specification of PLPMTUD [RFC4821] states:
+
+ If PLPMTUD updates the MTU for a particular path, all
+ Packetization Layer sessions that share the path representation
+ (as described in Section 5.2) SHOULD be notified to make use of
+ the new MTU and make the required congestion control
+ adjustments.
+
+ GET_MMS_R: The GET_MMS_R primitive retrieves a network-layer value
+ that indicates the MMS that may be received at the transport layer
+ from the configured interface. This value is specified in
+ Section 3.1 of [RFC1191]. It is calculated from Effective MTU for
+ Receiving (EMTU_R) and the link MTU for the given source IP
+ address, and it takes into account the size of the IP header plus
+ space reserved by the IP layer for additional headers (if any).
+
+ SET_TTL: The SET_TTL primitive sets the Hop Limit (TTL field) in the
+ network layer that is used in the IPv4 header of a packet that
+ carries a UDP datagram. This is used to limit the scope of
+ unicast datagrams. Section 3.2.2.4 of the requirements for
+ Internet hosts [RFC1122] states that "An incoming Time Exceeded
+ message MUST be passed to the transport layer."
+
+ GET_TTL: The GET_TTL primitive retrieves the value of the TTL field
+ in an IP packet received at the network layer. An application
+ using the Generalized TTL Security Mechanism (GTSM) [RFC5082] can
+ use this information to trust datagrams with a TTL value within
+ the expected range, as described in Section 3 of RFC 5082.
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 9]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ SET_MIN_TTL: The SET_MIN_TTL primitive restricts datagrams delivered
+ to the application to those received with an IP TTL value greater
+ than or equal to the passed parameter. This primitive can be used
+ to implement applications such as GTSM [RFC5082] too, as described
+ in Section 3 of RFC 5082, but this RFC does not specify this
+ method.
+
+ SET_IPV6_UNICAST_HOPS: The SET_IPV6_UNICAST_HOPS primitive sets the
+ network-layer Hop Limit field in an IPv6 packet header [RFC8200]
+ carrying a UDP datagram. For IPv6 unicast datagrams, this is
+ functionally equivalent to the SET_TTL IPv4 function.
+
+ GET_IPV6_UNICAST_HOPS: The GET_IPV6_UNICAST_HOPS primitive is a
+ network-layer function that reads the hop count in the IPv6 header
+ [RFC8200] information of a received UDP datagram. This is
+ specified in Section 6.3 of RFC 3542. For IPv6 unicast datagrams,
+ this is functionally equivalent to the GET_TTL IPv4 function.
+
+ SET_DSCP: The SET_DSCP primitive is a network-layer function that
+ sets the DSCP (or the legacy Type of Service (ToS)) value
+ [RFC2474] to be used in the field of an IP header of a packet that
+ carries a UDP datagram. Section 2.4 of the requirements for
+ Internet hosts [RFC1123] states that "Applications MUST select
+ appropriate ToS values when they invoke transport layer services,
+ and these values MUST be configurable." The application should be
+ able to change the ToS during the connection lifetime, and the ToS
+ value should be passed to the IP layer unchanged. Section 4.1.4
+ of [RFC1122] also states that on reception the "UDP MAY pass the
+ received ToS up to the application layer." The Diffserv model
+ [RFC2475] [RFC3260] replaces this field in the IP header assigning
+ the six most significant bits to carry the DSCP field [RFC2474].
+ Preserving the intention of the host requirements [RFC1122] to
+ allow the application to specify the "Type of Service" should be
+ interpreted to mean that an API should allow the application to
+ set the DSCP. Section 3.1.8 of the UDP Guidelines [RFC8085]
+ describes the way UDP applications should use this field.
+ Normally, a UDP socket will assign a single DSCP value to all
+ datagrams in a flow, but a sender is allowed to use different DSCP
+ values for datagrams within the same flow in certain cases
+ [RFC8085]. There are guidelines for WebRTC that illustrate this
+ use [RFC7657].
+
+ SET_ECN: The SET_ECN primitive is a network-layer function that sets
+ the Explicit Congestion Notification (ECN) field in the IP header
+ of a UDP datagram. The ECN field defaults to a value of 00. When
+ the use of the ToS field was redefined by Diffserv [RFC3260], 2
+ bits of the field were assigned to support ECN [RFC3168].
+ Section 3.1.5 of the UDP Guidelines [RFC8085] describes the way
+
+
+
+Fairhurst & Jones Informational [Page 10]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ UDP applications should use this field. NOTE: In many other IETF
+ transports (e.g., TCP), the transport provides the support needed
+ to use ECN; when using UDP, the application or higher-layer
+ protocol is itself responsible for the techniques needed to use
+ ECN.
+
+ GET_ECN: The GET_ECN primitive is a network-layer function that
+ returns the value of the ECN field in the IP header of a received
+ UDP datagram. Section 3.1.5 of [RFC8085] states that a UDP
+ receiver "MUST check the ECN field at the receiver for each UDP
+ datagram that it receives on this port", requiring the UDP
+ receiver API to pass the received ECN field up to the application
+ layer to enable appropriate congestion feedback.
+
+ ERROR_REPORT: The ERROR_REPORT event informs an application of "soft
+ errors", including the arrival of an ICMP or ICMPv6 error message.
+ Section 4.1.4 of the requirements for Internet hosts [RFC1122]
+ states that "UDP MUST pass to the application layer all ICMP error
+ messages that it receives from the IP layer." For example, this
+ event is required to implement ICMP-based Path MTU Discovery
+ [RFC1191] [RFC8201]. UDP applications must perform a CONNECT to
+ receive ICMP errors.
+
+ CLOSE: The CLOSE primitive closes a connection. No further
+ datagrams can be sent or received. Since UDP is itself
+ connectionless, no datagrams are sent when this primitive is
+ executed.
+
+3.1.1. Excluded Primitives
+
+ In the requirements for Internet hosts [RFC1122], Section 3.4
+ describes GET_MAXSIZES and ADVISE_DELIVPROB, and Section 3.3.4.4
+ describes GET_SRCADDR. These mechanisms are no longer used. It also
+ specifies use of the Source Quench ICMP message, which has since been
+ deprecated [RFC6633].
+
+ The IPV6_V6ONLY function is a network-layer primitive that applies to
+ all transport services, as defined in Section 5.3 of the basic socket
+ interface for IPv6 [RFC3493]. This restricts the use of information
+ from the name resolver to only allow communication of AF_INET6
+ sockets to use IPv6 only. This is not considered part of the
+ transport service.
+
+
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 11]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+3.2. Primitives Provided by UDP-Lite
+
+ UDP-Lite [RFC3828] provides similar services to UDP. It changed the
+ semantics of the UDP "payload length" field to that of a "checksum
+ coverage length" field. UDP-Lite requires the pseudo-header checksum
+ to be computed at the sender and checked at a receiver. Apart from
+ the length and coverage changes, UDP-Lite is semantically identical
+ to UDP.
+
+ The sending interface of UDP-Lite differs from that of UDP by the
+ addition of a single (socket) option that communicates the checksum
+ coverage length. This specifies the intended checksum coverage, with
+ the remaining unprotected part of the payload called the "error-
+ insensitive part".
+
+ The receiving interface of UDP-Lite differs from that of UDP by the
+ addition of a single (socket) option that specifies the minimum
+ acceptable checksum coverage. The UDP-Lite Management Information
+ Base (MIB) [RFC5097] further defines the checksum coverage method.
+ Guidance on the use of services provided by UDP-Lite is provided in
+ the UDP Guidelines [RFC8085].
+
+ UDP-Lite requires use of the UDP or UDP-Lite checksum; hence, it is
+ not permitted to use the DISABLE_CHECKSUM function to disable use of
+ a checksum, nor is it possible to disable receiver checksum
+ processing using the REQUIRE_CHECKSUM function. All other primitives
+ and functions for UDP are permitted.
+
+ In addition, the following are defined:
+
+ SET_CHECKSUM_COVERAGE: The SET_CHECKSUM_COVERAGE primitive sets the
+ coverage area for a sent datagram. UDP-Lite traffic uses this
+ primitive to set the coverage length provided by the UDP checksum.
+ Section 3.3 of the UDP-Lite specification [RFC3828] states that
+ "Applications that wish to define the payload as partially
+ insensitive to bit errors...should do this by an explicit system
+ call on the sender side." The default is to provide the same
+ coverage as for UDP.
+
+ SET_MIN_COVERAGE: The SET_MIN_COVERAGE primitive sets the minimum
+ acceptable coverage protection for received datagrams. UDP-Lite
+ traffic uses this primitive to set the coverage length that is
+ checked on receive. (Section 1.1 of [RFC5097] describes the
+ corresponding MIB entry as udpliteEndpointMinCoverage.)
+ Section 3.3 of the UDP-Lite specification [RFC3828] states that
+ "Applications that wish to receive payloads that were only
+
+
+
+
+
+Fairhurst & Jones Informational [Page 12]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ partially covered by a checksum should inform the receiving system
+ by an explicit system call." The default is to require only
+ minimal coverage of the datagram payload.
+
+4. IANA Considerations
+
+ This document does not require any IANA actions.
+
+5. Security Considerations
+
+ Security considerations for the use of UDP and UDP-Lite are provided
+ in the referenced RFCs. Security guidance for application usage is
+ provided in the UDP Guidelines [RFC8085].
+
+6. References
+
+6.1. Normative References
+
+ [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+ DOI 10.17487/RFC0768, August 1980,
+ <https://www.rfc-editor.org/info/rfc768>.
+
+ [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
+ RFC 1112, DOI 10.17487/RFC1112, August 1989,
+ <https://www.rfc-editor.org/info/rfc1112>.
+
+ [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts -
+ Communication Layers", STD 3, RFC 1122,
+ DOI 10.17487/RFC1122, October 1989,
+ <https://www.rfc-editor.org/info/rfc1122>.
+
+ [RFC1123] Braden, R., Ed., "Requirements for Internet Hosts -
+ Application and Support", STD 3, RFC 1123,
+ DOI 10.17487/RFC1123, October 1989,
+ <https://www.rfc-editor.org/info/rfc1123>.
+
+ [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
+ DOI 10.17487/RFC1191, November 1990,
+ <https://www.rfc-editor.org/info/rfc1191>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 13]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
+ of Explicit Congestion Notification (ECN) to IP",
+ RFC 3168, DOI 10.17487/RFC3168, September 2001,
+ <https://www.rfc-editor.org/info/rfc3168>.
+
+ [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W.
+ Stevens, "Basic Socket Interface Extensions for IPv6",
+ RFC 3493, DOI 10.17487/RFC3493, February 2003,
+ <https://www.rfc-editor.org/info/rfc3493>.
+
+ [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, DOI 10.17487/RFC3828, July
+ 2004, <https://www.rfc-editor.org/info/rfc3828>.
+
+ [RFC6864] Touch, J., "Updated Specification of the IPv4 ID Field",
+ RFC 6864, DOI 10.17487/RFC6864, February 2013,
+ <https://www.rfc-editor.org/info/rfc6864>.
+
+ [RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, "IPv6 and
+ UDP Checksums for Tunneled Packets", RFC 6935,
+ DOI 10.17487/RFC6935, April 2013,
+ <https://www.rfc-editor.org/info/rfc6935>.
+
+ [RFC6936] Fairhurst, G. and M. Westerlund, "Applicability Statement
+ for the Use of IPv6 UDP Datagrams with Zero Checksums",
+ RFC 6936, DOI 10.17487/RFC6936, April 2013,
+ <https://www.rfc-editor.org/info/rfc6936>.
+
+ [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage
+ Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085,
+ March 2017, <https://www.rfc-editor.org/info/rfc8085>.
+
+ [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+ (IPv6) Specification", STD 86, RFC 8200,
+ DOI 10.17487/RFC8200, July 2017,
+ <https://www.rfc-editor.org/info/rfc8200>.
+
+ [RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
+ "Path MTU Discovery for IP version 6", STD 87, RFC 8201,
+ DOI 10.17487/RFC8201, July 2017,
+ <https://www.rfc-editor.org/info/rfc8201>.
+
+ [RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of
+ Transport Features Provided by IETF Transport Protocols",
+ RFC 8303, DOI 10.17487/RFC8303, February 2018,
+ <https://www.rfc-editor.org/info/rfc8303>.
+
+
+
+
+Fairhurst & Jones Informational [Page 14]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+6.2. Informative References
+
+ [POSIX] IEEE, "Standard for Information Technology - Portable
+ Operating System Interface (POSIX(R)) Base
+ Specifications", Issue 7, IEEE 1003.1,
+ <http://ieeexplore.ieee.org/document/7582338/>.
+
+ [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+ (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
+ December 1998, <https://www.rfc-editor.org/info/rfc2460>.
+
+ [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black,
+ "Definition of the Differentiated Services Field (DS
+ Field) in the IPv4 and IPv6 Headers", RFC 2474,
+ DOI 10.17487/RFC2474, December 1998,
+ <https://www.rfc-editor.org/info/rfc2474>.
+
+ [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z.,
+ and W. Weiss, "An Architecture for Differentiated
+ Services", RFC 2475, DOI 10.17487/RFC2475, December 1998,
+ <https://www.rfc-editor.org/info/rfc2475>.
+
+ [RFC3260] Grossman, D., "New Terminology and Clarifications for
+ Diffserv", RFC 3260, DOI 10.17487/RFC3260, April 2002,
+ <https://www.rfc-editor.org/info/rfc3260>.
+
+ [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
+ Thyagarajan, "Internet Group Management Protocol, Version
+ 3", RFC 3376, DOI 10.17487/RFC3376, October 2002,
+ <https://www.rfc-editor.org/info/rfc3376>.
+
+ [RFC3678] Thaler, D., Fenner, B., and B. Quinn, "Socket Interface
+ Extensions for Multicast Source Filters", RFC 3678,
+ DOI 10.17487/RFC3678, January 2004,
+ <https://www.rfc-editor.org/info/rfc3678>.
+
+ [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener
+ Discovery Version 2 (MLDv2) for IPv6", RFC 3810,
+ DOI 10.17487/RFC3810, June 2004,
+ <https://www.rfc-editor.org/info/rfc3810>.
+
+ [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
+ Description Protocol", RFC 4566, DOI 10.17487/RFC4566,
+ July 2006, <https://www.rfc-editor.org/info/rfc4566>.
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 15]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet
+ Group Management Protocol Version 3 (IGMPv3) and Multicast
+ Listener Discovery Protocol Version 2 (MLDv2) for Source-
+ Specific Multicast", RFC 4604, DOI 10.17487/RFC4604,
+ August 2006, <https://www.rfc-editor.org/info/rfc4604>.
+
+ [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU
+ Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007,
+ <https://www.rfc-editor.org/info/rfc4821>.
+
+ [RFC5082] Gill, V., Heasley, J., Meyer, D., Savola, P., Ed., and C.
+ Pignataro, "The Generalized TTL Security Mechanism
+ (GTSM)", RFC 5082, DOI 10.17487/RFC5082, October 2007,
+ <https://www.rfc-editor.org/info/rfc5082>.
+
+ [RFC5097] Renker, G. and G. Fairhurst, "MIB for the UDP-Lite
+ protocol", RFC 5097, DOI 10.17487/RFC5097, January 2008,
+ <https://www.rfc-editor.org/info/rfc5097>.
+
+ [RFC5790] Liu, H., Cao, W., and H. Asaeda, "Lightweight Internet
+ Group Management Protocol Version 3 (IGMPv3) and Multicast
+ Listener Discovery Version 2 (MLDv2) Protocols", RFC 5790,
+ DOI 10.17487/RFC5790, February 2010,
+ <https://www.rfc-editor.org/info/rfc5790>.
+
+ [RFC6633] Gont, F., "Deprecation of ICMP Source Quench Messages",
+ RFC 6633, DOI 10.17487/RFC6633, May 2012,
+ <https://www.rfc-editor.org/info/rfc6633>.
+
+ [RFC7657] Black, D., Ed. and P. Jones, "Differentiated Services
+ (Diffserv) and Real-Time Communication", RFC 7657,
+ DOI 10.17487/RFC7657, November 2015,
+ <https://www.rfc-editor.org/info/rfc7657>.
+
+ [STEVENS] Stevens, W., Fenner, B., and A. Rudoff, "UNIX Network
+ Programming, The sockets Networking API", Volume 1,
+ ISBN-13: 9780131411555, October 2003.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 16]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+Appendix A. Multicast Primitives
+
+ This appendix describes primitives that are used when UDP and
+ UDP-Lite support IPv4/IPv6 multicast. Multicast services are not
+ considered by the IETF TAPS WG, but the currently specified
+ primitives are included for completeness in this appendix. Guidance
+ on the use of UDP and UDP-Lite for multicast services is provided in
+ the UDP Guidelines [RFC8085].
+
+ IP multicast may be supported by using the Any Source Multicast (ASM)
+ model or the Source-Specific Multicast (SSM) model. The latter
+ requires use of a Multicast Source Filter (MSF) when specifying an IP
+ multicast group destination address.
+
+ Use of multicast requires additional primitives at the transport API
+ that need to be called to coordinate operation of the IPv4 and IPv6
+ network-layer protocols. For example, to receive datagrams sent to a
+ group, an endpoint must first become a member of a multicast group at
+ the network layer. Local multicast reception is signaled for IPv4 by
+ the Internet Group Management Protocol (IGMP) [RFC3376] [RFC4604].
+ IPv6 uses the equivalent Multicast Listener Discovery (MLD) protocol
+ [RFC3810] [RFC5790], carried over ICMPv6. A lightweight version of
+ these protocols has also been specified [RFC5790].
+
+ The following are defined:
+
+ JoinHostGroup: Section 7.1 of "Host Extensions for IP Multicasting"
+ [RFC1112] provides a function that allows receiving traffic from
+ an IP multicast group.
+
+ JoinLocalGroup: Section 7.3 of "Host Extensions for IP Multicasting"
+ [RFC1112] provides a function that allows receiving traffic from a
+ local IP multicast group.
+
+ LeaveHostGroup: Section 7.1 of "Host Extensions for IP Multicasting"
+ [RFC1112] provides a function that allows leaving an IP multicast
+ group.
+
+ LeaveLocalGroup: Section 7.3 of "Host Extensions for IP
+ Multicasting" [RFC1112] provides a function that allows leaving a
+ local IP multicast group.
+
+ IPV6_MULTICAST_IF: Section 5.2 of the basic socket extensions for
+ IPv6 [RFC3493] states that this sets the interface that will be
+ used for outgoing multicast packets.
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 17]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ IP_MULTICAST_TTL: This sets the time-to-live field t to use for
+ outgoing IPv4 multicast packets. This is used to limit the scope
+ of multicast datagrams. Methods such as "The Generalized TTL
+ Security Mechanism (GTSM)" [RFC5082] set this value to ensure
+ link-local transmission. GTSM also requires the UDP receiver API
+ to pass the received value of this field to the application.
+
+ IPV6_MULTICAST_HOPS: Section 5.2 of the basic socket extensions for
+ IPv6 [RFC3493] states that this sets the hop count to use for
+ outgoing multicast IPv6 packets. (This is equivalent to
+ IP_MULTICAST_TTL used for IPv4 multicast.)
+
+ IPV6_MULTICAST_LOOP: Section 5.2 of the basic socket extensions for
+ IPv6 [RFC3493] states that this sets whether a copy of a datagram
+ is looped back by the IP layer for local delivery when the
+ datagram is sent to a group to which the sending host itself
+ belongs).
+
+ IPV6_JOIN_GROUP: Section 5.2 of the basic socket extensions for IPv6
+ [RFC3493] provides a function that allows an endpoint to join an
+ IPv6 multicast group.
+
+ SIOCGIPMSFILTER: Section 8.1 of the socket interface for MSF
+ [RFC3678] provides a function that allows reading the multicast
+ source filters.
+
+ SIOCSIPMSFILTER: Section 8.1 of the socket interface for MSF
+ [RFC3678] provides a function that allows setting/modifying the
+ multicast source filters.
+
+ IPV6_LEAVE_GROUP: Section 5.2 of the basic socket extensions for
+ IPv6 [RFC3493] provides a function that allows leaving an IPv6
+ multicast group.
+
+ The socket interface extensions for MSF [RFC3678] updates the
+ multicast interface to add support for MSF for IPv4 and IPv6 required
+ by IGMPv3. Section 3 defines both basic and advanced APIs, and
+ Section 5 describes protocol-independent versions of these APIs.
+ Four sets of API functionality are therefore defined:
+
+ 1. IPv4 Basic (Delta-based) API. "Each function call specifies a
+ single source address which should be added to or removed from
+ the existing filter for a given multicast group address on which
+ to listen."
+
+
+
+
+
+
+
+Fairhurst & Jones Informational [Page 18]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ 2. IPv4 Advanced (Full-state) API. "This API allows an application
+ to define a complete source-filter comprised of zero or more
+ source addresses, and replace the previous filter with a new
+ one."
+
+ 3. Protocol-Independent Basic MSF (Delta-based) API.
+
+ 4. Protocol-Independent Advanced MSF (Full-state) API.
+
+ It specifies the following primitives:
+
+ IP_ADD_MEMBERSHIP: This is used to join an ASM group.
+
+ IP_BLOCK_SOURCE: This MSF can block data from a given multicast
+ source to a given ASM or SSM group.
+
+ IP_UNBLOCK_SOURCE: This updates an MSF to undo a previous call to
+ IP_UNBLOCK_SOURCE for an ASM or SSM group.
+
+ IP_DROP_MEMBERSHIP: This is used to leave an ASM or SSM group. (In
+ SSM, this drops all sources that have been joined for a
+ particular group and interface. The operations are the same as
+ if the socket had been closed.)
+
+ Section 4.1.2 of the socket interface for MSF [RFC3678] updates the
+ interface to add IPv4 MSF support to IGMPv3 using ASM:
+
+ IP_ADD_SOURCE_MEMBERSHIP: This is used to join an SSM group.
+
+ IP_DROP_SOURCE_MEMBERSHIP: This is used to leave an SSM group.
+
+ Section 4.2 of the socket interface for MSF [RFC3678] defines the
+ Advanced (Full-state) API:
+
+ setipv4sourcefilter: This is used to join an IPv4 multicast group or
+ to enable multicast from a specified source.
+
+ getipv4sourcefilter: This is used to leave an IPv4 multicast group
+ or to filter multicast from a specified source.
+
+ Section 5.1 of the socket interface for MSF [RFC3678] specifies
+ Protocol-Independent Multicast API functions:
+
+ MCAST_JOIN_GROUP: This is used to join an ASM group.
+
+ MCAST_JOIN_SOURCE_GROUP: This is used to join an SSM group.
+
+ MCAST_BLOCK_SOURCE: This is used to block a source in an ASM group.
+
+
+
+Fairhurst & Jones Informational [Page 19]
+
+RFC 8304 UDP Transport Features February 2018
+
+
+ MCAST_UNBLOCK_SOURCE: This removes a previous MSF set by
+ MCAST_BLOCK_SOURCE.
+
+ MCAST_LEAVE_GROUP: This leaves an ASM or SSM group.
+
+ MCAST_LEAVE_SOURCE_GROUP: This leaves an SSM group.
+
+ Section 5.2 of the socket interface for MSF [RFC3678] specifies the
+ Protocol-Independent Advanced MSF (Full-state) API applicable for
+ both IPv4 and IPv6:
+
+ setsourcefilter: This is used to join an IPv4 or IPv6 multicast
+ group or to enable multicast from a specified source.
+
+ getsourcefilter: This is used to leave an IPv4 or IPv6 multicast
+ group or to filter multicast from a specified source.
+
+ The Lightweight IGMPv3 (LW_IGMPv3) and MLDv2 protocol [RFC5790]
+ updates this interface (in Section 7.2 of RFC 5790).
+
+Acknowledgements
+
+ This work was partially funded by the European Union's Horizon 2020
+ research and innovation programme under grant agreement No. 644334
+ (NEAT). Thanks to all who have commented or contributed, including
+ Joe Touch, Ted Hardie, Aaron Falk, Tommy Pauly, and Francis Dupont.
+
+Authors' Addresses
+
+ Godred Fairhurst
+ University of Aberdeen
+ School of Engineering
+ Fraser Noble Building
+ Fraser Noble Building Aberdeen AB24 3UE
+ United Kingdom
+
+ Email: gorry@erg.abdn.ac.uk
+
+
+ Tom Jones
+ University of Aberdeen
+ School of Engineering
+ Fraser Noble Building
+ Aberdeen AB24 3UE
+ United Kingdom
+
+ Email: tom@erg.abdn.ac.uk
+
+
+
+
+Fairhurst & Jones Informational [Page 20]
+