「192.168.x.x」のようなIPv4のIPアドレスは見慣れているでしょう。いまだに普及期を脱し切れないIPv6も、「fe80::x」のようなリンクローカルアドレスはよく見かけるでしょう。

 IPv4/IPv6はネットワーク層に属しています。このレイヤーのプロトコルとしては、IPパケットのセキュリティを担保するIPsecがあります。よく利用するICMP(ping)もネットワーク層のプロトコルです。

▼リンクローカルアドレス
特殊なIPアドレスの一種で、すべてのNICが備えているアドレスです。
▼IPsec
Security Architecture for Internet Protocolの略です。
▼ICMP
Internet Control Message Protocolの略です。
▼ネットワーク層
以前のパソコンLANではIPX(Internetwork Packet Exchange)というプロトコルも使われてきました。米ノベルのネットワークOS「NetWare」で使われていたからです。最近のOSでは標準で対応しなくなってきています。インターネットの普及とともにIPが主流になって、すっかり廃れてしまいました。

シンプルなIPv6のヘッダー

 IPv4とv6のヘッダーを比較すると、IPv6のほうがシンプルな構造をしています(図4-1)。IPv4は1981年9月にRFC化されました。筆者がまだ4歳の時です。読者の中には、まだ生まれていなかった人もいるでしょう。その頃に将来を見越して作った仕様なので、実際には使っていない機能もあります。例えば「サービスタイプ」はIPパケットの優先度を表すフィールドですが、ほとんど使われていません。

図4-1●IPパケットの構造
図4-1●IPパケットの構造
IPv4では20バイトだったヘッダー部が、IPv6では40バイトに増えた。「TTL」と「最大ホップ数」のように、IPv4とIPv6でヘッダー中の位置や名称が変わっても役割が変わらないものがある。
[画像のクリックで拡大表示]

 IPv4パケットをWiresharkで見てみましょう(図4-2)。フラグメント化禁止のフラグが立っています。MTUの値を超えたサイズのパケットが送られてきたルーターは、自分のIPの機能を使ってパケットを複数に断片化(フラグメント化)して送信する仕様になっています。しかし、実際にはそのような処理をせず、パケットを廃棄(ドロップ)し、エラーのみを返すルーターが多いのです。

図4-2●WiresharkでIPv4パケットを確認
図4-2●WiresharkでIPv4パケットを確認
WiresharkでパケットをキャプチャーしてIPv4パケットを見たところ。上位のプロトコルの情報などが見てとれる。
[画像のクリックで拡大表示]

 これはフラグメント化されたIPパケットにセキュリティ上の問題があるためです。このため、フラグメント化されたIPパケットが送られてくると問答無用で廃棄するのです。

▼あるためです
「teardrop攻撃」のように、フラグメント化されたIPパケットのオフセット値を改ざんする攻撃があります。オフセットは断片化したデータの位置を表します。また、セキュリティパッチの当たっていないWindows NTやWindows 2000では、フラグメント化されたパケットを送ると動作不能にできる「IPフラグメント攻撃」が有効でした。