TCP/IPヘッダ構造

スポンサーリンク
スポンサーリンク

1. IPv4

以下の図はRFC 791からの抜粋です。この図をもとに説明します。

Version

IPバージョンが格納されます。バージョンは4です。

IHL

4オクテット単位でIPヘッダーサイズを表します。IPヘッダーは最低20バイトなので、ここの値は最低でも5が格納されます。

Type of Service

TOS値が入ります。IdentificationID番号が格納されます。パケットがフラグメント化された際はこのID番号を基に再構築されます。

Flags

3ビットのフラグはフラグメント状態を示します。

Fragment Offset

先頭パケットからのオフセット値を、8オクテット単位で示します。

Time to Live

TTLが格納されます。Protocol上位プロトコルのプロトコル番号が格納されます。

Heaer Checksum

IPヘッダーのチェックサムが格納されます。

Source Address

送信元IPアドレスが格納されます。

Destination Address

送信先IPアドレスが格納されます。

Options

タイムスタンプやソールルーティングなどオプションがあればここに格納されます。

Padding

Optionsは可変長のため、4の倍数に収まるようにPaddingします。

2. TCP

以下の図はRFC793からの抜粋です。この図をもとに説明します。

Source Port

送信元ポート番号が格納されます。

Destination Port

送信先ポート番号が格納されます。

Sequence Number

シーケンス番号が格納されます。

Acknowledgment Number

確認応答番号が格納されます。

Data Offset

4オクテット単位でTCPヘッダーのサイズを表します。TCPヘッダーは最低20バイトなので、ここの値は最低でも5が格納されます。

Reserved

予約領域です。常に0が格納されます。

URG

緊急ポインタを示すフラグです。

ACK

確認応答を示すACKフラグを示すフラグです。

PSH

データ送信要求時に使用されるフラグです。

RST

コネクションのリセットを示すフラグです。SYN3WAYハンドシェークで使用される、同期要求を示すフラグです。

FIN

送信するデータがない事を示し、コネクションの終了を示すフラグです。

Window

ウィンドウサイズが格納されます。この値は、送信者が確認応答を待たず送信できるサイズを示します。

Checksum

チェックサムが格納されます。

Urgent Pointer

緊急ポインタは正しくは帯域外データの最後のバイトを指す現在のシーケンス番号からのオフセット値を格納します。RFC793の説明(緊急ポインタが帯域外データの次のバイトを指す)は間違っていて、RFC 1122の4.2.2.4で訂正していますが、現在のTCP/IPの実装はRFC793の動作をエミュレートしています。

Options

可変長のTCPオプションが格納されます。

Padding

4の倍数に収まるように、Paddingします。

3. UDP

以下の図はRFC768からの抜粋です。この図をもとに説明します。

Source Port

送信元ポート番号が格納されます。

Destination Port

送信先ポート番号が格納されます。

Length

UDPヘッダーと後続のデータサイズの合計が格納されます。

Checksum

チェックサムが格納されます。UDPのチェックサムは0にすることもできます。0にした場合は、受信側がチェックサムの計算をおこなわないため、途中でパケットが壊れていても検知することができません。

4. ICMP

RFC792から抜粋した図をもとに説明します。

ICMPはその性質上、様々なタイプがありますが、多くはセキュリティの問題からファイアウォールで弾かれるか、受信したネットワーク機器側で破棄されることに注意してください。

4.1 Destination Unreachable Message – 到達不能メッセージ

データグラムの宛先フィールドに指定されたネットワークへ到達できなかった場合、ゲートウェイはデータグラムの送信元ホストへ到達不能メッセージを送信してもよい。また、送信先ポート番号の動作していない場合やプロトコルモジュールが動作していない場合、宛先ホストは送信元ホストへ到達不能メッセージを送信してもよい。別のケースとして、転送にフラグメント化が必要だがDFフラグがセットされていて転送できない場合、ゲートウェイはデータグラムを破棄せねばならず、送信元ホストへ到達不能メッセージを送信してもよい。

Type

タイプコードは「3」

Code

0 – ネットワーク到達不能
1 – ホスト到達不能
2 – プロトコル到達不能
3 – ポート到達不能
4 – フラグメント化が必要だがDF(Don’t Fragment)がセットされている
5 – ソースルーティング不能

Checksum

チェックサム

unused

ここは使用しない

Internet Header + 64bits of Original Data Datagram

到達不能を送信する元となったパケットのIPヘッダとそれに続く8バイトのデータを格納する

4.2 Time Exceeded Message – 時間超過メッセージ

データグラム処理中にTTLが0になった場合、ゲートウェイはデータグラムを破棄しなければならない。その際、ゲートウェイは送信元ホストへ時間超過メッセージを送信してもよい。また、フラグメント化されたデータグラムをホストが再構築するとき、制限時間内に再構築が完了できなければホストはデータグラムを破棄しなければならず、その際時間超過メッセージを送信してもよい。

