Kozupon.com    
 
 IPv6は扱う語長が増えただけではない!


前書き:
次世代IPであるIPv6と随分前から言われてきてるけど現在は、ほとんどIPv6で通信しているところは見たことがない。まあ、いきなり変わることも無いとは思っていたが・・・・。ちまたでは、本当はIPv4は枯渇していないと言う声まで上がっているくらい。正直、俺は現在のネットワークインフラ上に有るネットワーク機器とかサーバ関係のI/FにはIPv4が実装され、IPv6は全ての家電がネットワーク接続されたときにIPv6のIPアドレスに気が付くようなきがする。実は、IPv6への切り替えの理由はIPアドレスの枯渇以外にも有ったのはみなさん知っていただろうか?つまり、IPv4での不具合点のフィックスという理由も有ったのは俺自身も最近知ったのである。IPv6の意義は確かにIPアドレスの枯渇も有るが、その他に以下の3点も大きな意味を持っていることを忘れてはならない。
この文書では、「IPv6は扱う語長が増えただけではない!」と言う題で本当のIPv6の姿を見ていきたいと思う。

■ ルータの負荷を下げる改善
■ セキュリティを強くする改善
■ コンピュータをネットワークに接続する時の設定を省く改善


1.IPv4のIPアドレスの枯渇

インターネット(グローバル)につながるコンピュータは、重複がないIPアドレスが割り当てられていることが基本である。これは、当たり前の話で皆さんも当然お判りだと思う。
IPv4アドレスは32ビットするので、約43億個のコンピュータを区別できる。43億というと例えば、お金に換算するとかなり多いという感じはするが、しかし、いまや世界の人口が約63億人であることや、家電品等がネットワークに繋がることを考えると、めちゃくちゃ大きな数字とは言い難い。このようなことから、IPバージョン6としてIPv6が考え出された。


2.そんでもってIPアドレスを大幅に増やしたIPv6

そんでもって、1Pv6ではアドレスを128ビットで表現する大きさに拡張した。これは、単純に考えればそう言うことになる。単に、IPアドレスの語長を拡張するぐらいのことは悪いけど俺にも考えられる。この128ビットという語長は、2の128乗個、数字的には、約34澗(「かん」って読むんだけど)個という天文学的な数値になる。これ感覚的に、「蟻んこに太平洋」どころの騒ぎではなくて、「蟻んこに太陽」位の違いが有るのではないかと思う。

IPv4 → 2の32乗   4,294,967,296個  約43億個
IPv6 → 2の128乗  340,282,366,920,938,463,463,374,607,431,768,211,456個  約34澗

それでは、アドレスの表記方法は?と言うと、IPv4では32ビットを8ビットずつに分け、10進数で表したものを「.(ピリオド)」で区切る。それに対して、IPv6の場合は128ビットを16ビットずつに分け、16進数で表したものを「:(コロン)」で区切る(図1)
ただし、IPv6アドレスは桁が多いので、アドレス表記が長くなるのは言うまでもない。そこで少しでも短縮出来ないかということで、ブロックの先頭の 「0 」は省略してもいいことになっている。さらに、0000のブロックが連続する部分を「::」で表現する事が出来る。広くなったアドレス空間を生かし、IPv6アドレスの上位64ビットはコンピュータが接続しているネットワークを区別する部分(ネットワークIDと言う)、下位64ビットは同じネットワークにつながった個々のコンピュータを区別する部分(インタフェースIDと言う)になっている(図2)

図1

図2

IPv4は、この部分が明らかにに分かれていないため、ネットワーク部とインタフェース部(ホスト部)の切れ目を表現するためにサブネット・マスクという32ビットで表現する必要が有ったのだが、IPv6では必要なくなっている。またIPv4では、一つのネットワークにつながるコンピュータ数をあらかじめ予測してネットワーク設計する必要があったが、IPv6では最初からネットワーク部とインタフェース部が分かれているので気にする必要がない。さらに、一つのネットワークで利用できるアドレス数だけで2の64乗個もあるので足りなくなることまず無いだろう。


3.IPv4を評価して改善したIPv6

アドレス空間を広げることがIPv6のまず第一の目的では有った。ただ、本来これ以外にIPv4でインターネットを使ってきた実績からわかったことでバグ的に改善しなければならないことを反映して、より使いやすく効率の良い通信ができるように設計された。
主な改善は、

■ ルータの負荷を下げる改善
■ セキュリティを強くする改善
■ コンピュータをネットワークに接続する時の設定を省く改善

である。以降は、これら三つの改善点を、IPv4とIPv6のヘッダーを比較ながら見てみる。


4.基本部分を固定にしてルータの負荷を軽減

