IPとは

IP(Internet Protocol)はTCP/IPの名前に含まれているように、TCP/IPのさまざまなプロトコルの中でもとても重要なプロトコルです。まずは、IPの役割を明確にしておきましょう。

IPの役割は、「エンドツーエンドの通信を行う」ことです。

つまり、ネットワーク上のあるホストから別のホストへのデータを転送するのがIPの役割です。送信元ホストと宛先ホストは、同じネットワーク上でも異なるネットワークでもどちらでもよいです。

IPでデータを転送するためには、データのIPヘッダを付加して、「IPパケット」とします。宛先が異なるネットワークに接続している場合は、間にルータが存在します。送信元ホストから送信されたIPパケットは、経路上のルータが転送して最終的な宛先ホストまで送り届けられます。ルータがIPパケットを転送することを指して「ルーティング」と呼びます。

図 IPによるエンドツーエンド通信

IPヘッダだけではなく、ネットワーク上に送り出すためにさらにイーサネットなどのネットワークインタフェース層のプロトコルのヘッダも付加されます。

IPにとってのデータは「TCP」や「UDP」などのトランスポート層プロトコルであることがほとんどです。そして、TCPやUDPにとってのデータがHTTPなどのアプリケーションプロトコルです。

なお、IPには現在広く利用されているIPv4からIPv6へ移行しようとしています。IPv4でもIPv6でも「エンドツーエンドの通信を行う」という基本の役割は共通です。IPv6を理解するためにも、IPv4の役割や仕組みを理解しておくことがとても重要です。

IPヘッダフォーマット

IPでデータを転送するために付加するIPヘッダのフォーマットは以下のとおりです。

図 IPv4ヘッダフォーマット

バージョン

「バージョン」にはそのものずばりのIPのバージョンが入ってきます。現在のIPのバージョンは「4」です。そして、IPの次のバージョンは「6」となります。バージョン4の次が5を飛ばして6になっています。バージョン5はすでに実験用に使われているので、「4」の次は「6」となっています。

ヘッダ長

ヘッダ長にはIPヘッダの長さが入ります。ただし実際の長さが入ってくるのではなく、4バイト単位の長さです。つまり標準ではIPヘッダは20バイトですので、ヘッダ長は「5」です。

サービスタイプ

サービスタイプはQoS(Quality of Service)制御で利用します。QoSとは、主にルータやスイッチなどのネットワーク機器でデータを転送する際に優先度に応じた転送を行う制御です。サービスタイプでデータを優先度に応じてIPパケットをグループ化することができます。

パケット長

パケット長ではヘッダを含めたIPパケット全体の長さが入ってきます。生のデータの長さを知りたいときには、パケット長-ヘッダ長でわかります。

識別番号、フラグ、フラグメントオフセット

「識別番号」「フラグ」「フラグメントオフセット」はデータの分割と組み立てに関わってくる情報です。

ただし、現在ではIPでのデータの分割や組み立てを行うことはあまりありません。IPの上位のプロトコルであるTCPでの分割し、IPでの分割が発生しないようにすることが多くなっています。

TTL(Time To Live)

「TTL」とは Time To Live の略でパケットの生存時間を表していす。実際には「パケットが何台のルータを経由することができるか?」ということを表しています。TTLは、ルータのルーティングテーブルに不整合があり、IPパケットがネットワーク内を延々とループしてしまうことを防ぐためのものです。

ルータを経由するごとにTTLが-1され、TTLが0になるとルータはそのIPパケットを破棄します。

プロトコル番号

「プロトコル番号」とは上位のプロトコルが何かを識別するための番号です。IPの上位層のトランスポート層にはTCPとUDPの2つのプロトコルがありますが、そのどちらにデータを渡せばいいのかということをプロトコル番号で識別します。また、インターネット層に含まれるICMPやOSPF、IGRP、EIGRPといったプロトコルもIPヘッダを付加してIPパケットとして運ばれます。つまり、IPで運ぶプロトコルがどんなプロトコルであるかを識別するのがプロトコル番号です。

主なプロトコル番号は次の表の通りです。

プロトコル番号 プロトコル
6 TCP
17 UDP
1 ICMP
89 OSPF
88 EIGRP

なお、プロトコル番号はIPヘッダの次のヘッダを表しているとも考えられます。データにIPヘッダを付けてIPパケットとしていますが、IPにとってのデータにはさまざまなプロトコルのヘッダが付加されています。プロトコル番号を見れば、IPヘッダの次のヘッダがどんなプロトコルのものであるかがわかります。

図 プロトコル番号の意味

ヘッダチェックサム

IPヘッダにエラーがないかどうかをチェックするためのフィールドです。

送信元IPアドレス、宛先IPアドレス

送信元と宛先IPアドレスが入ります。送信元IPアドレスは必ずユニキャストアドレスになります。ブロードキャストアドレスやマルチキャストアドレスが送信元IPアドレスフィールドに入ることはありません。

オプション、パディング

オプションフィールドによって明示的にどの経路を通るのかを指定することができます。これをソースルーティングと呼んでいます。ただし、セキュリティ上インターネット上のルータではソースルーティングを指定しているパケットは捨てられてしまう可能性があります。また、ほかにも経路上のタイムスタンプを取得するなどの使い方があります。オプションはIPの実験を行うためにさまざまな用途で利用されていましたが、現在ではほとんど使うことがなく、IPヘッダのオプションはないものと考えて差し支えありません。

また、パディングはIPヘッダのサイズを調整するためのものです。オプションが付加された場合、パディングを付加してIPヘッダのサイズが4バイト(32ビット)の倍数になるようにします。オプションを付加することはほとんどないので、パディングが付加されることもまずありません。

IPヘッダの中で大事なのはIPアドレス

エンドツーエンド通信を行うために、IPヘッダ内で一番重要な情報は宛先/送信元IPアドレスです。TCP/IPで通信するときには、IPアドレスを必ず指定していることを忘れないでください。

IPアドレスについての詳細は「IPアドレッシング」にまとめています。

ただし、アプリケーションを利用するユーザには、IPアドレスを指定していることを意識させないようにしています。IPアドレスは数字の羅列なので、ユーザにとってはわかりづらいためです。Webブラウザやメールソフトなどでは、ユーザは宛先IPアドレスを指定しなくてもよいようにしています。ですが、必ずIPアドレスが必要です。

ユーザにIPアドレスを意識させませんが、IPアドレスを指定できるようにするためにDNSがあります。DNSもTCP/IPの通信を支えるとても重要なプロトコルです。