Type

タイプコードは「11」

Code

0 – 生存時間を超過した
1 – フラグメント再構築時間を超過した

Checksum

チェックサム

unused

ここは使用しない

Internet Header + 64bits of Original Data Datagram

時間超過を送信する元となったパケットのIPヘッダとそれに続く8バイトのデータを格納する

4.3 Parameter Problem Message – パラメータ異常メッセージ

データグラムを処理しているゲートウェイまたはホストがヘッダパラメータに問題を発見し処理できない場合、データグラムを破棄しなければならない。その際、ゲートウェイまたはホストは送信元ホストへパラメータ異常メッセージを送信してもよい。
ポインタは元のデータグラムのヘッダ内のエラーが検出されたオクテットを示す位置を表す。

Type

タイプコードは「12」

Code

0 – エラーを指すポインタ

Checksum

チェックサム

Pointer

Codeが0の場合、エラーが見つかったオクテットを指す

unused

未使用

Internet Header + 64bits of Original Data Datagram

パラメータ異常を送信する元となったパケットのIPヘッダとそれに続く8バイトのデータを格納する

4.4 Source Quench Message – 送信元抑制メッセージ

ゲートウェイがデータグラムを送信するために必要なバッファ領域が不足した場合、ゲートウェイはデータグラムを破棄してもよい。データグラムを破棄した場合、ゲートウェイは送信元ホストへ送信元抑制メッセージを送信してもよい。また、宛先ホストに処理能力を超えるトラフィックが到達した場合、宛先ホストは送信元ホストへ送信元抑制メッセージを送信してもよい。

Type

タイプコードは「4」

Code

Codeは「0」

Checksum

チェックサム

unused

未使用

Internet Header + 64bits of Original Data Datagram

送信元抑制を送信する元になったパケットのIPヘッダとそれに続く8バイトのデータを格納する

4.5 Redirect Message – リダイレクトメッセージ

送信元ホストからデータグラムを受信した際、ネクストホップが送信元ホストと同じネットワーク上にあれば、ゲートウェイは送信元ホストへリダイレクトメッセーを送信してもよい。
IPソールルートオプションのアドレスフィールドにゲートウェイアドレスが含まれている場合、ゲートウェイはリダイレクトメッセージを送信しない。

Type

タイプコードは「5」Code

0 – ネットワークのためのリダイレクトデータグラム
1 – ホストのためのリダイレクトデータグラム
2 – サービス種別とネットワークのためのリダイレクトデータグラム
3 – サービス種別とホストのためのリダイレクトデータグラム

Checksum

チェックサム

Gateway Internet Address

本来送信されるべきゲートウェイのIPアドレス

unused

未使用

Internet Header + 64bits of Original Data Datagram

リダイレクトメッセージを送信する元になったパケットのIPヘッダとそれに続く8バイトのデータを格納する

4.6 Echo or Echo Reply Message – エコー要求/応答

エコー要求メッセージにデータが含まれている場合、エコー応答に受信したデータを返送しなければならない。
ID番号とシーケンス番号は、エコー要求送信者がエコー要求とその応答を対応させるために使用する。シーケンス番号は送信するたびに増加させてもよい。エコー応答送信者は、エコー応答を送信する際に同じ値を返す。

Type

8 – エコー要求
0 – エコー応答

Code

コードは「0」

Checksum

チェックサム

Identifier

ID番号(0でも良い)

Sequence Number

シーケンス番号(0でも良い)

4.7 Timestamp or Timestamp Reply Message Message – タイムスタンプ要求/応答メッセージ

ID番号とシーケンス番号は、タイムスタンプ要求送信者がタイムスタンプ要求とその応答を対応させるために使用する。シーケンス番号は送信するたびに増加させてもよい。タイムスタンプ応答送信者は、タイムスタンプ応答を送信する際に同じ値を返す。

Type

13 – タイムスタンプ要求
24 – タイムスタンプ応答

Code

コードは「0」

Checksum

チェックサム

Identifier

ID番号

Sequence Number

シーケンス番号

Originate Timestamp

送信者が送信した時刻

Receive Timestamp

受信者が受信した時刻

Transmit Timestamp

受信者が返送した時刻

4.8 Information Request or Information Reply Message – インフォメーション要求/応答メッセージ

ID番号とシーケンス番号は、インフォメーション要求送信者がタイムスタンプ要求とその応答を対応させるために使用する。シーケンス番号は送信するたびに増加させてもよい。インフォメーション応答送信者は、インフォメーション応答を送信する際に同じ値を返す。

Type

15 – インフォメーション要求
16 – インフォメーション応答

Code

コードは「0」

Checksum

チェックサム

Identifier

ID番号

Sequence Number

シーケンス番号

おすすめ書籍

TCP/IPを基礎から学ぶなら次の書籍をおすすめします。

スポンサーリンク
スポンサーリンク