ICMP IPv6数据包的最大大小

时间:2013-03-15 14:00:35

标签: boost-asio ipv6 ping icmp

参考this问题和ASIO libary,我想知道ICMP v6回复数据包的最大大小是多少。我正在使用ASIO库来监听和接收ICMPv6数据包,但我不知道使用什么大小的缓冲区来防止缓冲区溢出。我对IPv6支持扩展标题感到困惑。

Ex代码:

asio::streambuf replyBuffer;
replyBuffer.consume(replyBuffer.size());
size_t length = icmpV6Socket->receive(replyBuffer.prepare(65536) );

1 个答案:

答案 0 :(得分:6)

Boost.Asio的buffers的一个重要特性是它们可以防止缓冲区溢出。 Boost.Asio的缓冲区将实际内存和大小的句柄组合在一起。因此,只要正确设置或推导出大小,Boost.Asio操作就不会产生缓冲区溢出。

尽管如此,ICMPv6尺寸的详细信息如下。 IPv6 Header是40个字节,并保留2个字节来表示有效载荷长度。因此,IPv6的最大有效负载(包括扩展头)为65,535。这与IPv4不同,其中总长度包括标题本身。 ICMPv6 Echo Reply header是8个字节。

因此:

  • 最大IPv6数据包为65,575字节(最大有效负载为65,535 +标头为40)。
  • 最大IPv6有效负载为65,535字节。
  • 最大ICMPv6 Echo Reply主体为65,527字节。 (最大有效载荷为65,535 - ICMPv6 Echo Reply Header of 8)。