一、前言
UDP协议提供端到端的数据传输。
UDP是基于流的协议,没有消息边界。
IPv4协议字段用17表示UDP协议。
端口号用于在传输层协议(如TCP、UDP中标识不同的应用程序,以确保数据包能够正确地路由到目标应用程序,对从IP层进入的数据进行分离到特定协议。
端口是数字,通常是2字节(0-65535),每个协议有多个端口。
端口是抽象的,不与主机上的任何物理实体相关。
二、重要字段
头部
源端口号、目的端口号:都是2字节。
长度:单位是字节。在UDP中这是一个多余的字段,因为IP数据报中有长度字段。
校验和:UDP中的校验和覆盖的是IP层的源IP,目的IP,和UDP的整个头部。UDP的校验也是只能判断是否发送到正确目的地。一般在传送过程中不会修改,除非经过NAT。(而IP数据报的校验和每一跳都会变,因为TTL减少)
有效荷载
三、UDP-Lite
UDP的校验和要么不用,要么就把目的IP和源IP一起包含,太极端。UDP-Life修改传统UDP,只覆盖部分字段。
四、最大UDP数据报长度
理论上IPv4的UDP数据报最大长度位65507字节,但是实际场景会有各种各样的限制。(如UDP套接字可以设置大小,并且有自己的默认最大长度)
五、数据报截断
UDP数据报长度大不意味着一定会被读完,编程接口允许指定最大读取长度,超过这个长度将进行数据报截断,多余的数据报丢弃或者留给拼接到下个数据报。
六、限制本地IP地址
通常,服务器上的任何网络接口(任何IP地址)都可以接收到目的地是该服务器某端口的UDP数据报。然而,有一些IP用作保留,或只限定在本地网络使用,这种情况下,我们需要对本地IP进行限制。
当服务器建立一个端点时,我们指定一个主机的本地IP地址作为这个端点的IP,只有UDP数据报以这个指定的IP地址作为目的IP时,这个UDP数据报才会被转到这个端点。这样就让一些特殊的IP地址不被暴露在互联网中。
七、限制远端IP地址
通常,端点会让任何IPv4地址和任何端口的UDP数据报进入(只要它的目的IP正确)。
我们可以让端点只接受来自指定IPv4地址和端口号的UDP数据报。实际场景:一旦服务器收到了某个客户机的流量,就会立刻加上这个限制,过滤掉来自其他客户机的流量。
有一些小疑问,见《TCP/IP详解 卷1》356~357页的内容