UDP User Datagram Protocol 协议 RFC768

发布时间 2023-05-06 16:37:51作者: 秋来叶黄

相对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长度这些信息。