IPデータグラムとIPヘッダ
通信相手のアドレス情報を取得した後は、実際にデータを含んだパケットを送り出して行くわけですが、IP層から送り出されるパケット(IPデータグラム)は、IPヘッダとデータからなっています。
ここでは、IPデータグラムとIPヘッダについて説明してゆきます。
IPデータグラム
IPヘッダの基本ヘッダ部分は、20バイト(160bit)で構成されています。オプションは、必ず付けなければならないというものではありません。

IPヘッダ
IPヘッダ内の各フィールドの情報について説明していきます。
IPヘッダは、基本ヘッダのサイズが20バイトなので、標準で20バイトです。これにオプションを付けると20バイトを超えることになりますが、全体のサイズは、必ず4の倍数のバイト数になるように調整されるようになっています。

各フィールドの説明は、以下の通りです。
1.バージョン(4bit)
「4」であれば、IPv4、「6」であれば、IPv6であることを示します。
プロトコル番号 | プロトコル |
4 | IPv4 |
6 | IPv6 |
7 | TP/IX |
8 | PIP |
9 | TUBA |
2.ヘッダ長(4bit)
IPヘッダーの長さを示します。
3.TOS:サービスタイプ(8bit)
TOS(Type of Service)ビットには、IPパケットの優先順位を決めるための数値が格納されます。
4.パケット長(16bit)
IPヘッダとデータを含めたパケット全体の長さ示します。
次の3つの情報、「識別番号」、「フラグ」、「フラグメントオフセット」は、データの分割と組み立てに関わる情報です。
5.識別番号(16bit)
大きなデータを運ぶ時、ネットワークの境界で、MTUのサイズを超えてしまう場合があります。このデータを送るには、複数のパケットにに分割して送る必要があります。その際、もとは同じで分割されたデータなのか、全く別のデータなのかを識別するために使用します。
分割されたデータのIPヘッダ内の「識別番号」には、全て同じ値が入ります。「識別番号」が同じであれば、もとのデータは、もともとは、1つのデータであったことが分かります。
6.フラグ(3bit)
IPパケットの分割を制御する時に使用されます。
ビット番号 | 意味 |
ビット0 | 予約(未使用) |
ビット1 | 分割を許可するかしないかを表す値 |
0 ・・・ 分割可 | |
1 ・・・ 分割不可 | |
ビット2 | フラグメントが最後かどうかを表す値 |
0 ・・・ 最後のフラグメントであることを示す。 | |
1 ・・・ 後続のパケットが存在することを示す。 |
7.フラグメントオフセット(13bit)
分割されたパケットが、元のデータでは、どこの位置にあるのかを表します。単位は8オクテットで、最大8×8,192(213)=65,536オクテットになります。
8.TTL:生存時間(8bit)
TTL(Time to Live)は、生存時間です。ルータを経由する度に基本的には、1づつ減ってゆき、0になった時点でパケットが破棄されるようになっています。
9.プロトコル(8bit)
IPの上位層プロトコルを表し、次のプロトコルが定義されています。
プロトコル番号 | プロトコル |
0 | 予約 |
1 | ICMP |
4 | IP |
5 | ST(データストリーム |
6 | TCP |
17 | UDP |
46 | RSVP |
88 | IGRP |
10.ヘッダチェックサム(16bit)
IPパケットに誤りがないかどうかをチェックするためにあります。TTL値は、ルータを経由する度にTTL値が変わるので、ルータを経由する度に、各ルータで再計算されます。
めにあります。
11.送信元IPアドレス(32bit)
送信元のIPアドレスが入ります。
12.宛先IPアドレス(32bit)
宛先のIPアドレスが入ります。
13.オプション(可変)
IPパケットに付加するオプションを指定します。
14.パディング:Padding(可変)
オプションを指定した場合、長さが32ビット(4バイト)の倍数のバイト数になるように0で穴埋め(パディング)をして調整するために使用します。