UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。
UDP数据报封装成一份IP数据报的格式如图11 - 1所示。
RFC 768 [Postel 1980] 是UDP的正式规范。
UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。由于缺乏可靠性,我们似乎觉得要避免使用UDP而使用一种可靠协议如TCP。我们在第1 7章讨论完TCP后将再回到这个话题,看看什么样的应用程序可以使用UDP。
应用程序必须关心IP数据报的长度。如果它超过网络的M T U(2 . 8节),那么就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做(我们在2 . 9节中已定义了路径M T U的概念)。在11 . 5节中,我们将讨论IP分片机制。
UDP首部的各字段如图11 - 2所示。
端口号表示发送进程和接收进程。在图1 - 8中,我们画出了TCP和UDP用目的端口号来分用来自IP层的数据的过程。由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。
尽管相互独立,如果TCP和UDP同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。
UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是O K)。这个UDP长度是有冗余的。IP数据报长度指的是数据报全长(图3 - 1),因此UDP数据报长度是全长减去IP首部的长度(该值在首部长度字段中指定,如图3 - 1所示)。
UDP数据报封装成一份IP数据报的格式如图11 - 1所示。
RFC 768 [Postel 1980] 是UDP的正式规范。
UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。由于缺乏可靠性,我们似乎觉得要避免使用UDP而使用一种可靠协议如TCP。我们在第1 7章讨论完TCP后将再回到这个话题,看看什么样的应用程序可以使用UDP。
应用程序必须关心IP数据报的长度。如果它超过网络的M T U(2 . 8节),那么就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做(我们在2 . 9节中已定义了路径M T U的概念)。在11 . 5节中,我们将讨论IP分片机制。
UDP首部的各字段如图11 - 2所示。
端口号表示发送进程和接收进程。在图1 - 8中,我们画出了TCP和UDP用目的端口号来分用来自IP层的数据的过程。由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值),因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。TCP端口号与UDP端口号是相互独立的。
尽管相互独立,如果TCP和UDP同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。
UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是O K)。这个UDP长度是有冗余的。IP数据报长度指的是数据报全长(图3 - 1),因此UDP数据报长度是全长减去IP首部的长度(该值在首部长度字段中指定,如图3 - 1所示)。