我需要知道我可以发送到另一台计算机而没有碎片的最大 UDP 数据包是多少。
此大小通常称为 MTU(最大传输单元)。据说,在两台计算机之间,将有许多路由器和调制解调器,它们可能具有不同的 MTU。
我读到 Windows 中的 TCP 实现会自动找到路径中的最大 MTU。
我也在试验,我发现从我的电脑到服务器的最大 MTU 是 57712 字节 + header 。上面的任何东西都被丢弃了。我的电脑在局域网上,MTU 不是应该在 1500 字节左右吗?
最佳答案
以下内容没有直接回答您的问题,但您可能会觉得它很有趣;它说 IP 数据包可以分解/重新组装,因此大于底层媒体的限制(例如 1500 字节以太网):Resolve IP Fragmentation, MTU, MSS, and PMTUD Issues with GRE and IPSEC
有关此主题的更多信息:
我不知道如何通过 Windows 上的 API 生成 ICMP:曾经提出过这样的 API,并且引起了争议,因为人们认为这可以通过生成大量ICMP 消息。
不,看起来它已经实现:例如参见 Winsock Programmer's FAQ Examples: Ping: Raw Sockets Method 。
因此,要发现 MTU,请生成带有“不分段”标志的 ping 数据包。
也许有比这更简单的 API,我不知道;但我希望我已经让你了解底层协议(protocol)[s]。
关于networking - 如何找到我可以在不分段的情况下发送的最大 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/900697/