それでは実際のIPv6パケットの例を見てみよう。まずは、一番シンプルな、TCP通信中のパケットの例である。
中央下のペインにプロトコルの階層が表示されているが、イーサネット・フレームの次にIPv6→TCP→HTTPと階層化されているのが分かるだろう。IPv6ヘッダが40bytesあるが、TCPやHTTPプロトコルはIPv4の場合と違いはない。
UDPの場合は次のようになる。これはIPv6版のDHCPプロトコルの例である。
プロトコル階層は、イーサネット→IPv6→UDP→DHCPv6Clientとなっている。UDPやDHCPの内容はIPv4の場合と同じだ(ただしDHCPパケットの中はIPv6向けに少し異なっている)。
次はICMPv6の例を見てみよう。次のコマンドは、IPv6のプロトコル・スタックがほかのノードを検索するときに送信される、ICMPv6の「Neighbor Solicitation」メッセージの例だ(IPv4のICMPとARPを併せたような機能を持つ。詳細は本連載の第3回を参照)。
IPv4では、ICMP(やARP)は、IPとは異なるプロトコル番号を持つパケットであったが、IPv6では同じIPv6ヘッダを持ち、その中でTCPやUDP、ICMPなどに分かれている。そのため、例えばファイアウォールを設定する場合は、IPv6プロトコル1つをブロックするだけで、(ICMPv6を含む)IPv6関連の全プロトコルを禁止できる。
次はイーサネットの1フレームに入りきらないくらい大きなパケットをやり取りしてみよう。「ping -6 -l 4000 SVR1」を実行すると(「-6」はIPv6での通信を強制するオプション)、次のように、1回のpingごとに、3つのICMPv6パケットが送信され、3つ揃った時点でそれらがやはり3つのパケットに分割されて送り返されてくる。
1つのIPv6パケットに入りきらないので、フラグメントが行われている。フラグメントの拡張ヘッダが使用されているので、IPv6の基本ヘッダ中のネクスト・ヘッダ・フィールドには「IPv6 Fragment header(タイプ=44)」がセットされている。
今回は、IPパケットの構造とその例を見てきた。IPv4よりもパケット構造が単純化されているので、慣れればこちらの方が分かりやすいかもしれない。ネットワーク・プロトコルを理解したり、その挙動を調べたりするには、実際に稼働しているネットワークを調査するのが一番である。ネットワーク・モニタやWiresharkなどのツールを駆使して(関連記事参照)、パケットをキャプチャしてどんどんモニタしていただきたい。Windows OSでIPv6を使うように設定していなくても、すでに多くのIPv6パケットがネットワーク上で送受信されていることが分かるだろう。
次回は、L2アドレスを解決するIPv6の近隣探索機能について取り上げる。
■関連記事(Windows Server Insider)
Copyright© Digital Advantage Corp. All Rights Reserved.
Windows Server Insider 記事ランキング