第 3 回 IP(インターネットプロトコル)

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

3-1. ネットワーク間接続と IP アドレス

ここではパケット通信を複数のネットワークを越えて実現させるため、 ネットワーク全体で合意してなければならないプロトコルについて説明します。

コンピュータネットワークは多くのコンピュータで共有しています。 従って、相互のコンピュータを区別するため、コンピュータにはアドレスとい う識別子が必要です。 インターネットではさらに複数のネットワークを集約したりします。 そのため、分割されたそれぞれのネットワークにもアドレスが必要になります。 つまり、複数のネットワークを接続したインターネットでの通信にはネットワー クアドレスとコンピュータ(ホスト)のアドレスが必要になります。

IP(インターネットプロトコル) version 4 ではネットワークアドレスとホス トアドレスの対を 32bit = 4 バイトで表現します。各バイトを 0 から 255 までの 10 進数で表現し、ピリオドで区切って表します。つまり、インターネッ トのアドレスは 0.0.0.0 から 255.255.255.255 までになります。

このインターネットのアドレスのうち、一部がネットワークアドレスで、一部 がホストアドレスになります。 この区切りには複数あり、クラスと呼ばれています。

なお、ホストアドレスのうち、 0 はネットワーク全体を表します。 ホストアドレスが 0 の IP アドレスのことをネットワークアドレス と呼ぶことがあります。 一方、最大の値はネットワークに属しているホスト全体を表します。 つまり最大値宛のメッセージはホスト全部が受信する必要があります。 このアドレスのことをブロードキャストアドレスと呼ぶことがあ ります。

クラス A
0nnnnnnnhhhhhhhhhhhhhhhhhhhhhhhh
クラス A
インターネットアドレスを二進数で表した時、最上位のビットが 0 のものを クラス A のアドレスといいます。つまり 0.0.0.0 から 127.255.255.255 ま でがクラス A になります。 クラス A では最上位のバイトがネットワークアドレスで、 2 バイト目から 4 バイト目までがホストアドレスになります。 ネットワークは 128 個、各ネットワークではそれぞれ 256×256×256 -2 個 のホストを接続することができます。 但し、ネットワークアドレス 127 は特別で、 127.0.0.1 が自分 自身を表すことになっています。
クラス B
10nnnnnnnnnnnnnnhhhhhhhhhhhhhhhh
クラス B
インターネットアドレスを二進数で表した時、最上位とその次のビットが 10 のものをクラス B のアドレスといいます。 つまり 128.0.0.0 から 191.255.255.255 ま でがクラス B になります。 クラス B では上位 2 バイトがネットワークアドレスで、 3 バイト目と 4 バイト目までがホストアドレスになります。 ネットワークは 64 × 256 個、各ネットワークではそれぞれ 256×256 -2 個 のホストを接続することができます。
クラス C
110nnnnnnnnnnnnnnnnnnnnnhhhhhhhh
クラス C
インターネットアドレスを二進数で表した時、上位3ビットが 110 のものをクラス C のアドレスといいます。 つまり 192.0.0.0 から 223.255.255.255 ま でがクラス C になります。 クラス C では上位 3 バイトがネットワークアドレスで、 4 バイト目がホス トアドレスになります。 ネットワークは 32 × 256 × 256 個、各ネットワークではそれぞれ 256 -2 個 のホストを接続することができます。
クラス D
1110cccccccccccccccccccccccccccc
クラス D
インターネットアドレスを二進数で表した時、上位4ビットが 1110 のものをクラス D のアドレスといいます。 つまり 224.0.0.0 から 239.255.255.255 ま でがクラス D になります。 クラス D は一対一通信には使いませんので、ネットワークアドレスやホスト アドレスを表すものではありません。 これは、広域通信(マルチキャスト)を行う時のチャネル番号を表しています。 チャネル数は 16 × 256 × 256 × 256 個あります。
クラス E
1111xxxxxxxxxxxxxxxxxxxxxxxxxxxx
クラス E
残りの部分。つまり、インターネットアドレスを二進数で表した時、上位4ビッ トが 1111 のものをクラス E のアドレスといいます。 つまり 240.0.0.0 から 255.255.255.255 までがクラス E になります。 クラス E は未使用領域として予約されています。 但し、 255.255.255.255 は自分と同じネットワークに属するホス ト全体のアドレスとして使います。

