0%

UDP

UDP 协议仅仅在提供了复用/分解功能和少量的差错检验

1. UDP 报文结构

1
2
3
4
5
6
7
8
9
10
// 代码示例,真正报文结构为二进制
type struct udp {
// header
source_port int16 //源端端口
target_port int16 //目的端口
length int16 //长度
checksum int16 //检验和
// body
data any
}

头部共四个字段,每个字段由两个字节组成,共计 8 个字节

2. UDP 检验和

计算检验和时,加入伪头部

1
2
3
4
5
6
7
type struct udp_virtual_header {
source_ip int32
target_ip int32
_ int8
udp_type int8
udp_length int16
}

将伪头部和报文中所有 16bit 字(2Byte)相加,data 最后不足 16bit 补零。溢出位回卷(回卷:溢出位和 16bit 相加),然后进行反码运算。
在校验时,将伪头部和报文中所有 16bit 字相加,和为 1111111111111111 则校验成功,反之失败,说明报文受损。

3. UDP 相对于 TCP 的优势

  • 没有拥塞控制,更适合及时性质的传输
  • 无需建立连接,相比于 TCP 有更低的时延
  • 无状态连接,无需像 TCP 一般维护连接的参数(例如:接受和发送缓存、拥塞控制参数、序号和确认号等)
  • 首部开销更小,UDP 头部 8Byte, TCP 首部 20Byte