UDP协议原理
传输层协议之一
概念
基础:
UDP 是一种无连接的、面向数据报的协议,属于传输层协议。
它在网络上发送数据包(即数据报),每个数据包都独立处理,没有建立连接的过程。
- 因为
udp
的报头中就直接包含了报文的长度,而tcp
的报头中则没有包含,因为它是面向数据流的。
- 因为
UDP提供了一种快速且简单的方式来发送数据,但它不保证数据包的顺序、可靠性或数据包的完整性。
16
位UDP长度,说明其容量最大为2^16
bit,即64kb
。报头就被存储在一个自定义结构体中。
源端口号:发送方的端口号。
目标端口号:接收方的端口号。
长度:整个 UDP 报文的长度(包括报头和数据)。
校验和:用于检验数据的完整性。
sk_buff(Socket Buffer)
- Linux 内核中的一个数据结构,用于管理和存储网络数据包的缓冲区。例如暂存接收到的
UDP
报文。
解释:
无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接。
不可靠: 没有确认机制, 没有重传机制。如果因为网络故障该段无法发到对方,
UDP
协议层也不会给应用层返回任何错误信息。- UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了, 再到达的UDP数据就会被丢弃。
面向数据报: 不能够灵活的控制读写数据的次数和数量。
每个数据报都是一个独立的消息。
应用层交给
UDP
多长的报文, UDP原样发送, 既不会拆分, 也不会合并。在应用程序调用 sendto() 或 sendmsg() 等函数时,数据首先会被复制到操作系统的 UDP 发送缓冲区中,等待被传送到网络上。
UDP的
缓冲区仅仅是暂存数据。如果缓冲区已满,那数据可能会被丢弃。
UDP的socket既能读, 也能写, 这个概念叫做
全双工
。
UDP协议原理
https://weihehe.top/2024/08/31/UDP协议原理/