IPパケットのフォーマット
IPパケットは以下のようなフォーマットとなっています。
バージョンフィールド
4ビットのフィールドでバージョンを表しています。IPv4を表す場合、4が入ります。ほとんどの場合、IPv4となりますがIPv4のアドレス枯渇に伴って、次世代の仕様であるIPv6が普及されつつあります。IPv6の場合は、6ビットになりますがここではIPv4を前提に説明します。
ヘッダ長フィールド
4ビットのフィールドでIPヘッダの長さを表します。
サービスタイプフィールド
8ビットのフィールドでIPパケットのサービス品質を表します。TOSフィールドともいわれます。ルータでのQoS処理に使われています。TOSフィールドの各フィールドの各ビットは次の通りです。
ビット | 意味 |
---|---|
0,1,2 | 3ビット(0~7)で優先度を表現する |
3 | ビット3が1の場合は低遅延での処理を要求する |
4 | ビット4が1の場合は高スループットを要求する |
5 | ビット5が1の場合は高信頼性を要求する |
6 | ビット6が1の場合は低コストを要求する |
7 | 未使用 |
パケット長フィールド
16ビットのフィールドでヘッダとデータを含めたIPパケット全体の長さを表します。
識別子フィールド
16ビットのフィールドでフラグメント化されたパケットを復元するための識別子になります。同じセグメントからフラグメントされたパケットは同一のIDを持ちます。
フラグフィールド
3ビットのフィールドで、パケットの分割に関する情報を保持します。
フラグフィールドの各ビットの意味は次の通りです。
ビット | 意味 |
---|---|
0 | 未使用、0が入る |
1 | フラグメント化が可能かどうかを示す。ビット1がセットされているときは どんな場合でもそのデータグラムをフラグメントすることはできない。 0の場合はフラグメント化することができる。 |
2 | フラグメント化されている場合にそのフラグメントが最後のものかそれとも 後に続くフラグメントがあるかを示す。 1がセットされていれば後続のフラグメントが存在する。 0がセットされていれば最後のフラグメントを示す。 |
フラグメントオフセットフィールド
13ビットのフィールドで、フラグメント化されたデータの元の位置を示します。そのフラグメントがデータグラムの全体のどの位置にあるべきものなのかを受信側のシステムに知らせます。
生存時間(TTL)フィールド
8ビットのフィールドで、本来はパケットがネットワークに存在することができる時間を秒単位で表すものでした。これは宛先不明などのエラーデータがインターネット上を永遠に徘徊するのを防ぐ意味があります。現在はデバイスの処理能力が上がりましたので、ミリ秒で表現したいところですがビット数が足りません。そこで実際はルータを超える度にマイナス1しています。結果的にTTLはルータをいくつ超えることができるかという意味で使われています。
プロトコルフィールド
8ビットのフィールドで、パケットのペイロードとして運ばれるセグメントのプロトコルつまり上位のトランスポート層プロトコルの指定です。上位層にデータを渡すときの基準になります。代表的なプロトコルであるTCPは6番、UDPは17番です。
ヘッダチェックフィールド
16ビットフィールドで、IPヘッダが破損していないことを保証するチェックサム値が入ります。ヘッダチェックサム計算においてはIPヘッダ全体を16ビットワードの並びとみなし、16ビットワードの1の補数和を計算し結果の1の補数をチェックサムとします。
送信元アドレスフィールド
32ビットのフィールドで、送信元のIPアドレスが入ります。
宛先アドレスフィールド
32ビットのフィールドで、宛先のIPアドレスが入ります。
オプションフィールド
オプションは可変長です。
パディングフィールド
パケットの大きさが、32ビットの整数倍になるように必要なだけ0を挿入します。