【发布时间】:2016-12-13 13:22:57
【问题描述】:
众所周知,UDP 不支持重传以及其他一些事情。
我们也知道像 MTU 这样的东西,它基本上以以下方式工作——当源点和目标点之间路径上的一个网络设备不支持某种大小的数据包时,它就会丢弃它。
在 TCP 的情况下,这不是问题——它在握手后已经知道 MSS 总是小于 MTU(对吗?),因此不可能发送大小大于 MTU 的数据包。
但是,我想知道在 UDP 的情况下它是如何工作的?正如我已经说过的,这个协议中没有重传,也没有像 MSS 这样的东西。那么当超过 MTU 导致丢包时会发生什么?
或者它只是因为 MTU 的性质而起作用(它实际上属于 IP 层,而不是像 UDP 或 TCP 这样的传输层协议)?那么 IP 层以更小的单元重构丢弃的数据包并再次发送?
【问题讨论】:
-
这就是 ICMP 的用途。由于 MTU 而丢弃数据包的路由器将向发送者发送 ICMP 错误消息。
-
@Ron Maupin 然后会发生什么?
-
您可以忽略该消息,也可以调整 MTU。我不确定您为什么如此担心 MTU。您将因拥塞和拥塞避免机制而丢失数据包。例如,RED(随机早期检测)将随机丢弃数据包以防止缓冲区被填满。完整的缓冲区只会丢弃进入其中的所有其他内容,这可能会导致 TCP 出现严重问题。
-
@Ron Maupin 我只是想知道这个级别的情况如何。所以它也适用于 UDP 数据包(不仅适用于 TCP),因为它属于 IP 层,对吧?那么 IP 层收到超过 MTU 大小的 ICMP 数据包并相应地对 TCP 或 UDP 消息进行重组?
-
如果路由器对数据包进行分段,它不会发送 ICMP 消息,因为它会转发分段。只有当路由器由于 MTU 问题而丢弃数据包时,它才会发送 ICMP 消息。路由器并不真正关心第 4 层协议,因为分段在第 3 层的 IPv4 中。可能数据包设置了DF位,路由器不会分片。
标签: networking tcp network-programming udp mtu