IPv4のパケットフォーマットについて
この記事ではIPv4のパケットフォーマットについてまとめます。ネットワーク層で使われるプロトコルといえばIPであり、上位層・下位層で使われる技術の違いを吸収する大切な役割も担っています。
パケットフォーマットを中心にその機能を整理していきたいと思います。
IPv4とは?
1981年に発行されたRFC791で標準化されているコネクションレス型のプロトコルです。元々IPにはIPv4(Internet Protocol version 4)、IPv6(Internet Protocol version 6)の2種類があります。2つは似たような名前ですが直接的な互換性はないので注意して下さい。
IPパケットとは?
IPによってカプセル化されるパケットのことです。IPでカプセル化される(プラスで付与される)情報として代表的なモノはなんといってもIPアドレスです。ネットワーク層といえばこのIPの仕組みを理解することが1番のテーマである..といっても過言ではありません。
パケットフォーマット(表形式,帯形式s)
IPv4のパケットフォーマットは以下です。
ちなみにこちらを帯形式で表すと以下のようになります。どちらも同じ内容なので見やすい方で構いませんが、フィールドの要素が多いので表形式を使って今回は解説していきます。
IPパケットは大きく2つの部分から構成されています。制御情報をセットするIPヘッダと、データそのものを表すIPペイロードの2つです。IPヘッダの中にはIPアドレスや識別子などの重要な情報が詰まっており、これらの中身を学ぶことが今回のテーマとなっています。逆にIPペイロードとは上位層から受け渡されたデータのことであり、アプリケーションの種類によって様々なデータがIPパケットに格納されることになります。
IPv4パケットのフォーマットについて
ここからIPv4ヘッダの各フィールドについてまとめていきます。
バージョン
IPのバージョンを表す情報です。4ビットのフィールであり、IPv4の場合は4
、IPv6の場合は6
が入ります。
ヘッダー長
IPv4のヘッダの長さを表す情報です。パケットを受け取る端末はヘッダ長を見ることで、どこまでがIPv4ヘッダであるかを知ることができます。
ToS(Type of Service)
IPパケットのタイプを区別するための情報です。具体的には優先制御・帯域制御・輻輳制御などのQoS(Quolity of Service)で使用します。多くの場合パケットの優先順位を指定する際に使われます。例えばIP電話のように届くのが遅れると品質が落ちるモノについては、ルーターが優先してパケットを転送するようになります。
パケット長
ヘッダとペイロードを合わせたパケット全体の長さを表すための情報です。パケットを受け取る端末はパケット長の長さを見ることによって、どこまでがIPv4パケットなのかを知ることができます。
識別子
分割されたパケットを元のデータに再構成するための情報です。パケットが分割された時にそれぞれのパケットを同じ識別番号にすることで、受信側でバラバラにパケットを受信しても正しく再構成することができます。
(補足)IPフラグメンテーション
ネットワーク通信においてデータを送信する際、データはそのまま送られる訳ではありません。細切れにしてIPパケットに詰め込まれ、データリンク層によって運ばれていきます。
IPでデータを小分けにする処理のことをIPフラグメンテーションと呼びます。フラグメンテーションはパケットを学ぶ際によく出てくる言葉なので覚えておきましょう。
フラグ
パケット分割(フラグメント化)に関する制御情報です。3ビットで構成されており、それぞれ意味する内容は異なっています。1ビット目は使用しない(0が入る)ので、ここでは2ビット,3ビット目を中心に解説します。
2ビット目:フラグメンテーションを許可するかどうか
DF(Don't Forget)ビットとも呼ばれ、IPパケットをフラグメンテーションして良いかどうかを表します。0
だったらフラグメンテーションを許可し、1
だったらフラグメンテーションを許可しません。
3ビット目:最後のパケットであるかどうか
MF(More Fragments)ビットとも呼ばれ、分割されたパケットの最後のモノであるかどうかを表します。0
だったら最後のパケットであることを表し、1
だったら分割されたパケットが後からも続くこと(それ自体は途中のパケットであること)を表します。
フラグメントオフセット
フラグメントされたパケットが元のパケットのどの位置であったかを示す情報です。オフセットという言葉があるように、先頭からどこに位置しているかを表します。バラバラにされたパケットがあった時に、最初のパケットには0
が、その後のパケットには位置を示した値が入ります。パケットを受け取る端末はこの値をみてIPパケットの順序を正しく並び替えます。
TTL
Time To Liveの略であり、パケットの寿命を表す情報です。IPパケットの寿命は経由するルーターの数によって表されます。経由するルーターの数をホップ数とも呼びます。TTLの値はルーターを経由するたびに1つずつ減っていき、値が0になるとパケットは破棄されます。
プロトコル番号
上位のトランスポート層で使用しているプロトコルを表す情報です。TCPは6
、UDPは17
が入ります。
番号 | プロトコル名 |
---|---|
1 | ICMP |
2 | IGMP |
6 | TCP |
17 | UDP |
47 | GRE |
50 | ESP |
88 | EIGRP |
89 | OSPF |
112 | VRRP |
ヘッダーチェックサム
IPv4ヘッダの整合性をチェックするための情報です。1の補数による演算を行ってパケットが伝送途中で破損していないかチェックします。
送信元/宛先IPv4アドレス
その名の通り、送信元と宛先のIPアドレスを表します。IPアドレスとはインターネット世界における住所のような情報です。ルーターはIPアドレスの情報を元に転送先のルーターを判断します。
オプション
IPv4パケット通信における拡張機能を格納するためのフィールドです。基本的には使用されないと思って頂いて結構です。
パディング
IPv4ヘッダの大きさを整えるためのフィールドです。IPv4ヘッダは仕様上4バイト(32ビット)である必要があります。オプションの長さは決まっていないため、パディングで大きさを調整して4バイトに合わせます。
Discussion