UDP数据报文格式
伪首部(pseudo header)
通常有TCP伪首部和UDP伪首部。在UDP/TCP伪首部中,包含:
- 32位源IP地址。
- 32位目的IP地址。
- 8位填充0。
- 8位协议。
- 16位UDP长度(IP数据报长度)。
伪首部并非TCP&UDP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。
首部
- 源端口:源端口号。在需要对方回信时选用,不需要时可用全0。
- 目的端口:目的端口号。这在终点交付报文时必须要使用到。
- 长度: UDP数据报的长度,其最小值是8字节(因为头部是8字节)。
- 检验和:每16位取反码求和,字节数为奇数则补8位0,检测UDP用户数据报在传输中是否有错。有错就丢弃。校验和包括:伪首部、首部、数据。
校验和 反码求和过程
以4bit 为例
发送端计算:
数据: 1000 0100 校验和 0000
则反码:0111 1011 1111
叠加: 0111+1011+1111 = 0010 0001 高于4bit的, 叠加到低4位 0001 + 0010 = 0011 即为校验和
接收端计算:
数据: 1000 0100 检验和 0011
反码: 0111 1011 1100
叠加: 0111 + 1011 +1100 = 0001 1110 叠加为4bit为1111. 全为1,则正确
UDP协议的特点
- 面相无连接。
- 尽最大努力交付,不保证可靠,不控制堵塞。
- 面相报文(数据包),没有拥塞控制,适合多媒体通信。
- 支持1对1,1对多,多对多通信。
- 首部开支小,只有8字节。