是否在每个节点都进行重组?

时间:2017-03-16 09:35:03

标签: ipv6 contiki

这个问题是在IoT协议栈,IPv6和Sicslowpan的背景下进行的。

在下图中,相邻节点处于彼此的无线电范围内,如最左侧节点所示。

enter image description here

如果我从节点1向节点4发送大数据包,那么将发生以下哪种情况?

  • 重新组合2,片段并前进至3;

    重新组合3,片段并前进到4;

    在4点重新组装。

  • 2& 3转发碎片并仅在4时重新组装。

我可以在哪个特定的RFC或可信文档中阅读更多相关信息?

1 个答案:

答案 0 :(得分:1)

简答:

IPV6确实支持碎片。您可以在RFC 2460 Section 5.4 Fragment Header

中找到详细信息

https://www.ietf.org/rfc/rfc2460.txt

在IPV6下,如果需要分段,则发送方必须执行此操作(节点1),最终接收方将重新组装它(节点4)。

更长的答案

我不确定Sicslowpan用于传输的内容(UDP,TCP,还有其它......),但这是IPV6通常会做的事情:

节点1尝试发送带有" large"的数据包。大小到节点4.该分组的大小大于段[(1,2),(2,3),(3,4)]之一的MTU。让我们说它对于段(2,3)来说太大了。

  • 节点1发送数据包,使其安全地跨越(1,2)到节点2.
  • 节点2尝试将数据包发送到节点3,并意识到(2,3)的MTU不支持数据包大小。
  • 节点2丢弃数据包并向节点1发送ICMP消息,让它知道该路由所需的MTU是什么。

此时,节点1更新MTU以获取将发送到节点4的流量。

发送方有责任处理因路由中MTU不匹配而丢弃的数据包。

如果节点1使用TCP或其他一些流协议,它可以更改传出数据包的大小以匹配MTU。任何丢弃的数据包都将由TCP协议重新传输。

如果节点1使用UDP或其他一些基于数据报的协议,它可能无法减小数据包大小,因此在发送数据包时必须对数据包进行分段。先前发送的数据包丢失,使用UDP的应用程序需要处理丢失。

这些数据包都应该进入节点4。

节点4将重新组装分段数据包。

请注意,沿路线的另一段(例如(3,4))可能具有更小的MTU。如果这是真的,那么这些片段也将被丢弃,另一个ICMP将与适当的MTU一起发送,节点1将需要再次更新。