[TOC] 除去数据的部分正式UDP的首部。UDP首部由源端口号,目标端口号,包长和校验和组成。 ![](https://leanote.com/api/file/getImage?fileId=59771b35ab644135b4001982) ## 源端口号(Source Port) 表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。 ## 目标端口号(Destination Port) 表示接收端端口,字段长度16位。 ## 包长度(Length) 该字段保存了UDP首部的长度跟数据的长度之和。单位为字节(8位字节)。 ## 校验和(Checksum) UDP的校验和包含UDP数据包中所有数据和一个伪头部以及将UDP数据包补足16BIT的整数倍的一个全为0的8BIT字。 计算校验和时,UDP协议先构造一个伪头部(该头部在发送时并不存在),然后将UDP数据包的校验和字段设置为0并连接到伪头部后,将UDP数据包长度补足为16BIT的整数倍,然后按IP协议校验和的计算方法对这个新结构计算校验和并填入校验和字段。UDP伪头部和长度补足部分不会进行传输,其长度也不包含在UDP数据包长度字段内。 ![](https://leanote.com/api/file/getImage?fileId=5977300eab64413383001b8c) 其中包含源和目的IP地址,协议代码为UDP协议的代码17。长度字段就是UDP数据包的UDP包长度字段值。 UDP伪头部目的是为了让数据包接受者确定发送和接受的UDP数据包是来自正确的源且是发给自己的。由于UDP结构中只包含了源和目的的UDP端口号,而且没有IP地址信息,所以使用伪头部结构来计算校验和以确定数据包的正确性。 > 校验和计算中计算UDP伪首部的理由 TCP/IP中识别一个通信的应用需要5大要素,它们分别是“源IP地址”、“目标IP地址”、“源端口”、“目标端口”、“协议号”。然而,在UDP的首部中只包含它们当中的两项(源端口和目标端口),余下的3项都包含在IP首部里。 假定其他3项都被破坏?显然,这极有可能会导致应该收包的应用收不到包,不该收到包的应用却收到了包。 为了避免这类问题,有必要验证一个通信中必要的5项识别码是否正确。为此,在校验和的计算中就引入和伪首部的概念。 此外,IPv6中的IP首部没有检验和字段。TCP和UDP通过伪首部,得以对5项数字进行校验,从而实现即使在IP首部并不可靠的情况下仍然能够提供可靠的通信传输。