传输层协议 UDP
- 一、UDP 协议段格式
- 二、再谈 UDP 特点
- 三、下期预告
一、UDP 协议段格式
源端口号:该字段是一个16 位的字段,表示发送方应用程序的端口号。
目的端口号:该字段与源端口类似,它也是一个16 位的字段,表示接收方应用程序的端口号。
长度:该字段指示UDP数据报文的总长度,包括 UDP 头部和数据部分。它是一个 16 位的字段,最小值为8 字节(UDP头部的大小),最大值为 65535 字节,也就是说一个 UDP 数据报的最大长度是 64 kb。
校验和:该字段用于校验 UDP 数据报文的完整性。校验和是一个 16 位的字段,由发送方计算得出,并且接收方会使用该字段进行校验。校验和的计算涉及到整个 UDP 数据报文(包括 UDP 头部和数据部分),以便检测任何数据的改动或传输中的错误。
数据:该字段存储了一个完整的应用层数据报。它的长度可以从长度字段中推导出来。数据部分可以为空,也可以包含任意长度的数据。
二、再谈 UDP 特点
无连接:UDP是一种无连接的协议。这意味着在数据传输之前,发送方和接收方之间不需要建立连接。每个UDP数据报文都是独立的,它们之间没有关联。因此,UDP通信具有低延迟和较少的开销。
不可靠:UDP不提供数据传输的可靠性。它没有重传机制或错误恢复机制,也不对数据包的丢失、重复、乱序进行处理。如果使用UDP进行数据传输,可能会出现丢包、丢失或损坏数据的情况。因此,UDP主要适用于对实时性要求高,但对数据可靠性要求相对较低的应用,如音视频传输和实时游戏。
面向数据报:UDP是一种面向数据报的协议。每个UDP数据包被视为一个独立的数据报文,有自己的起始地址和目标地址,并独立于其他数据报文。UDP不对数据流进行拆分或重组,保持了数据包的完整性。如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,每次接收10个字节。
全双工:UDP的 socket 既能读,也能写,支持双向通信。
UDP 缓冲区:UDP只有接收缓冲区,没有发送缓冲区。UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。
大小受限:UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是 64KB(包括UDP首部和数据)
三、下期预告
既然 UDP 不可靠,并且长度受限,那么如果需要可靠传输,并且传输长度大于64K的数据时我们该如何处理呢?这里就需要引入另一个更强大的传输层协议 TCP ,关于 TCP 我们下期详细介绍。敬请期待!