インターネット・プロトコル (Internet Protocol)

Related Post

> インターネット・プロトコル・スイート > インターネット・プロトコル (Internet Protocol)

Internet Protocol (インターネット・プロトコルIP) とは、インターネット・プロトコル・スイートを使ったインターネットワークにおいてデータグラム(またはパケット)を中継するのに使われる主要な通信プロトコルである。 ネットワーク間のパケットの中継を担っており、インターネットの基礎部分となる重要な役割を持っている。

TCP/IP群
アプリケーション層
BGP / DHCP / DNS / FTP / HTTP / IMAP /IRC / LDAP / MGCP / NNTP / NTP / POP /RIP / RPC / RTP / SIP / SMTP / SNMP /SSH / Telnet / TFTP / TLS/SSL / XMPP
トランスポート層
TCP / UDP / DCCP / SCTP / RSVP
ネットワーク層
IP (IPv4、IPv6) / ICMP / ICMPv6 / NDP /IGMP / IPsec
リンク層

ARP / OSPF / SPB / トンネリング (L2TP) /PPP /MAC (イーサネット、IEEE 802.11、DSL、ISDN)

インターネット・プロトコル・スイートにおけるインターネット層の主たるプロトコルであり、送信元ホストから宛先ホストへIPアドレスに基づいてデータグラムを送付する役割を担っている。そのため、送付すべきデータをカプセル化したデータグラム構造が定義されている。また、送信元と宛先を示すのに使われるアドレッシング方法も定義されている。
OSI参照モデルのネットワーク層にほぼ対応する機能を持つ。歴史的には、ヴィントン・サーフとロバート・カーンが1974年に発表した Transmission Control Program のコネクションレスのデータグラムサービス部分がIPとなった。一方のコネクション指向の部分は Transmission Control Protocol (TCP) となった。そのため、インターネット・プロトコル・スイートをTCP/IPと呼ぶことが多い。最初の主要バージョンが Internet Protocol Version 4 (IPv4) で、インターネットでも支配的に使われている。後継のInternet Protocol Version 6 (IPv6) も利用が拡大しつつある。

【概要】

IPは、最も基本的な通信単位であるパケットを相手に送信する役割を担う。 パケットは、発信者、受信者(手紙でいう宛て先)などの情報を持つIPヘッダ(最小20オクテット、最大60オクテット)と、通信内容を格納するペイロードとで構成される。パケットのうちIPが受け持つネットワーク層の部分はデータグラムと呼ばれる。発信者、受信者は、IPアドレスにより特定する。

IPは自己のインタフェース(ネットワークカードやモデムのこと)からパケットを送出するだけであり、相手まで確実にパケットが届くことに責任を持たない(保証しない)。 そのため、不慮の事故でパケットが失われた場合には単に到着しないだけである。確実な送受信を保証する必要がある場合には、IPより上位のトランスポート層のプロトコルであるTCPなどを使用する必要がある。

現在主に利用されているのは32ビットのアドレス空間を持つIPv4であり、IPアドレスの不足が発生することが予測されることから128ビットのアドレス空間を持つIPv6が作られた。

なお、IPv5(ST)、IPv7(TP/IX)、IPv8(PIP)、IPv9(TUBA)というプロトコルも存在するが、いずれも実験的なプロトコルであり実用には至っていない。また、IPのバージョン番号はIETFによる割り振りであり、優劣などの他意はない。

【IPの仕組み】

IPでは、各々のLANで通信可能な範囲をセグメントと呼び、セグメント内のコンピュータをホストと呼ぶ。同じセグメントに属するホスト同士はそのLANで使用されている通信プロトコルをデータリンク層とし、その上のネットワーク層で稼動する。
つまり同じセグメントに属するホスト同士は、IP以前からそうであったように直接通信する。このため、セグメント内で通信するだけであればIPの存在意義は特にない。IPがその存在意義を発揮するのはセグメントの外と通信することが可能であり、そして何も変更せずに(全く同じ機器/ソフトウェア構成で)セグメント内とセグメント外との区別なく通信が可能となることである。そのため、最近はLAN内の通信なのにわざわざIPを使うイントラネットを採用することで、インターネット用のソフトウェア資産やノウハウをそのままLAN内通信に利用することが多くなってきている。

