networking - 为什么 UDP 的数据包中有两次 "UDP Length"字段?

标签 networking udp network-protocols

为什么 UDP 的数据包中有两次“UDP Length”字段?不是多余的吗?如果需要进行某种错误检查,请提供示例。

最佳答案

您的观察是正确的。长度字段是多余的,因为 IP 头和 UDP 头都有长度字段。我对这种冗余原因的唯一猜测是,它的发生是因为 UDP 是在当时设计的,当时还不清楚 IP 协议(protocol)套件会是什么样子。

所有合法的 UDP 数据包都应该有一个长度字段,该长度字段与可以从 IP header 中的长度字段导出的内容完全匹配。如果不这样做,就无法确定接收方将如何处理数据包。

长度字段不一致的UDP数据包在互联网上随处可见。我猜他们正在探测缓冲区溢出,如果一个长度字段用于分配内存而另一个长度字段用于将数据复制到分配的缓冲区,则可能会发生这种情况。

在较新的 UDP Lite 协议(protocol)中,长度字段已被重新利用。 UDP Lite header 中的长度字段并不指示数据包中有多少数据,而是指示校验和涵盖了多少数据。 UDP Lite 数据包中的数据长度始终根据 IP header 中的长度字段计算得出。这是 UDP 和 UDP Lite header 格式之间的唯一区别。

关于networking - 为什么 UDP 的数据包中有两次 "UDP Length"字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182362/

相关文章:

python - UDP python 到 c 打包的二进制数据 - struct.pack ('<ff' ,

sockets - ios6.0.1 recvfrom始终在iPhone上阻止

c++ - 通过套接字修改数据包大小

linux - Dummynet 与流不匹配

python - Python 中的雅虎聊天

node.js - Nodejs - UDP 如何检测已绑定(bind)的端口

Android没有手机信号有异常吗?

Python TCP 栈实现

linux - 查找 TCP 连接的瓶颈

linux - 如何启用远程连接才能使用 PostgreSQL?