IPは「Internet Protocol」の略で、インターネット層の中心的なプロトコルです。その目的は、いくつものネットワークを通じてつながっているコンピュータの間で「IPアドレスを元にIPパケットを中継する」という重要な役割を担当しています。
IPは、インターネットをはじめとして、家庭や企業のLAN、通信事業者、IP電話事業者のネットワークなど、あらゆるところで使用されています。
IPパケットを中継する役割を果たすの装置がルーターです。(最近は、ルーターと比べてより高速なL3スイッチも多く使われています。)
IPパケットを受け取ったルーターは、IPパケットのヘッダを参照し、適切な転送先を自身で判断してIPパケットを中継します。いくつものルーターがこうした処理を繰り返すことで、IPパケットはバケツリレーのように転送され、最終的な宛先へ送られます。
IPは「本当に届いたかどうかの確認」や「宛先に届かなかった場合の再送信」などは行いません。これらの機能が必要な場合は、TCPなどの上位層のプロトコルが担当します。
なお、TCPとUDPは、下位層のプロトコルに必ずIPを使用します。
下図がIPパケットの構造になります。
項目 | 内容 |
---|---|
バージョン | IPのバージョン。IPv4の場合は「4」がセットされる。 |
IPヘッダ長 | 4ビットのフィールドで、IPヘッダのサイズを4で割った値がセットされる。通常の通信では、IPはオプションを使用しないため、ほとんどのIPヘッダのサイズは20バイトになる。この場合、「5」がセットされる。 |
サービスタイプ(Type Of Service) | TOSフィールドとも呼ばれる。QoSを行う場合に利用する。 |
IPデータグラム長 | IPデータグラム(IPヘッダ + データ)のサイズをバイト単位で表す。IP自体は最大65,535バイトまで扱うことができるが、実際のIPデータグラムのサイズはデータリンク層のプロトコルが扱えるMTU※1に依存する。 |
ID(Identification)、フラグ、フラグメントオフセット | データリンク層のMTUを超えるような大きいパケットが生成された場合、IPはデータリンク層のMTUに合わせてパケットを分割する。 分割されたパケットは受信側ホストで再構築される。受信側でパケットが正しく再構築できるように必要な情報を提供するのが、ID、フラグ、フラグメントオフセットとなる。 |
生存時間(Time To Live:TTL) | 一般的には、TTLと呼ばれる。8ビットのフィールドで、パケットがネットワークに存在できる時間を秒数で表す。 TTLの値は、送信元ホストによって初期値が設定され、ルータがパケットを中継するたびに中継処理にかかった秒数(1秒未満の場合は1)ずつ減らされる。※2 |
プロトコル | 8ビットのフィールド。上位層のプロトコルを番号で表す。※3 |
ヘッダチェックサム | 16ビットのフィールドで、受信側でエラーチェックを行うための値がセットされる。 |
送信元アドレス(Sorce Address)、宛先アドレス(Destination Address) | それぞれ32ビットのフィールドで、送信元のIPアドレスと宛先IPアドレスがセットされる。 |
オプション | 可変長のフィールド。テストやデバッグなどを行うときに使用する。 |
パディング | パディングとは「詰め物」のこと。オプションフィールドが32ビットの整数倍にならない場合に、IPヘッダサイズの調整のために0が挿入される。 |
※1 MTU(Maximun Transmission Unit)とは、プロトコルがPDUで扱える最大データサイズのこと。例えば、イーサネットのMTUは1,500バイトなので、イーサネット上でTCP/IPを使用している場合は、IPデータグラムのサイズは1,500バイトが上限になる。
※2 IPでは、TTLが0になった時点で、ルータによって自動的に破棄されるルールになっている。このため、管理者が誤ったルーティングテーブルを設定してしまい、ルーティングループが発生した場合でも、TTLが0になれば無駄な中継処理を終わらせることができる。また、パケットを破棄したルータは、送信元ホストに「ICMP時間超過メッセージ」を自動的に送信することで、TTLが0になったためパケットを破棄したことを伝える。
※3 受信側ホストでは、このフィールドの値を見て、次に処理を渡すプロトコルを判断する。代表的な番号は以下のとおり。
値 | 対応するプロトコル |
---|---|
1 | ICMP(Internet Control Message Protocol) |
6 | TCP(Transmission Control Protocol) |
17 | UDP(User Datagram Protocol) |