【同じセグメント内の通信】

同じセグメント内のホスト同士の通信では、そのLANで使われているプロトコルを使って通信する。そのためIPの各実装では、そのLANで使われているプロトコルから完全に独立することはできない。
まず、送信先となるIPアドレスを持つホストにデータリンク層のデータとして送信するために必要な情報を収集しなければならない。例えばイーサネットであれば、送信先となるIPアドレスを持つホストのインターフェースが持つMACアドレスである。そのためにブロードキャストによって「このIPアドレスの人は返事して!」とメッセージを送る。そのIPアドレスを持っているホストはそれに対して返答する。その返答の送信元が、送信先IPアドレスを持つホストのMACアドレスである。
一般にブロードキャストは負荷が高くLAN内の通信を阻害するため、こうして得られたMACアドレスは今後同じIPアドレスに送信するときにはブロードキャストせずに再利用できるように、キャッシュに控えておく。
IPの実装では、こうしたアドレス解決と実際の送受信部分だけはデータリンク層のプロトコルに依存することになる。しかしこの依存部分は、実際にそのデータリンク層のプロトコル を使うホストでだけ必要になるため、世界中に散らばる各セグメントとの通信の際には問題にならない。異なるデータリンク層のプロトコル を使うセグメントに分かれたホスト同士の通信の場合は、後述するゲートウェイがこれを解決する。

【異なるセグメント同士の相互通信】

セグメントとセグメントの間、あるいはセグメントとWANの間にはルーティングを行なうための特別なホストであるルータがある。ルータにはあらかじめ、自身が繋がれているそれぞれのセグメントにいるホストのIPアドレスを教えてある。これはルーティングテーブルと呼ばれる。ルータは、一方のセグメントのホストから他方のセグメントのホストにパケットが送られようとしていると、一旦後者のホストの代わりにパケットを(前者のLANのプロトコルで)受け取り、ルーティングテーブルを参照してどのセグメントに送ればいいかを選択し、そのパケットを後者のLANのプロトコルで後者のホストに送る。ルータはルーティングテーブルによって、あるIPアドレスに送るにはどのセグメントに送ればよいかを把握している。一部が破壊されても、このルーティングテーブルを書き換えるだけで破壊箇所を迂回することが可能になる。

ルータと似ているが、ルーティングテーブルを持たず、異なるLANのプロトコルを変換して互いに中継するブリッジと呼ばれるものがある。しかしブリッジはIPより下位の層(OSI参照モデルのデータリンク層)の機器であり、IPとは関係なく動作する。

また特に、異なるプロトコルを用いるセグメント同士の間をつなぐルータはゲートウェイ(門)と呼ばれる。本来ゲートウェイはOSI参照モデルのネットワーク層におけるブリッジに相当するルータの基本機能の一部なのだが、セグメントのほとんどがイーサネットになっているため、特にセグメントとWANとの間にあるルータだけがゲートウェイであることが多い。またルータが知らないIPアドレスは(ルーティング処理の一環として)全てデフォルトゲートウェイと呼ばれる特別なゲートウェイに送られる。デフォルトゲートウェイは通常WANとの接続部分にあるため、未知のIPアドレスへのパケットは全てWAN側(外の世界)のルータにパケットを送信することになる。そしてWANのルータが送信先となるIPアドレスの存在するセグメントのゲートウェイにパケットを送信し、ゲートウェイが送信先となるIPアドレスを持つホストにパケットを送信することで世界中のホストと通信が行なわれる。

【機能】

Internet Protocol は、ホストのアドレッシングとデータグラム(パケット)の送信元ホストから宛先ホストまでの1つまたは複数のIPネットワークをまたいだルーティングを担当する。このために、ホストの識別と論理的位置サービスの提供という2つの機能を持つアドレッシング体系を定義している。これは、標準データグラムと標準アドレッシング体系を定義することでなされる。

