我需要知道我可以发送到另一台计算机而没有碎片的最大 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

有关此主题的更多信息:

  • Re: UDP fragmentation 说你应该使用 ICMP 而不是 UDP 来发现 MTU
  • Path MTU Discovery 表示 TCP 连接可能包括通过 ICMP
  • 的隐式 MTU 协商

    我不知道如何通过 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/

    10-16 18:35