IPv4パケットのヘッダー形式は、IPv4に比べるとIPv6のヘッダー・フォーマットは図3に示すように非常にシンプルだ。これは、パケットを転送するときのルータの負荷を軽減しているからだ。では、もう少し詳しく言うと、パケット転送に不可欠な情報はすべて「基本ヘッダー」に書かれる。この基本ヘッダーは40バイトの固定長で、IPv4の場合、オプション部分の長さによってヘッダー自体の長さが可変長(20-60バイト)となる。可変長の場合、ルータはパケットごとに異なる処理をしなければ無くなり、処理が非常に複雑となる。
変わって、IPv6なら基本ヘッダーが固定長なのでルータの転送処理が単純となるため、転送効率が良くなる事が期待できる。
特に「拡張ヘッダー」の部分の処理を行わず、パケットをあて先アドレスに従って転送するだけなら処理の高速化が期待できる。
しかし、基本ヘッダーだけでは足りないことがある、したがって、その場合によって必要になる情報は拡張ヘッダーに入れて基本ヘッダーの直後に置くようにしている。

図3


5.必要ないフィールドは削除だぜ

■ ヘッダー・フィールド
IPv6ヘッダーの先頭にあるバージョン・フィールドは、IPv4ヘッダーのバージョン・フィールドと同じで、IPパケットのバージョン番号を示す4ビットの数値が書き込まれている。IPv6だと、ここに6が入る。
送信元アドレス(Source Address)とあて先アドレス(Destination Address)・フィールドは、IPv6ではそれぞれ128ビット(16バイト)の大きさになっている。IPv6ヘッダーのフィールド数は、 IPv4よりも減っている。これは今までのインターネットでIPv4が利用されてきた経験をふまえて、「ほとんど使用されていない」、「別の方法で処理できる」とわかっている情報を削除したからだ。その代表的な一つがヘッダー・チェックサムだ。チェックサムは、受信側が受け取ったパケットのヘッダーが壊れていないかをチェックするためのものである。しかし、IP層の下にあるイーサネットや上位にあるTCPやUDPなども、パケットの情報をチェックする。そこで、IPv6ではパケットの情報をチェックするのは、他の上下のプロトコルに任せて、IP層のヘッダー・チェックサム・フィールドは省ちゃっている。

■ 断片化に関する情報
IPv4では、パケットが転送さる途中の回線の最大転送ユニット(MTU)がパケット長より小さい場合に中継するルータがパケットを分割して送る断片化処理を行うことになっていた。しかし、この作業はパケットを転送することが仕事のルータにとっては、余計な仕事となり非常に過負荷がかかりすぎる。そこでIPv6では、ルータはパケットを断片化しないで、断片化が必要なことを送信元に教えて送信元に断片化を無理矢理させちゃうことにした。つまり、転送先の回線のMTUより大きなパケットをルータが受け取ると、ルータは受信バケットを分割せずに捨てて、転送先のMTUサイズを送信元に通知する。そして、この通知を受け取った送信元が適切な大きさにパケットを分割してから再送する。尚、分割されたパケットを組み立て直すのはIPv4と同じで、受信側のコンピュータの役割だ。
だから、IPv6では途中のルータがパケットを断片化することはない。つまり、ルータは断片化のための情報を参照したり、書き換えることはない。このため、IPv4に存在したフラグ・フィールド、識別子フィールド、断片化オフセット・フィールドの情報は、基本ヘッダーではなく、拡張ヘッダーの断片ヘッダー部分に搭載されるようになった。これにより拡張ヘッダーがない場合、ルータは基本ヘッダー部分だけを参照することで中継処理を実行できるので負荷が軽減され、送信元と受信側は拡張ヘッダーまでを見て断片化したり組み立て直したりすることができることとなった。


6.その他の基本ヘッダー・フィールド

他にも、基本ヘッダーにはいくつかのフィールドが用意されている。その一つであるベイロード長フィールドは、IPv6基本ヘッダーの後ろに続く部分の長さをバイトで表す。ここには拡張ヘッダーの長さも含まれる。フィールドの大きさはIPv4の全バケット長フィールドと同様の16ビット(4バイト)で、最大65535バイトまで表すことができる。
IPv4ヘッダーにはヘッダー長フィールドと全パケット長フィールドの二つがあったが、IPv6では基本ヘッダーは40バイトと固定なため、ベイロード長フィールドだけになっている。これにより、「(IPv4での全パケット長フィールドの情報)−(ヘッダー長フィールドの情報)=(ベイロード長)」といった、IPv4では必要だった計算が不要になるのも嬉しいことだ。
ネクスト・ヘッダー・フィールドは、IPv6基本ヘッダーの後ろにどのような情報があるかを示すもである。IPv4ヘッダーのプロトコル・フィールドに相当する。IPv4のプロトコル・フィールドにはトランスポート層のプロトコル番号が格納された。
IPv6ヘッダーのネクスト・ヘッダー・フィールドには、トランスポート層のプロトコル番号だけでなく、IPv6拡張ヘッダーの種類を表す番号が格納される場合もある。ホップ・リミット・フィールドは、IPパケットの寿命を表すフィールドで、IPv4ヘッダーの生存時(TTL;Time to Live)フィールドに相当する。IPv4ヘッダーでの名称であるTTLは時間を思わせるフィールド名となっていたが、IPv6では「いくつまでルータを越えられるか(ホップできるか)」という本来の機能を表すホップ・リミットという名前になっている。
トラフィック・クラス・フィールドは、送信元コンピュータやルータがIPパケットを転送する際に優先度を付けるために利用される8ビット長のフィールドだ。
IPv4ヘッダーのサービス・タイプ(ToS:Type of Service)フィールドに相当する。フロー・ラベル・フィールドは、送信元コンピュータからあて先コンピュータに送信される。


