連載
» 2012年01月05日 00時00分 公開

Windows管理者のためのIPv6入門:第2回 IPv6パケットの構造を知る (2/2)

[打越浩幸,デジタルアドバンテージ]
前のページへ 1|2       

例1―単純なTCPやUDPの通信パケットの例

 それでは実際のIPv6パケットの例を見てみよう。まずは、一番シンプルな、TCP通信中のパケットの例である。

IPv6のTCPパケットの例
これは、Network Monitor 3.4でIPv6のTCP通信の様子をキャプチャしたところ。いったん通信相手との接続が完了すれば、下位レイヤがIPv4からIPv6になるだけで、TCPやHTTPレイヤのプロトコルの内容は変わらない。
 (1)IPv6の通信だけをキャプチャしたり、表示したりするには、「IPv6」というキーワードだけが記述されたフィルタを設定すればよい。Wireshark(フリーのネットワーク・プロトコル・アナライザ)でも同じく、IPv6というキーワードでIPv6通信だけをフィルタできる。
 (2)IPv6のヘッダの内容を見るにはこれを選択・展開する。
 (3)先頭の「0110」がIPv6パケットを表す。残りの部分はフラグやフロー・ラベル。このパケットではすべて0になっている。
 (4)IPv6ヘッダを除く、TCPやHTTPプロトコル部分のサイズ。
 (5)IPv6基本ヘッダの次には、TCPプロトコルが続いている。
 (6)ホップ数の初期値は128。この場合は128段以上のルーティングはできない。
 (7)あて先と送信元のIPv6アドレス。どちらもリンクローカル・ユニキャスト・アドレス。
 (8)上位プロトコル。
 (9)この40bytesがIPv6基本ヘッダ部分。その直後にはTCPが続いている。

 中央下のペインにプロトコルの階層が表示されているが、イーサネット・フレームの次にIPv6→TCP→HTTPと階層化されているのが分かるだろう。IPv6ヘッダが40bytesあるが、TCPやHTTPプロトコルはIPv4の場合と違いはない。

 UDPの場合は次のようになる。これはIPv6版のDHCPプロトコルの例である。

IPv6のUDPパケットの例
これはIPv6のUDP(DHCPv6)通信のパケットをキャプチャしたところ。
 (1)IPv6のヘッダの内容を見るにはこれを選択・展開する。
 (2)IPv6基本ヘッダの次には、UDPプロトコルが続いている。
 (3)上位プロトコルはUDPで、その上にはDHCPv6が載っている。

 プロトコル階層は、イーサネット→IPv6→UDP→DHCPv6Clientとなっている。UDPやDHCPの内容はIPv4の場合と同じだ(ただしDHCPパケットの中はIPv6向けに少し異なっている)。

例2―単純なICMPv6のパケットの例

 次はICMPv6の例を見てみよう。次のコマンドは、IPv6のプロトコル・スタックがほかのノードを検索するときに送信される、ICMPv6の「Neighbor Solicitation」メッセージの例だ(IPv4のICMPとARPを併せたような機能を持つ。詳細は本連載の第3回を参照)。

IPv6のICMPパケットの例
IPv6では、ICMP(やIPv6のARPのような機能)はIPv6では1つのプロトコルに統合されている。
 (1)IPv6のヘッダの内容を見るにはこれを選択・展開する。
 (2)IPv6基本ヘッダの次には、ICMPv6プロトコルが続いている。

 IPv4では、ICMP(やARP)は、IPとは異なるプロトコル番号を持つパケットであったが、IPv6では同じIPv6ヘッダを持ち、その中でTCPやUDP、ICMPなどに分かれている。そのため、例えばファイアウォールを設定する場合は、IPv6プロトコル1つをブロックするだけで、(ICMPv6を含む)IPv6関連の全プロトコルを禁止できる。

例3―フラグメント・パケットの例

 次はイーサネットの1フレームに入りきらないくらい大きなパケットをやり取りしてみよう。「ping -6 -l 4000 SVR1」を実行すると(「-6」はIPv6での通信を強制するオプション)、次のように、1回のpingごとに、3つのICMPv6パケットが送信され、3つ揃った時点でそれらがやはり3つのパケットに分割されて送り返されてくる。

IPv6のフラグメント・パケットの例
これは「ping -6 -l 4000 SVR1」を実行して、相手ノードから応答が返ってきたところ。イーサネットのフレームサイズは約1500bytesだが、それを超えているので、3つのパケットに分割されて(フラグメント化されて)返ってくる。IPv6ではフラグメントは拡張ヘッダでサポートされているので、基本ヘッダに加えて、拡張ヘッダが使われている。
 (1)IPv6のヘッダの内容を見るにはこれを選択・展開する。
 (2)IPv6基本ヘッダの次には、TCPやUDP,ICMPv6ではなく、拡張ヘッダの「IPv6 Fragment header」が続いている。
 (3)拡張ヘッダのフラグメント・ヘッダ。
 (4)拡張ヘッダの次にICMPv6プロトコルが続いている。
 (5)ICMPv6プロトコル・ブロック。
 (6)IPv6の基本ヘッダ。40bytesの固定サイズ。
 (7)フラグメント拡張ヘッダのサイズは8bytes。
 (8)ここから先がICMPv6プロトコルのブロック。先頭8bytesが制御コードやフラグで、その先(「abcdefg……」と続いている部分)はpingコマンドで送受信されている文字列データ。

 1つのIPv6パケットに入りきらないので、フラグメントが行われている。フラグメントの拡張ヘッダが使用されているので、IPv6の基本ヘッダ中のネクスト・ヘッダ・フィールドには「IPv6 Fragment header(タイプ=44)」がセットされている。


 今回は、IPパケットの構造とその例を見てきた。IPv4よりもパケット構造が単純化されているので、慣れればこちらの方が分かりやすいかもしれない。ネットワーク・プロトコルを理解したり、その挙動を調べたりするには、実際に稼働しているネットワークを調査するのが一番である。ネットワーク・モニタやWiresharkなどのツールを駆使して(関連記事参照)、パケットをキャプチャしてどんどんモニタしていただきたい。Windows OSでIPv6を使うように設定していなくても、すでに多くのIPv6パケットがネットワーク上で送受信されていることが分かるだろう。

 次回は、L2アドレスを解決するIPv6の近隣探索機能について取り上げる。


「Windows管理者のためのIPv6入門」のインデックス

Windows管理者のためのIPv6入門

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。