ここでは,ネットワーク層について学習します。ネットワーク層は複数のデータリンクをまたがる2点間の通信を可能にするものです。そのTCP/IPでのプロトコルがIPで,ルータが重要な役目をします。なお,IPアドレスの仕組みと経路制御については別章にまわします。
IP(Inernet Protocol)の概要
データリンク層とIPの関係
IPは,OSI参照モデルのネットワーク層に相当するプロトコルです。データリンク層では,同一のデータリンク内で直接接続されたホスト間でパケットを送信しますが,IPでは,直接接続されていないホスト間でパケットの送信をします。すなわち,IPではいくつものデータリンクを経由して通信をします。
データリンク層では,宛先をMACアドレスで指定していましたが,IPではそれをIPアドレスで指定します(IPアドレスの詳細については,別章「IPアドレス」参照)。すなわち,同一データリンク間での宛先はMACアドレスですが,それを超えた宛先にはIPアドレスを使うのです。
ARP(Address Resolution Protocol)/RARP(Reverse ARP)
ARPは,あるホストのIPアドレスを与えてMACアドレスを知るためのプロトコルです。同一のデータリンクにあるホストAがホストBのMACアドレスを知りたいときには,次のようにします。
- ホストAは,自分のMACアドレスとIPアドレス,ホストBのIPアドレスを含むARP要求パケットをブロードキャストします。
- すべてのホストがARP要求パケットを受けますが,求めているIPアドレスを持っているのはホストBだけです。それで,ホストBは自分のMACアドレスをつけて,ホストAにARP応答パケットを送信します。
ホストBが同一データリンクにないときは,ルータがホストBのIPアドレスにより,ホストBが同一データリンクにないことを判別できますので,ホストBではなくルータのMACアドレスをホストAに知らせます。すると,ホストAはルータにパケットを送り,それをホストBに転送するように依頼します。
なお,RARPはMACアドレスからIPアドレスを知るためのプロトコルです。
経路制御(ルーティング)
ルータが代行した後,どのようにホストBにパケットが送られるかを簡単に説明します。
同一のネットワークに属するホストは,まとまったIPアドレスを持っており,ネットワーク自体もIPアドレスを持っています。そして,ルータは自分が接続しているネットワークのIPアドレスや,それに接続するルータのIPアドレスとその向こう側のネットワークのIPアドレスなどをルーティングテーブルに持っています。すなわち,ルータAは,
ネットワーク1
ネットワーク2
ルータBとネットワーク3
ルータCとネットワーク4
だけを知っています。そして,ルータAはホストAからのパケットをルータCに渡すと,ルータCはホストBが属するネットワーク6はルータEにあることを知っているので,さらにルータEに転送します。ネットワーク6に到達すれば,ARPでホストBのMACアドレスを知ることができるので,ホストBにパケットが届きます。
このように多くの多数のルータをバケツリレーすることにより経路を決定することを経路制御(ルーティング)といいます。ここで,なぜルータAがルータBではなくルータCに渡したのかがあいまいですが,詳細は別章「経路制御」で取扱います。
IPによりパケットを送信するときは,データの前にIPヘッダを付加します。IPヘッダのフォーマットは次の通りです。なお,IPの最新バージョンはIPv6ですが,未だIPv4が広く用いられていますので,ここではIPv4を用います(IPv6に関しては後述します)。
- 始点IPアドレス/終点IPアドレス
- 始点とは送信元,終点は送信先(宛先)のことです。
- 上位プロトコル
- 伝送されるデータには,本文以外にTCPヘッダなどのヘッダが含まれています。それのプロトコルです。
- TTL(生存期間)
- IPでは,パケットは多くのルータを経由します。状況によっては,ルータ間がループになっていて,目的のホストに到着せず永久にループを巡回するようなことがあると,送信の制御もできないし,ネットワークに負荷がかかってしまいます。それを防ぐために,ルータを1回経由するたび(それをホップといいます)に,TTL(Time To Live)の値を1だけ減らし,それが0になったらパケットを破棄します。
IPに関連するプロトコル
ICMP(Internet Control Message Protocol)
IPはコネクションレス型(コネクション型/コネクションレス型については,別章「TCP」で説明)ですので,パケットが正しく到達しているかの保証もありませんし,障害が発生したときの通知もできません。ICMPは,障害が発生したときに通知をするネットワーク層に相当するプロトコルです。
- 到達不能メッセージ(Destination Unreachable)
- 宛先に到達できないとき,送信元のホストに到達不能メッセージが送られます。
- Netwowork Unreachable:途中のルータで宛先のIPアドレスを見つけられなかった。
- Host Unreachable:宛先のネットワークには到達したが,宛先IPアドレスを持つホストが存在しない。あるいはネットワークに接続されていない。
- 時間経過メッセージ(Time Exceeded)
- TTL(Tome To Live:生存時間)が0になったとき,送信元のホストに送られます。これを用いて,経由するルータと時間経過を知ることができる traceroute(UNIX)や tracert(Windows)コマンドがあります。
- エコー要求(Echo Request),ping
- 送信先にパケットを送ることができるかどうかを確認するためのものです。pingコマンドはこれを用いています。
DHCP(Dynamic Host Configration Protocol)
DHCPは,IPアドレス設定を自動化したり一元管理するもので,次のような問題の解決に効果があります。
- 大規模なネットワークになると,重複したIPアドレスをつけてしまうことがよくありますが,それを発見することはかなり面倒です。
- ノートパソコンを他の室で使うときに,そのつどIPアドレスの設定をするのも面倒です。
- ホストを実際にネットワークと接続するときだけ動的にIPアドレスを付与するようにすれば,保有IPアドレスを少なくすることができます。これはISPでは特に効果があります。
DHCPによるIPアドレスの取得
新規にクライアントをネットワークに接続して,動的にIPアドレスを取得する手順は次の通りです。
- DHCP Discover
-
- ネットワークに接続した時点では,クライアントはDHCPサーバのIPアドレスを知らないので,ネットワーク全体にブロードキャストします。クライアント自体のIPアドレスもないので,送信元のIPアドレスは 0.0.0.0 としておきます。
- DHCP Offer
- ブロードキャストを受けたDHCPサーバは,自分が保有しているIPアドレス(アドレスプールという)から,仮のIPアドレスをを割り当てて,それとDHCPサーバのIPアドレスをクライアントに返信します。このとき,DHCPサーバが複数あると(DHCPサーバは重要なサーバなので障害対策のために複数が起動している),クライアントに複数の返信が届きます。
- DHCP Request
- クライアントは,複数の返信から一つを選択して,その仮IPアドレスを入れたメッセージをブロードキャストします。
- DHCP Ack
- その仮IPアドレスを提供したDHCPサーバは,仮IPアドレスを正式のIPアドレスとしてアドレスプールから確保し,正式通知をクライアントに返信します。そして,クライアントはそのIPアドレスによりネットワーク環境を設定します。
- DCHP Release
- DHCPサーバがクライアントに正式IPアドレスを与えるのは,一定期間内の期限付き貸し出しです。その期限が近づくと,クライアントは必要に応じてDHCPサーバに延長要求を出します。それがないときは,DHCPサーバはIPアドレスをアドレスプールに戻して,他のホストからの要求を待ちます。
IPv6
IPv4では,IPアドレスは32ビットで構成されており,232≒43億個ですが,クラスなど非効率的な割り振りをしてきたために,インターネットの普及に伴い枯渇が心配されるようになりました。それを引き金として,これまでのIPが持つ不便な事項を一挙に解決するべきだとして,IPv6が採用されました。
IPv4からIPv6への移行には多くの変更を伴うために,未だIPv4が広く用いられていますが,IPv6は多くの利点や適用分野があるので,着実に伸びてきています。
アドレス空間の拡大
IPv6では,IPアドレスは128ビットです。2128=3.4×1038ですから,事実上無限に近い個数になります。
それにより,IPv4の 10.1.1.1 というような表記法では16個の数字になってしまいます。それで128ビットを16ビットごとの8個にわけて,それぞれを16進数で表現するようにしました。
2進法表現
0001 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 1000 0000 1000 0000 0000 0010 0000 0000 1100 0100 0001 0111 1010
16進表現
1080:0:0:0:8:800:200C:417A (16桁ごとに:で区切る)
16進表現(簡略)
1080::8:800:200C:417A (連続した0は::にできる。1ヶ所のみ)
IPv6の利点
- アドレス空間の拡大
- IPアドレスを128ビットにしたことにより,3.4×10^38という事実上無限に近い個数になります。それにより,情報家電や各種センサーなどをインターネットに接続できるので,IPv6化はユビキタス社会への対応の観点からも重要です。
- セキュリティ対策の向上
- プライベートIPアドレスが不要になり,すべてのホストにグローバルIPアドレスが付けられるので,相手のホストの識別がしやすくなります。
また,セキュリティ通信のIPSecの実装が必須とされていることから,セキュリティ対策がとりやすくなります。
- 効率の向上
- IPアドレスを,地域や国,指定事業者のような構造に合わせるようにして,ルーティングテーブルを簡素化してルーティングの効率化を図っています。
また,特にチェックサムはTCP/UDPで行いIPでは省略するなど,IPv4と比べてヘッダの項目を簡略化して,ルータの負荷を減らしています。
- プラグ&プレイ機能
- IPv6では,機器をネットワークにつなぐと自動的にグローバルIPアドレスを取得できる機能を持たせています。