7.どうも拡張ヘッダーの順番が決められているらしい

次に拡張ヘッダーについて見ていく。拡張ヘッダーの代表的なものは、図4に示す。
それぞれの拡張ヘッダーは基本ヘッダーと同様にネクスト・ヘッダー・フィールドを持ち、自分の次に置かれているものが拡張ヘッダー
かベイロードに載っているプロトコル(TCP、 UDP、ICMPなど)かを示している。ルータやあて先コンピュータは、これを頼りに次にどのような処理をすればよいかを判断する。
次のヘッダーがどこから始まるかは拡張ヘッダーの種類によって異なる。固定長の拡張ヘッダーである断片ヘッダーは8バイト後からになる。さらに、可変長の拡張ヘッダーの場合は拡張ヘッダー長フィールドに格納されている数値(8バイト単位で表現、ただし最初の8バイトは含まない)から計算して決定する。
IPv6拡張ヘッダーは出現順が推奨として規定されている(図4)。また、IPv6パケットにはあて先オプション・ヘッダー以外の拡張ヘッダーは一つしかない。
認証ヘッダーと暗号化ベイロード・ヘッダーの順番は、ケースによって違う。
あて先オプション・ヘッダーについては、出現位置(ほかの拡張ヘッダーとの出現関係)によって解釈が違う。
経路ヘッダーの前にあて先オプション・ヘッダーが出てくる場合は、あて先オプション・ヘッダーの情報をIPv6ヘッダーのあて先アドレスに加え、経路ヘッダーの転送先情報で指定されたルータ群で処理させることを意味する。一方、TCPやUDPなどのヘッダーの直前にあて先オプション・ヘッダーが出てくる場合は、あて先オプション・ヘッダーの情報はパケットのあて先コンピュータだけが処理することを意味している。

図4


8.IPsecを実装するのがデフォルトみたい

IPv4パケットでは、パケットやベイロード(通信パケットのうちヘッダー部分を除いた、本来転送したいデータ本体のこと)の暗号化は考えられていなかった。またチェックサム・フィールドを用いてパケットが壊れているかどうかは解るが、改ざんの有無を知ることは出来なかった。
インターネットが普及するにつれ、当たり前のように暗号化や認証の必要性が高まり、IP自体に暗号化や認証の機能を持たせることが検討され、IPsec(IP Security Protocol)というプロトコルが標準化された。
IPv6ではIPsecを拡張ヘッダーに実装し、暗号化認証を実現している。IPv6ではIPsecは標準機能として必ず実装することになっている。
IPv4でもIPsecは当然使えるが、いわゆるオプション扱いである。IPv6にはIPsecのヘッダーとして認証ヘッダー(AH:Authentica-tion)と暗号化ベイロード・ヘッダー(ESP:Encnpsulating Security Payload)がある。
認証ヘッダーはTPv6パケットが途中で改ざんされてるか否かのチェック、送信元の認証に利用される。
暗号化ベイロード・ヘッダーは、ベイロードの暗号化と改ざん検出に使う。


9.端末設定が自動で出来る

IPv4が使われ始めたころ、インターネットに接続するためには利用者がコンピュータに色々な設定をしなければならなかった。
例えばコンピュータが使うIPアドレスやバケットを送るべきルータ(デフォルトルータ)のアドレスなどを設定する必要が有った。今はIPv4でもコンピュータをつなげば簡単にインターネットに繋がるが、その裏ではなにげにDHCPなどのサービスが動いている。
IPv6でパソコンだけではなく、センサーのように事実上通信機能を実装しにくい機器でも、自動設定機能をよって簡単につなげられるしくみをもっ
ている。
それでは、最後に自動設定のメカニズムを見てみる。IPv6を使っているLANにはIPv6インターネットとつながるルータがある(図5)。そのルータでは、定期的に設定情報を流している。これはルータ広告(RA:Router Advertisement)と呼んでいる。
コンピュータは「リンクローカル・アドレス」という特別なアドレスを自分自身に割り当ててルータが流すRAを受け取る。このリンクローカル・アドレスは、自分がつながるリンク(セグメント)だけで利用できる特別なアドレスで、ネットワーク・インタフェースが有効になった時点で自動生成される。そして、ルータ広告に記述されているネットワーク情報(ネットワークID)と、自分の情報 (インタフェースID)を組み合わせてIPv6アドレスを自動的に生成する。またRAには、デフォルトルータの情報も含まれているので、これらの情報を基に設定を行い、すぐにコンピュータはIPv6で通信を開始できる状態となる。

図5

以上


 
 
 



Copyright 2005 Kozupon.com.