|
The User Datagram Protocol
|
|
The User Datagram Protocol (UDP) is defined in :rfc:`768`. It provides an unreliable connectionless transport service on top of the unreliable network layer connectionless service. The main characteristics of the UDP service are :
|
|
the UDP service cannot deliver SDUs that are larger than 65467 bytes [#fmtuudp]_
|
|
the UDP service does not guarantee the delivery of SDUs (losses can occur and SDUs can arrive out-of-sequence)
|
|
the UDP service will not deliver a corrupted SDU to the destination
|
|
Compared to the connectionless network layer service, the main advantage of the UDP service is that it allows several applications running on a host to exchange SDUs with several other applications running on remote hosts. Let us consider two hosts, e.g. a client and a server. The network layer service allows the client to send information to the server, but if an application running on the client wants to contact a particular application running on the server, then an additional addressing mechanism is required other than the IP address that identifies a host, in order to differentiate the application running on a host. This additional addressing is provided by `port numbers`. When a server using UDP is enabled on a host, this server registers a `port number`. This `port number` will be used by the clients to contact the server process via UDP.
|
|
The figure below shows a typical usage of the UDP port numbers. The client process uses port number `1234` while the server process uses port number `5678`. When the client sends a request, it is identified as originating from port number `1234` on the client host and destined to port number `5678` on the server host. When the server process replies to this request, the server's UDP implementation will send the reply as originating from port `5678` on the server host and destined to port `1234` on the client host.
|
|
UDP uses a single segment format shown in the figure below.
|
|
UDP Header Format
|
|
The UDP header contains four fields :
|
|
a 16 bits source port
|
|
a 16 bits destination port
|
|
a 16 bits length field
|
|
a 16 bits checksum
|
|
As the port numbers are encoded as a 16 bits field, there can be up to only 65535 different server processes that are bound to a different UDP port at the same time on a given server. In practice, this limit is never reached. However, it is worth noticing that most implementations divide the range of allowed UDP port numbers into three different ranges :
|
|
the privileged port numbers (1 < port < 1024 )
|
|
the ephemeral port numbers ( officially [#fephemeral]_ 49152 <= port <= 65535 )
|
|
the registered port numbers (officially 1024 <= port < 49152)
|
|
In most Unix variants, only processes having system administrator privileges can be bound to port numbers smaller than `1024`. Well-known servers such as :term:`DNS`, :term:`NTP` or :term:`RPC` use privileged port numbers. When a client needs to use UDP, it usually does not require a specific port number. In this case, the UDP implementation will allocate the first available port number in the ephemeral range. The range of registered port numbers should be used by servers. In theory, developers of network servers should register their port number officially through IANA [#fportnum]_, but few developers do this.
|
|
Computation of the UDP checksum
|