2.3 User Datagram Protocol (UDP)
UDP is a simple transport-layer protocol. It is
described in RFC 768 [Postel 1980]. The application writes a
message to a UDP socket, which is then encapsulated in a UDP datagram, which is then further encapsulated
as an IP datagram, which is then sent to its destination. There is
no guarantee that a UDP datagram will ever reach its final
destination, that order will be preserved across the network, or
that datagrams arrive only once.
The problem that we encounter with network
programming using UDP is its lack of reliability. If a datagram
reaches its final destination but the checksum detects an error, or
if the datagram is dropped in the network, it is not delivered to
the UDP socket and is not automatically retransmitted. If we want
to be certain that a datagram reaches its destination, we can build
lots of features into our application: acknowledgments from the
other end, timeouts, retransmissions, and the like.
Each UDP datagram has a length. The length of a
datagram is passed to the receiving application along with the
data. We have already mentioned that TCP is a byte-stream protocol, without any record
boundaries at all (Section 1.2), which
differs from UDP.
We also say that UDP provides a connectionless service, as there need not be
any long-term relationship between a UDP client and server. For
example, a UDP client can create a socket and send a datagram to a
given server and then immediately send another datagram on the same
socket to a different server. Similarly, a UDP server can receive
several datagrams on a single UDP socket, each from a different
client.
|