概要

IP(Internet Protocol)とは、データ転送プロトコルです。IPによって、あるホストから別のホストまで物理的にどんなに遠くはなれていてもデータを送り届けることができます。IPのデータ転送の仕組みとそれを実現するためのIPv4ヘッダフォーマットについて解説します。

IPとは

IP(Internet Protocol)はTCP/IPの名前に含まれているように、TCP/IPのさまざまなプロトコルの中でもとても重要なプロトコルです。IPv4の基本的な仕様はRFC791で定義されています。

まずは、IPの役割を明確にしておきましょう。

IPの役割は、「 ネットワーク上のあるホストから別のホストへのデータを転送する 」ことです。このことを「エンドツーエンド通信」とも表現します。

図 IPの役割
図 IPの役割

「ホスト」とは、TCP/IPを利用している機器全般を指します。具体的にはPC/スマートフォン/サーバやルータ/レイヤ3スイッチなどのネットワーク機器が「ホスト」です。送信元ホストと宛先ホストは、同じネットワーク上でも異なるネットワークでもどちらでもよいです。このWebページをご覧いただいているということは、まさにIPでデータを転送したことになります。

IPでのデータの転送

IPでデータを転送するためには、転送したいデータにIPヘッダを付加して、「IPパケット」とします。そして、IPパケットをネットワークに送り出せばいいだけです。

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

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

でも、IPだけではダメ

ただし、IPだけで目的の宛先までデータが届くわけではありません。IPには「0」「1」のデータを電気信号や電波などの物理的な信号に変換するような機能はないからです。このことをきちんと理解しておきましょう。

IPパケットをネットワーク上に送り出すためには、さらにイーサネットやWi-Fiなどのネットワークインタフェース層のプロトコルが必要です。イーサネット/Wi-Fiは、「0」「1」のデータを電気信号や電波といった物理的な信号として送り届けるためのプロトコルです。

IPパケットをさらにイーサネット/Wi-Fiなどのネットワークインタフェース層プロトコルのヘッダでカプセル化し物理的な信号に変換して、ネットワーク上に送り出します。

図 IPとイーサネット/Wi-Fi

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

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

IPでのデータの転送のイメージ

IPヘッダでカプセル化してデータを転送することは、宛先と送信元の間で仮想的なトンネル(通信経路)を作成するイメージです。ネットワーク、特にインターネット上には膨大な数のホストが存在します。でも、関係のないところにはデータは転送されていきません。宛先IPアドレスのホストにだけ転送されるからです。そうなるように、ルータ/レイヤ3スイッチがルーティングします。

図 IPの転送は仮想的なトンネルを作成する
図 IPの転送は仮想的なトンネルを作成する

ただ、IPの仮想的なトンネルは事前に作っているわけではありません。経路上のルータやレイヤ3スイッチがIPヘッダに基づいて転送した結果として作成されます。このようなIPの特徴がコネクションレス型転送プロトコルです。途中の経路は固定的なものではなく、変わる可能性があります。

こうしたIPで作る仮想的なトンネルは単方向です。データの行きと返りで、別々のIPによるトンネルができます。

IPv4ヘッダフォーマット

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

図 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アドレスは数字の羅列なので、ユーザにとってはわかりづらいためです。Webブラウザやメールソフトなどでは、ユーザは宛先IPアドレスを指定しなくてもよいようにしています。ですが、必ずIPアドレスが必要です。

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

まとめ

ポイント

  • IPによってあるホストから別のホストまでデータを転送できます。転送したいデータにIPヘッダを付加した「IPパケット」をネットワーク上に送り出しせばOKです。
  • ただ、IPだけではダメです。ネットワーク上に送り出す、すなわち、「0」「1」を物理的な信号とするためにイーサネット/Wi-Fiなどと組み合わせます。
  • IPヘッダの中で最も重要な情報は、IPアドレスです。IPでのデータの転送には必ずIPアドレスが必要です。

TCP/IP