自从我在PDP / 11上进行套接字编程以来,IP分段将处理IP数据报(例如UDP数据报)大于段允许的MTU的情况。 / p>
因此,我可以发送一个大小为30 kB的UDP数据报,它可能会在以太网上分割成20个1.5 kB的段,然后将每个段分成三段<576字节以后用于某些特定的无线链路,并且只要所有片段都到达另一端,UDP数据报就会到达另一端。
然后,我在node.js中找到了UDP套接字的文档,声称路由器将丢弃不符合下一个段的MTU的数据报。我认为这只是数据报的情况,标题中设置了“do not fragment”位,但鉴于node.js应该是一个在网络圈中具有一定可信度的高质量产品,我想知道我是否错过了什么,许多路由器现在将所有数据报视为“不碎片?”
这是链接: http://nodejs.org/api/dgram.html#dgram_socket_send_buf_offset_length_port_address_callback
这是引用:
generally sending a datagram greater than the (receiver) MTU
won't work (the packet gets silently dropped, without informing
the source that the data did not reach its intended recipient).
那么,我是否遗漏了某些内容,或者node.js文档是否需要更新?
答案 0 :(得分:4)
您对IPv4的理解是正确的。在这里他们可能会谈论接收器MTU即。链路接收端的MTU。可以为每个端口配置MTU。链接是两个端口之间的连接。例如。在以太网中,你可能有一个像这样的错误配置的局域网
PORT-A(mtu 1000)&lt; ----------&gt; PORT-B(mtu 800)
在这种情况下,发送方(端口A)将认为链路的MTU必须与其上配置的MTU匹配,因此将发送大小为1000字节的数据包。当端口B收到数据包时,它很可能会丢弃它,因为它大于该端口上配置的MTU。
答案 1 :(得分:0)
所以,事实证明答案更加微妙。 碎片仍然是IPv4的一部分,并且在很大程度上得到了互联网的支持。 IPv6删除了碎片,而是推迟到应用程序进行MTU发现。 因此,让我质疑我的假设的文档说明并没有那么“错误”,因为它“生活在未来的某种程度上,大多数人已经转向IPv6。”