Internet Protocol
Internet Protocol (インターネット・プロトコル、IP) はネットワークのネットワークを介し宛先へパケットを送るための通信プロトコルである。
Internet Protocol はネットワークのネットワーク上のホストへデータを送信するための通信プロトコルである。IPの利用によりネットワーク通信実装を意識せず宛先へデータを送信できる(#機能)。IPを用いて接続された世界規模の情報通信網がインターネット(the Internet)であり、他にもイントラネットで利用される。
IPでは各ホストコンピュータに一意の番号/番地であるIPアドレスを割り当て(アドレッシング)、伝達したいデータをパケットへ格納し(カプセル化)、IPアドレスで指定されたホストへパケットを送信する(#仕組み)。
他プロトコルとの関係性という観点では、IPはOSI参照モデルのネットワーク層にほぼ対応する機能を持つ。またインターネット・プロトコル・スイートの中核をなしている。IPはパケット送出手順を指定するが、その到達は保証しないため、保証が必要な場合は上位のプロトコルとしてTCPなどを利用する(#信頼性)。
歴史的には、ヴィントン・サーフとロバート・カーンが1974年に発表した Transmission Control Program のコネクションレスのデータグラムサービス部分がIPとなった。一方のコネクション指向の部分は Transmission Control Protocol (TCP) となった。現在広く利用されているIPは32ビットのアドレス空間を持つ「IPv4」と128ビットのアドレス空間を持つ「IPv6」である(#バージョンと歴史)。
誤解に基づく俗称としてIPアドレスを「IP」と呼ぶことがある。
IPは2つの側面から理解できる。1つはIP層でのデータ転送モデル、もう1つはプロトコルスタックの層を跨いだデータ転送手順である。
IPはネットワークのネットワーク内を「ヘッダに記された宛先アドレスに基づくパケット転送」によりデータを送信する。
パケット(packet)はIPにおける送受信単位である。パケットはヘッダとペイロードからなり、ヘッダに基づき宛先アドレスへの経路と送られる。ヘッダ(header)はメタデータの集合であり、バージョン番号・送信元アドレス・宛先アドレスなど、送受信に必要な情報が含まれている。ペイロード(payload)はパケットからヘッダを除いた部分であり、IPで転送したいコンテンツが主体で場合によりメタデータも含む。
パケットは送信元から宛先へ直接送られるのではなく、いくつものホスト (gateway) を経由して送られる。Gatewayはヘッダの宛先アドレスを確認し、宛先への経路上にある次のGateway(あるいは宛先そのもの)へとパケットを転送する。これを繰り返し、最終的に宛先アドレスへとパケットが到着する。
経路上に転送可能サイズ上限があった場合、パケットが弾かれる可能性がある。IPではパケット長制限が無い代わりに、フラグメント化機能(パケットを小パケットへ分割する機能)を提供してこの制約を回避する。
IPはプロトコルスタックの1層をなす。すなわち上層から転送対象(≒ペイロード)と宛先アドレス(∈ヘッダ)を受け取り、リンク層へパケットを渡す。
IPでは、各々のLANで通信可能な範囲をセグメントと呼び、セグメント内のコンピュータをホストと呼ぶ。同じセグメントに属するホスト同士はそのLANで使用されている通信プロトコルをデータリンク層とし、その上のネットワーク層で稼動する。
つまり同じセグメントに属するホスト同士は、IP以前からそうであったように直接通信する。IPはセグメントの外と通信することが可能であり、そして何も変更せずに(全く同じ機器/ソフトウェア構成で)セグメント内とセグメント外との区別なく通信が可能となることである。そのため、最近はLAN内の通信なのにわざわざIPを使うイントラネットを採用することで、インターネット用のソフトウェア資産やノウハウをそのままLAN内通信に利用することが多くなってきている。
同じセグメント内のホスト同士の通信では、そのLANで使われているプロトコルを使って通信する。そのためIPの各実装では、そのLANで使われているプロトコルから完全に独立することはできない。
まず、送信先となるIPアドレスを持つホストにデータリンク層のデータとして送信するために必要な情報を収集しなければならない。例えばイーサネットであれば、送信先となるIPアドレスを持つホストのインターフェースが持つMACアドレスである。そのためにブロードキャストもしくはマルチキャストによって「この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つの機能を持つアドレッシング体系を定義している。これは、標準データグラムと標準アドレッシング体系を定義することでなされる。
データグラムはヘッダとペイロードで構成される。IPヘッダには、送信元IPアドレス、宛先IPアドレス、データグラムのルーティングや転送に必要なメタデータが含まれる。ペイロードは転送すべきデータである。このようにデータ・ペイロードにパケットのヘッダを付与して入れ子状に構成していくことをカプセル化と呼ぶ。
IPアドレッシングとは、各ホストにIPアドレスを割り当てる方法であり、IPホストアドレス群を分割・グループ化してサブネットワークを形成する方法である。IPルーティングは全てのホストが行うが、最も重要な部分はルータが担っており、経路を決定するのに Interior Gateway Protocol (IGP) または Exterior Gateway Protocol (EGP) を使用する。
IPは「独立した単一パケットを、送信元から宛先へ、ネットワークのネットワークを介して、送ること」のみを上手くシンプルに扱うよう設計されている。ゆえに意図時に提供しない機能がある。
データ信頼性(data reliability)/ 再送(retransmission)
流量制御(flow control)
順序制御(sequencing)
すなわち、送出に焦点を合わせているのでACKチェックや再送をおこなわない。また単一パッケージ管理を扱うので複数パケットに跨る流量制御や順序制御には関与しない。
IPの設計原理は、ネットワーク基盤はどのネットワーク要素や伝送媒体をとっても本質的に信頼できないと仮定しており、リンクやノードの可用性の面でも一定でないと仮定している。ネットワークの状態を追跡し維持する集中監視機能や性能測定機能は存在しない。ネットワークを単純化するため、知的な部分は意図的に各データ転送の端点であるノードに担わせ、これをエンドツーエンド原理と呼ぶ。転送経路の途中に位置するルーターは、宛先アドレスのルーティングプレフィックスにマッチする最も近いゲートウェイにパケットを転送するだけである。
このような設計の結果、IPはベストエフォート式配送のみを提供し、「信頼できない」と見なされている2020年1月。ネットワークアーキテクチャとしては「コネクションレス」プロトコルであり、コネクション指向の転送モードとは対照的である。信頼性がないため、データ破壊、パケットを消失したり、パケットが複製されたり、パケットの順序が入れ替わって受信されたりする。ルーティングはパケット毎に動的に行われ、ネットワークは以前のパケットが通った経路についても状態情報を保持しない。そのため一部のパケットが他より長い経路を通ることがあり、受信側でパケットを受信する順序がおかしくなる可能性がある。
信頼性のない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が断片化を行う。
1974年5月、Institute of Electrical and Electronic Engineers (IEEE) が "A Protocol for Packet Network Intercommunication" と題した論文を公表した。この論文で筆者ヴィントン・サーフとロバート・カーンは、ノード間のパケット交換を使ってリソースを共有するインターネットワーキング・プロトコルを記述した。このモデルの中心となる制御コンポーネントが "Transmission Control Program" (TCP) で、コネクション指向のリンクとデータグラムサービスの両方を含んでいた。モノリシックな Transmission Control Program は後にモジュール化され、コネクション指向層の Transmission Control Protocol とインターネットワーキング(データグラム)層の Internet Protocol に分けられた。このモデルが一般に TCP/IP と呼ばれ、正式にはインターネット・プロトコル・スイートと呼ばれている。
Internet Protocol はインターネットを定義する要素の1つである。インターネット層におけるインターネットワーキング・プロトコルで2012年現在主に使われているのはIPv4である。この4という番号はプロトコルのバージョン番号で、全てのIPデータグラムの先頭に書かれている。IPv4は RFC 791 (1981) で記述されている。
IPアドレスの不足が発生することが予測されることから開発されたIPv4の後継がIPv6である。バージョン4からの最大の変更点はアドレッシング体系である。IPv4は32ビットのアドレス(約40億、4.3×109)を使っていたが、IPv6では128ビットのアドレス(約 3.4×1038)を使っている。IPv6の採用はゆっくりとしていたが、2008年6月、アメリカ合衆国連邦政府がバックボーンレベルのみではあるが全システムでIPv6をサポートしてみせた。
IPのバージョン0から3まではIPv4の開発途中のバージョンで、1977年から1979年までに使われた。バージョン5は実験的なストリーミング用プロトコル Internet Stream Protocol で使われた。バージョン6から9までは、IPv4の後継として提案された各種プロトコルである。このうちバージョン6とされた SIPP (Simple Internet Protocol Plus) が IPv6 として採用されることになった。7から9は IP/IX (RFC 1475)、PIP (RFC 1621)、TUBA (TCP and UDP with Bigger Addresses, RFC 1347) である。
他にも IPv9や IPv8 を名乗ったプロトコルが提案されたことがあるが、全く支持されていない。
1994年4月1日、IETFはエイプリルフールのジョークとしてIPv9を発表したことがある。
IPは様々な攻撃に対して脆弱である。網羅的な脆弱性アセスメントが対策の提案と共に2008年に公表され、その後IETF内で対策を検討中である。