特殊アドレスとして、下記のものが挙げられます。
未指定アドレスは、システムの初期化中でまだアドレスが付いていないホストが、ソースアドレスとして使うことがあります。
0000:0000:0000:0000:0000:0000:0000:0000
推奨略記に従うと「::」となります。
ループバックアドレスは、IPv4では「127.0.0.1」として知られていたアドレスです。IPv6では
0000:0000:0000:0000:0000:0000:0000:0001
です。推奨略記に従うと「::1」となります。
IPv4互換アドレスは廃止となりました。IPv4ネットワークにしかつながっていないIPv6ノード同士が通信する際に使用されていたアドレスです(Linuxではauto tunnelで利用されていました)。利便性を考え、IPv4アドレス部分は10進数表記のままとされていました。
例) ::192.168.0.1
IPv4射影アドレスは、IPv6ノードが、IPv4しかサポートしていないノードと通信する際に使用されるアドレスです。こちらも利便性を考え、IPv4アドレス部分は10進数表記のままとされています。
例)::ffff:192.168.0.1
IPv4でLinuxを運用してきた方の中には、このアドレスをログなどで見かけたことがあるのではないでしょうか? 「IPv4もIPv6アドレスとして扱って、IPv6のソケットで面倒を見てしまえ」といった実装で、このログが見受けられます。
IPv4とIPv6のヘッダ構成は、以下のとおりです。
他にもIPv4とIPv6の違いとして、
などが挙げられます。運用を考える上で、特に気を付けるべき点を取り上げたいと思います。
実はIPv6では、仕様からARPがなくなっています。では、近隣の通信相手のMAC Addressなどは、どうやって解決しているのでしょうか? 実はICMPv6で行っています。これをND(Neighbor Discovery)と呼んでいます。
このようにICMPv6は、IPv6の基本動作上、非常に重要な役割を果たしています。このため、安易にICMPをフィルタしてしまうと実際の通信に影響を及ぼすことがあるので、注意が必要です。
「IPv6ではパケットのフラグメントが起きない」と聞いたことがあるかもしれませんが、それは正確ではありません。あくまで「転送途中のルータではパケットがフラグメントされない」だけで、サーバやクライアントにおいてはフラグメントが実施されます。
しかし、サーバやクライアントは、どれだけのパケット長で送れば途中経路でフラグメントが不要なのかを知りません。それを知るための仕組みが、Path MTU Discoveryです。動作は図6のとおりです。
このような処理を、最終的にパケットが転送できるようになるまで繰り返すことにより、サーバとクライアントはPath MTUの値を知ることができます。この動作にもICMPv6が利用されているため、これまた安易にICMPv6をフィルタすると、通信がうまくいかなくなってしまいます。
IPv6では、TCPかUDPなのかといった識別も拡張ヘッダによって行っています。この拡張ヘッダは、図7にあるように、数珠つなぎ的に使えます。
特に、ファイアウォールなどをIPv6ネットワークに導入する際には、「このヘッダをいくつまで評価できるのか」「フィルタ可能なのか」といったことを確認しておく必要があるでしょう。
以上、駆け足でIPv6の基礎について紹介をしてみましたが、いかがだったでしょうか。
地デジ化とは異なり、ある時期からきれいにすべてのネットワークがスパッとIPv6へ移行する、といったことはまずありえないでしょう。IPv6対応は無視できない面もありながらも、しばらくはIPv4との共存状態が続くと考えられます。
この記事では、IPv6でのデュアルスタックなど、取り上げきれなかった話題もありますが、IPv6理解の肝は、IPv6のアドレス体系の理解だと思っています。それさえ理解できてしまえば、あとは進みも早くなるはずです。この記事がその一助となれば幸いです。
次回は、IPv6対応ルータの設定例とアドレス設計について紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.