【Linux 网络】深入理解 UDP

问题:什么是协议?

答:客户端和服务端约定的结构化字段;

问题:报头和有效载荷怎么分离?

16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度;

如果校验和出错,就会直接丢弃;

答:UDP 报头的长度是固定的 8 个字节,剩下的就是有效载荷;

分用问题:如何把报文交给上层,如何返回?

答:交给上层:根据目的端口号,返回:通过源端口号;

为什么说 UDP 是面向数据报的?

答:udp 的长度是 udp 层填写的报文的总长度,根据这个长度减去8个字节剩下的就是有效载荷,有效载荷的总长度 = udp 的长度 - 8个字节,那么报头就是完整的,向上交付,否则丢弃;所以 UDP 不存在粘包问题;

理解什么是报文?

答:如果有大量的客户端访问服务器,此时服务器的OS一定会存在多个 "报文" ,不同的层也一定会同时存在多个报文;这么多的报文 OS 就要对这些报文进行管理(先描述再组织),使用一个结构体来描述报文:sk_buff:

假设我们是从应用层形成报文的,所以一开始向传输层进行交付的时候,OS 就会创建一个 sk_buff 结构体来描述该报文,并且开辟一个缓冲区:数据区;一开始 data 指针指向的 TCP 协议的下面所以此时会把报文放到到应用层数据,所以此时如果是 UDP 通信,此时 datat 指针减去 UDP/TCP 报头的大小此时 data 就会指向 UDP 协议头的上面,此时把 data 指针强转成对应协议结构体的指针类型,此时就可以往对应的协议填写对应协议的数据;所以 data 指针往上移动的过程就是封装;那么拆包就是 data 指针往下移动的过程;

UDP 的特点:

无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;

不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;

面向数据报:不能够灵活的控制读写数据的次数和数量;

UDP 的缓冲区:

UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃;

相关推荐
Trouvaille ~8 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
liann1198 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
芷栀夏8 小时前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
独行soc8 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
辣香牛肉面8 小时前
Wireshark v4.6.2 开源免费网络嗅探抓包工具中文便携版
网络·测试工具·wireshark
全栈工程师修炼指南8 小时前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
极新8 小时前
智启新篇,智创未来,“2026智造新IP:AI驱动品牌增长新周期”峰会暨北京电子商务协会第五届第三次会员代表大会成功举办
人工智能·网络协议·tcp/ip
M158227690559 小时前
TCP转LORA产品说明及应用案例
网络·网络协议·tcp/ip
旖旎夜光9 小时前
Linux(13)(中)
linux·网络
来可电子CAN青年9 小时前
CAN总线远距离传输老断网?Fx灯不闪别慌,这几招让你的通信“稳如泰山”!
网络