gpt4 book ai didi

linux - UDP IP 分段和 MTU

转载 作者:IT王子 更新时间:2023-10-29 00:25:31 24 4
gpt4 key购买 nike

我试图了解我在发送 UDP 数据包的上下文中看到的一些行为。

我有两个小的 Java 程序:一个传输 UDP 数据包,另一个接收它们。我在通过单个交换机连接的两台计算机之间的网络上本地运行它们。

两个网络适配器上的 MTU 设置(由/sbin/ifconfig 报告)都是 1500。

  • 如果我发送大小小于 1500 的数据包,我会收到它们。预期。
  • 如果我发送 1500 < 大小 < 24258 的数据包,我会收到它们。预期的。我已通过 wireshark 确认 IP 层正在将它们分段。
  • 如果我发送大小大于 24258 的数据包,它们就会丢失。 未预期。当我在接收端运行 wireshark 时,我没有看到任何这些数据包。

我能够通过 ping -s 看到类似的行为。

ping -s 24258 hostA 有效但是

ping -s 24259 hostA 失败。

有没有人知道可能发生了什么,或者知道我应该寻找什么?

两台计算机都运行 CentOS 5 64 位。我使用的是 1.6 JDK,但我真的不认为这是编程问题,而是网络或操作系统问题。

最佳答案

IP 协议(protocol)的实现不需要能够处理任意大的数据包。理论上,最大可能的 IP 数据包大小为 65,535 个八位字节,但标准仅要求实现至少支持 576 个八位字节。

看起来您的主机实现支持的最大大小远大于 576,但仍远小于最大理论大小 65,535。 (我认为交换机应该不是问题,因为它不需要进行任何碎片整理——它甚至不在 IP 层运行)。

IP 标准进一步建议主机不要发送大于 576 字节的数据包,除非它们确定接收主机可以处理更大的数据包。您也许应该考虑是否让您的程序发送较小的数据包会更好。 24,529 对我来说似乎太大了。我认为很多主机可能无法处理那么大的数据包。

请注意,这些数据包大小限制完全独立于 MTU(数据链路层协议(protocol)支持的最大帧大小)。

关于linux - UDP IP 分段和 MTU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3712151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com