UDP User Datagram Protocol 协议 RFC768
相对TCP,UDP更简单,UDP只需要传递数据,不需要建立链接,不保证顺序,没有重传(也就是数据丢了就丢了),没有拥塞控制。
虽然UDP本身看上去是不可靠的,但是我们可以在上一层(应用层)自己控制,编写逻辑来维护其可靠性。
UDP一般用作网络音视频流、网络电话视频会议等。因为这些场景的特点是偶尔丢失数据是可以接受的,不影响应用使用。
由于UDP的简单,所以包头更少,传输效率更高,并且没有TCP的ACK机制,也会减少相应开销。
协议头
|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
| Source port | Destination port |
| Length | Checksum |
| Data |
Source port 源端口 16bit
发送方端口
Destination port 目的端口 16bit
接收方端口
Length 数据长度 16bit
包括头和数据总共的长度,表示多少个字节。所以一个UDP数据包最小长度应该是8,表示有8个字节,8x8=64bit,正好保存一个完整的头。
Checksum 校验码 16bit
这个校验码是对一个伪头部,加上UDP完整的数据(头部和数据)进行校验,如果数据有填充,也要算上。伪头部就是从上一层(IP层)获得的一些数据。
Pseudo header 伪头部
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| source address |
+--------+--------+--------+--------+
| destination address |
+--------+--------+--------+--------+
| zero |protocol| UDP length |
+--------+--------+--------+--------+
伪头部包含了,源地址、目的地址、填充、协议、UDP长度这些信息。