【データグラムの構成】

UDP からリンク層プロトコルのフレームまで、アプリケーションのデータをカプセル化する例

データグラムはヘッダとペイロードで構成される。IPヘッダには、送信元IPアドレス、宛先IPアドレス、データグラムのルーティングや転送に必要なメタデータが含まれる。ペイロードは転送すべきデータである。このようにデータ・ペイロードにパケットのヘッダを付与して入れ子状に構成していくことをカプセル化と呼ぶ。

【IPアドレッシングとルーティング】

IPの最も複雑な部分がIPアドレッシングとルーティングである。アドレッシングとは、各ホストにIPアドレスを割り当てる方法であり、IPホストアドレス群を分割・グループ化してサブネットワークを形成する方法である。IPルーティングは全てのホストが行うが、最も重要な部分はルータが担っており、経路を決定するのに Interior Gateway Protocol (IGP) または Exterior Gateway Protocol (EGP) を使用する。

【信頼性】

IPの設計原理は、ネットワーク基盤はどのネットワーク要素や伝送媒体をとっても本質的に信頼できないと仮定しており、リンクやノードの可用性の面でも一定でないと仮定している。ネットワークの状態を追跡し維持する集中監視機能や性能測定機能は存在しない。ネットワークを単純化するため、知的な部分は意図的に各データ転送の端点であるノードに担わせ、これをエンドツーエンド原理と呼ぶ。転送経路の途中に位置するルーターは、宛先アドレスのルーティングプレフィックスにマッチする最も近いゲートウェイにパケットを転送するだけである。
このような設計の結果、IPはベストエフォート式配送のみを提供し、「信頼できない」と見なされている。ネットワークアーキテクチャとしては「コネクションレス」プロトコルであり、コネクション指向の転送モードとは対照的である。信頼性がないため、データが壊れたり、パケットを消失したり、パケットが複製されたり、パケットの順序が入れ替わって受信されたりする。ルーティングはパケット毎に動的に行われ、ネットワークは以前のパケットが通った経路についても状態情報を保持しない。そのため一部のパケットが他より長い経路を通ることがあり、受信側でパケットを受信する順序がおかしくなる可能性がある。
信頼性のないIPv4で唯一確かなのは、IPパケットのヘッダには誤りがないという点である。ルーティングするノードは、パケットのチェックサムを計算する。もしチェックサムが合わない場合、そのノードはそのパケットを捨てる。そのノードは送信元にも宛先にも捨てたことを通知しないが、Internet Control Message Protocol (ICMP) でそのような通知をすることも可能である。一方、IPv6ではルーティングの高速化を優先してチェックサム計算をやめた。
上位層プロトコルは、この信頼性問題への対処を担う。例えば、アプリケーションにデータを渡す前にデータをキャッシュして正しい順序に並べ替えたりする。
信頼性問題に加え、動的性質とインターネットおよびその構成要素の多様性に関連し、データ転送経路のうちどれが適当かは全く保証できない。技術的制約の1つとして、リンクごとにデータパケットのサイズ上限が異なる。アプリケーションは適切な伝送特性を使うことを保証しなければならない。この責任の一端は、IPとアプリケーションの中間に位置する上位層プロトコル群にもある。ローカルなリンクにおける Maximum Transmission Unit (MTU) のサイズを調べるファシリティがあり、IPv6の場合は宛先までの経路全体を考慮したMTUサイズを調べるファシリティもある。IPv4には元のデータグラムを自動的に断片化する機能がある。この場合、IPは断片化されたパケット群の到着順序を正しく保つ必要がある。
例えば Transmission Control Protocol (TCP) はセグメントサイズをMTUより小さく調整するプロトコルである。User Datagram Protocol (UDP) と Internet Control Message Protocol (ICMP) はMTUサイズを無視するので、必要ならIPが断片化を行う。