まとめ

0.0.0.0
インターネット全体
255.255.255.255
同一ネットワーク上のホスト全体
133.20.0.0
東京電機大学工学部のネットワークアドレス。クラス B
133.20.255.255
東京電機大学工学部のホスト全体

3-2. IP アドレス(ネットワークアドレス)の管理

グローバルアドレス

インターネットに接続しているホストの IP アドレスは全世界で必ず単一のも のであることを保証しなければなりません。 そのため、世界規模になったインターネットのアドレス管理は国際機関で行う 必要があります。 ICANN(Internet Corporation For Assigned Names and Numbers http://www.icann.org/) は、世界的なア ドレス管理を行うための中央組織です。 各地域から理事を選出して、非営利団体として運営しています。 なお、国際機関が発足する前はアメリカが IANA(Internet Assigned Number Authority http://www.iana.org/) と いう組織を運営していました。 移管が済んだ現在、 IANA という名前は ICANN の資源管理、調整機能の名称 として残っています。

ICANN は世界を 5 つの地域に分け、アメリカとアフリカは地域は ARIN(American Registry for Internet Numbers) と言う組織が、 ヨーロッパとその周辺地域は RIPE-NCC ( Réseaux IP Européens Network Coordination Centre http://www.ripe.net/)と言う組織が、 アジアと太平洋地域は APNIC(Asia Pacific Network Information Centre http://www.apnic.org/)という組織が 、 中南米地域は LACNIC ( http://lacnic.net/en/)が、 アフリカ地域は AfriNIC( http://www.afrinic.net/が管轄しています。 そして、 APNIC の下位組織として日本を管轄するのが JPNIC(Japan Network Information Center http://www.nic.ad.jp/) という組織です。 日本の組織は JPNIC に IP アドレスを割り当ててもらいます。

これらの国際機関は IP アドレスの管理の他、ドメインネームサービスの管理 も行っています。 これは、通常、インターネットのアドレスとして使われる dendai.ac.jp のよ うな名前と 133.20.0.0 というような IP アドレスを結びつけるサービスです。

プライベートアドレス

インターネットの実験や内部 LAN で閉じたサービスなど、グローバルネット ワークに接続しないネットワークでは、 ICANN などのネットワーク組織から 交付されたネットワークアドレスではなく、特定のアドレスを使うことが許さ れています。 これをプライベートアドレスといいます。 プライベートアドレスは次の三種類があります。

クラスアドレス個数
クラスA10.0.0.0/81個
クラスB172.16.0.0/1216個
クラスC192.168.0.0/16256個

家庭用のブロードバンドルータなどはルーティングが必要ないので 192.168.0.0/24 が使われることが多いです。 一方プロバイダ内などでグローバルアドレスを節約するために使われるのは 10.0.0.0/8 です。

3-3. サブネット

IP アドレスのネットワークアドレスは通常一組織には一つしか割り当てられ ません。ですから、何の工夫もしないと一つの組織には一つしかネットワーク を持つことができません。 しかし、現在使用されている Ethernet などの LAN では一つのネットワーク に接続しているコンピュータは高々 50〜100 台程度に抑えるとパフォーマン スが良くなると言われてます。 したがって、組織内に一つしかネットワークが存在できなければ、コンピュー タ授業もろくにできません。

133201601
10nnnnnnnnnnnnnnsssssssshhhhhhhh
11111111111111111111111100000000
サブネット
そこで IP アドレスのホストアドレスの部分を一部内部ネットワークのアドレ スとして、組織内部で IP アドレスの解釈を変えて運用することが行われてい ます。 この内部ネットワークのことを サブネットと言います。 つまり、 IP アドレスの解釈を従来の「ネットワークアドレス」と「ホストア ドレス」の二つに分けていたのを、新たに組織内部だけ「ネットワークアドレ ス」と「サブネットアドレス」と「ホストアドレス」の三つに分けることにし ます。 組織において、ネットワークアドレスは既に決まってますから、問題になるの はサブネットアドレスとホストアドレスの分けかたです。 これについては組織で自由に決めます。 つまり、 IP アドレスのどこがサブネットアドレスか、ホストアドレスかを指 定する必要があります。 そのため、 IP アドレスをビット毎に分割します。 ネットワークアドレスとサブネットアドレスを表す位置のビットを 1, ホスト アドレスを表す位置のビットを 0 とした 32 bit の列を サブネットマ スクと言います。 例えば東京電機大学の工学部は 133.20.0.0 というネットワークアドレスを持っ ています。 そして、例えば、 11 号館では 3 バイト目がサブネットのアドレスになり、 4 バイト目がホストのアドレスになっています。 この時、サブネットマスクは 11111111.11111111.11111111.00000000 = 255.255.255.0 となります。 例えば情報通信工学科のサブネット番号は 160 です。そこの 1 番のホストの IP アドレスは 133.20.160.1 となります。 また、情報通信工学科のネットワークアドレスは 133.20.160.0 となりますが、 これではどこがサブネットのアドレスなのか分かりません。 そこで、サブネットの場所を明記するため、 133.20.160.0/255.255.255.0 や 133.20.160.0/24 などと表記します。 なお、厳密にはサブネットを表すビット列は連続している必要はありませんが、 通常連続させますので、連続しているビット数 24 で 255.255.255.0 を表し ます。

因みに本館系のネットワークのサブネットマスクは 255.255.248.0 です。

3-4. ルーティング

インターネットの中でネットワークを接続する装置をルータと呼 びます(昔は IMP)。 また、異なるプロトコルで接続する装置はゲートウェイと呼びます。 ゲートウェイはルータを含みますので、広い意味での中継装置をゲートウェイ と呼ぶこともあります。

あるコンピュータが別のコンピュータにメッセージを送る場合、次の二つの送 信方法が必要になります。

  1. もし相手が同一ネットワーク内にいるなら、直接送信する
  2. もし相手が別のネットワークにいるなら、そのネットワークへたどれるルー タにメッセージを託す

このように単純にホストであっても、相手によりメッセージの送る相手を変え る必要があります。 メッセージの送り先を計算することをルーティングと言います。 インターネットのルーティングを行うのに一般的なのはルーティングテー ブルという表を使って、送り方を調べる方法です。 UNIX や Windows や CISCO のルータでルーティングテーブルを表示するには netstat -rn というコマンドを使います。 例えば、情報通信工学科サブネットに接続されているホストで netstat -rnを行うと次のような出力が得られます。

カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インターフェース
133.20.160.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         133.20.160.254  0.0.0.0         UG        0 0          0 eth0

「インターフェース」の eth0 はイーサーネットのポートを表しています。 例えば、相手が 133.20.160.1 である場合は、一行目が適用されます。 これは相手先のアドレスを二進列とした時、そのアドレスとネットマスクを AND 演算すると、受信先サイトのアドレスと一致するからです。

133201601 10000101000101001010000000000001 ⋀) 11111111111111111111111100000000 ------------------------------------- 10000101000101001010000000000000 133201600

一方、相手が 192.0.34.163 の場合、このような計算をしても一行目には一致 せず、二行目に一致します。 そして、フラグ G はゲートウェイを示していますので、ゲートウェイのアド レスにメッセージを渡します。

受信先サイト、ネットマスクとも 0.0.0.0 であれば、どのようなアドレスで あれ、ネットマスクと AND 演算をすれば受信先サイトに一致します。 この 0.0.0.0/0.0.0.0 というアドレスはインターネットを表し、通常 デフォルト と呼ばれたりします。 そして、このアドレスに対するゲートウェイをデフォルトゲートウェイ と呼びます。

3-5. IP version 4

ここでは正式なプロトコルのフォーマットを見ていきましょう。 フォーマットはヘッダとボディに別れていて、ヘッダは可変長で最小 20 バイ ト、最大60 バイトになります。 ボディとヘッダは合わせて 65535 バイトまでで、その長さはヘッダの中で指 定します。 ヘッダ内の数値はビッグエンディアン、つまり上位のビットを左から並べた形 になります。 Pentium などの CPU はリトルエンディアンなので送受信で変換が必要です。

01234567 89101112131415 1617181920212223 2425262728293031
バージョン IHL サービスタイプ 全長
識別子 DF MF フラグメントオフセット
生存時間(TTL) プロトコル ヘッダー・チェックサム
送信元アドレス
宛先アドレス
オプション(最小 0 最大 40 バイト)
バージョン
4 が入ります。
IHL
ヘッダの長さを 32 bit を単位として表したもので、最小は 5 で、最大 は 15 になります。
サービスタイプ
これは最初の 3 bit が優先度を示していて 0 が標準 7 が最優先のネットワー ク制御パケットであることを示しています。 次の 3 bit は遅延、スループット、信頼性のどれを重視しているかを示すこ とになっていますが、通常このフィールドは無視されています。
全長
全長は 16 bit で長さをバイトで表します。最大 65535 になります。
識別子
データを細分化した時、細分化されたデータがすべて同じ値を持つようにして、 再構成のために使います。
DF
データの細分化を禁止する時にセットするビットです。
MF
More Fragment の意味で、細分化されたデータ(フラグメント 断片)に対 して、最終のフラグメント以外は 1 がセットされます。
フラグメント・オフセット
データが細分化された際、このパケットの持つデータがどの位置にあったかを 8 バイト単位で表します。 13 ビットありますので 8192 分割まで対応できます。 65535 バイトあれば、 8 バイト単位でどこでも表現できることになります。
生存時間TTL
Time To Live といわれ、ルータを中継するたびに 1 減らされます。 0 になったらパケットは廃棄されます。 これにより誤ったルーティングによりパケットがネットワーク内に蓄積される ことを防ぎます。
プロトコル
ここには上位層のプロトコル番号を記入します。TCP であれば 6 番が記入さ れます。
ヘッダチェックサム
ヘッダ部分で 16 ビット単位で XOR 演算を行い、最後に 0 になるような 値を設定します。 TTL フィールドがあるので、ルータで中継するたびに計算 し直す必要があります。

3-6. ICMP

ICMP(Internet Control Message Protcol) はなにか望ましくないことが発生 した時に通知するためのメッセージです。 主なメッセージのタイプには次のようなものがあります。

メッセージタイプ 説明
宛先到達不能パケットが配送されない
時間超過TTL が 0 になった
パラメータ障害間違ったヘッダーフィールド
送信元抑制送信元に対して、トラフィック量を減らすように通 知する
方向変換 redirect中継ルータを教える
エコー要求ルータがいきているかどうかを尋ねる
エコー応答生きていることを返答
タイムスタンプ要求エコー要求でタイムスタンプも要求する
タイムスタンプ応答エコー応答にタイムスタンプを付加する

ping コマンドはこの ICMP のエコー要求メッセージを送るコマンドです。 これにより相手が生きているかどうか、また往復にどれくらい時間がかかるか などがわかります。 traceroute (Windows では tracert) は相手先の未使用のポートに対して、 TTL の小さいパケットを送ることで、途中の中継点で時間超過 ICMP メッセー ジを発生させます。その結果、中継点の IP アドレスを知ることができます。

3-7. IP version 6

IP version 6 は既存の IP version 4 のアドレス空間の狭さやセキュリティ 問題に対応するため 1995 年に仕様が制定され、 2000 年からは JPNIC でも アドレスの割当が始まりました。 現在、ほとんどの OS で対応されています。 但し、普及していると言う状況ではありません。

IPv6 の主な特徴は次のとおりです。

  1. アドレスが 128 ビットになった。
  2. ヘッダのフィールドが 7 つだけに減り、高速なルーティングが可能になっ た。
  3. オプション対応が充実した
  4. セキュリティが強化された
01234567 89101112131415 1617181920212223 2425262728293031
バージョン トラフィッククラス フローラベル
ペイロード長 次ヘッダー ホップ制限
送信元アドレス1
送信元アドレス2
送信元アドレス3
送信元アドレス4
宛先アドレス1
宛先アドレス2
宛先アドレス3
宛先アドレス4

アドレスの運用(RFC3513,RFC3879)

IPv4 ではアドレスは 192.168.0.1 など、 0 から 255 までの十進数の 4 つ 組をピリオドで区切って表記してました。 一方 IPv6 では FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 のように 4 桁の 16 進数(16bit)の 8 つ組をコロン : で区切って表記します。 なお 0 で始まる値に関しては、0123 → 123, 0012 → 12, 0001 → 1, 0000 → 0 と、数字がすべて無くらならい範囲で 0 を省略可能です。 また 0 の組が連続する時、その 0 の組すべてを省略するため一回だけ :: と いう表記が使えます。 例えば、次のようなアドレスを考えます。

1080:0:0:0:8:800:200C:417A ユニキャストアドレス例
FE01:0:0:0:0:0:0:101 マルチキャストアドレス例
0:0:0:0:0:0:0:1 ループバックアドレス
0:0:0:0:0:0:0:0 未設定アドレス

これは :: を使うと次のように表せます。

1080::8:800:200C:417A ユニキャストアドレス例
FE01::101 マルチキャストアドレス例
::1 ループバックアドレス
:: 未設定アドレス

また下位 32 bit が IPv4 のアドレスを指すという混在環境において、下位 32 bit だけ従来の十進数 4 つ組をピリオドで区切った表記もあります。 例えば 0:0:0:0:0:0:13.1.68.3 や ::13.1.68.3、あるいは 0:0:0:0:0:FFFF:129.144.52.38 や ::FFFF.129.144.52.38 のように書きます。

IPv6 もアドレスを二分割して考えます。有効な上位bit の長さを表すため、 IPv4 と同様に / の後に十進数で長さを書きます。 以下は例です。

  1. 12AB:0000:0000:CD30:0000:0000:0000:0000/60
  2. 12AB::CD30:0:0:0:0/60
  3. 12AB:0:0:CD30::/60

IPv4 ではアドレスの上位 4 bit で最初に 0 が来る位置によりクラスを 5 個 に分けていました。 一方、IPv6 では上位 10 bit でアドレスの性質を表します。 これは以下のようになっています。

アドレスタイプ IPv6 IPv4
未設定 ::/128 なし
ループバック ::1/128 127.0.0.1/32
マルチキャスト
(ブロードキャストを含む)
FF00::/8 224.0.0.0/4
ホストアドレス部すべてが 1
リンクローカルユニキャスト FE80::/10 なし?
サイトローカルユニキャスト 廃止(RFC3879) 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
グローバルユニキャスト その他のアドレス。 プライベートを除く 0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/3
ユニークローカルユニキャスト FC00::/7 (RFC4193) なし

なお、IPv4 でローカルなブロードキャスト 255.255.255.255/32 に対応する IPv6 アドレスは FF02::1/128 です。

ユニキャスト

ユニキャストのアドレスは通常上位 64 bit がネットワークアドレスで、下位 64 bit がインターフェイスアドレスになっています。

下位64bit は通常インターフェイス固有の MAC アドレスなどから自動的に設 定されます。 改訂EUI-64 フォーマットと呼ばれるアドレスの計算方法は次のようになりま す。 Ethernet アダプタに固有に割り振られている MAC アドレスは 48 bit で通常 は二桁の 16 進数(8 bit) の 6 こ組をハイフンで結んだものになっています (XX-XX-XX-XX-XX-XX )。

  1. これに対して上位の 3 こと下位の 3 この間に FF FE を入れます (XXXX:XXFF:FEXX:XXXX)。
  2. 上位 7 bit 目を on にして、8 bit 目を off にします。 つまり 0200:0:0:0 と OR を取り、 FEFF:FFFF:FFFF:FFFF と AND をとります。
  3. 例えば、 00-0B-97-28-C6-D5 という MAC アドレスだったら、 020B:97FF:FE28:C6D5 というアドレスに変換されます。

上位の 64 bit に関しては、通常組織に上位 48 bit が割り当てられ、16bit がサブネットになります。 現在 2000::/3 の割り当て、つまり 2000:0:0::/48 から 3FFFF:FFFF:FFFF::/48 が割り当て対象になっています。 但し、特殊なアドレスとして次のものがあります。

  1. 2001:0DB8::/16 は出版用のアドレスで、このアドレスは書籍などで例を 出すのに使います。 運用に使ってはいけません。
  2. 2002:: は 6to4 という運用(後述)で使います。

例えば 00-0B-97-28-C6-D5 という MAC アドレスを持つマシンがサブネット 番号 1 に接続されている場合、グローバルなユニキャストアドレスの例とし ては 2001:0DB8::1:020B:97FF:FE28:C6D5 などになります。

埋め込みIPv4の IPv6 アドレス

IPv4 アドレスを下位 32 bit に埋め込んだアドレスを使うと、 IPv6 ルータ でもルーティングができます。 IPv4互換アドレスとは上位の 96bit がすべて 0 のアドレスです。 例えば 133.20.160.1 であれば ::133.20.160.1 で表されます。

一方、IPv4埋込みアドレス とは IPv4 アドレスを IPv6 アドレスとして表す ものです。 上位 80 bit が 0 で、 16 bit が 1 となり、その後 IPv4 アドレスが続きま す。 例えば 133.20.160.1 であれば ::FFFF:133.20.160.1 で表されます。

ローカルアドレス

ローカルリンクネットで使えるアドレスは FE80::/64 インターフェイスID です。 例えば 00-0B-97-28-C6-D5 という MAC アドレスを持つマシンのリンクロー カルアドレスは FE80::020B:97FF:FE28:C6D5 となります。

RFC 3513 にはサイトローカルアドレスも定義されていますが、技術的な問題 点が指摘されたため RFC3879 で廃止されています。

エニーキャストアドレス

近隣のホストやルータなど、どのホストでもいいから一台と通信したい場合 (IPアドレスが欲しい場合など)、エニーキャストアドレスを使います。 これはインターフェイス ID が 0 になっているものです。

マルチキャストアドレス

複数のホストとやりとりするためのアドレスがマルチキャストアドレスで、上 位 8 bit が 1 、次の 4 bit がフラグ、次の 4 bit が範囲を示しています。 範囲は 1 がインターフェイス、 2 がリンクローカル、 4 が管理者ローカル、 5 がサイトローカル、8 が組織ローカル、 E が全域となっています。 例えば、 NTP のグループ ID は 16 進数で 101 となっていますので、マルチ キャストアドレスは以下のようになります。

FF01::101
同じノード(ホスト)上の全 NTP サーバ
FF02::101
同じリンク上の全 NTP サーバ
FF05::101
同じサイト内の全 NTP サーバ
FF0E::101
インターネット全体の NTP サーバ

すべてのノードのグループ ID は 1, すべてのルータのグループ ID は 2 で す。

6to4

インターネットには v4 と v6 のゲートウェイが設置されていて、相互に通信 が可能になっています。 手元で v6 ネットワークを立ち上げたが、 v6 ネットワークと直接接続できな い場合、 v6 ゲートウェイにトンネルと言う手法で接続できます。 トンネルとは v6 のパケットを v4 のアドレスを付けて運ぶものです。 そのため「 2002:v4 アドレス ::v4 アドレス」というアドレスを使うことに なっています。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科