2

この質問とASIO ライブラリを参照して、ICMP v6 応答パケットの最大サイズを知りたいです。ASIO ライブラリを使用して ICMPv6 パケットをリッスンおよび受信していますが、バッファ オーバー フローを防ぐために使用するバッファのサイズがわかりません。拡張ヘッダーをサポートする IPv6 に混乱しています。

例コード:

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

1 に答える 1

6

Boost.Asio のバッファの優れた機能の 1 つは、バッファ オーバーランに対する保護を提供することです。Boost.Asio のバッファは、実際のメモリとサイズへのハンドルを組み合わせます。したがって、サイズが適切に設定または推定されている限り、Boost.Asio 操作によってバッファ オーバーランが発生することはありません。

それにもかかわらず、ICMPv6 サイズの詳細は次のとおりです。 IPv6 ヘッダーは 40 バイトで、ペイロード長を表すために 2 バイトが予約されています。したがって、拡張ヘッダーを含む IPv6 の最大ペイロードは 65,535 です。これは、合計長にヘッダー自体が含まれていた IPv4 とは異なります。ICMPv6 Echo Reply ヘッダーは8 バイトです。

したがって:

  • 最大 IPv6 パケットは 65,575 バイトです (最大ペイロード 65,535 + ヘッダー 40)。
  • 最大 IPv6 ペイロードは 65,535 バイトです。
  • 最大 ICMPv6 Echo Reply 本文は 65,527 バイトです。(最大ペイロード 65,535 - ICMPv6 エコー応答ヘッダー 8)。
于 2013-03-15T20:10:16.577 に答える