UDP信息包由UDP标题和数据组成。UDP的标题结构如图15-21所示,它由5个域组成:源端端口(SourcePort)、目的地端口(DestinationPort)、用户数据包的长度(Length)和检查和(Checksum)。其中,前4个域组成UDP标题(UDPheader),每个域由4个字节组成;检查和域占据2个字节,它用来检测传输过程中是否出现了错误;用户数据包的长度包括所有5个域的字节数。
检查和的详细计算可在RFC1071中找到,现举一例说明使用检查和检测错误的道理。例如,假设从源端A要发送下列3个16位的二进制数:word1,word2和word3到终端B,检查和计算如下:
word1 | 0110011001100110 |
word2 | 0101010101010101 |
word3 | 0000111100001111 |
sum=word1+ word2+ word3 | 1100101011001010 |
检查和(sum的反码) | 0011010100110101 |
许多链路层 协议都提供错误检查,包括流行的 以太网 协议,读者也许想知道为什么 UDP也要提供检查和。其原因是链路层以下的 协议在源端和终端之间的某些通道可能不提供错误检测。虽然 UDP提供有错误检测,但检测到错误时, UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。
读者也可能会问,收发两端的两个进程是否有可能通过 UDP提供可靠的数据传输?答案是可以的。但必需要把确认和重传措施加到应用程序中,应用程序不能指望 UDP来提供可靠的数据传输。