1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TCP・IPのプロトコル階層とフォーマットの整理

Last updated at Posted at 2025-02-19

最近このあたりの知識を使うタイミングがあったので、整理として残しておきます。

プロトコル階層

アプリケーション層

ユーザーが直接利用するアプリケーションにサービスを提供する層
HTTP, SMTP, FTPなど

トランスポート層

アプリケーション間のデータ転送を信頼性と効率性を持って提供する層

  • TCP (Transmission Control Protocol)
    • コネクション型で信頼性の高いデータ転送を提供します。データの順序制御や再送制御を行い、ウェブブラウジングやメール送受信などに使用されます。
  • UDP (User Datagram Protocol)
    • コネクションレス型で高速なデータ転送を提供します。信頼性よりも速度を重視するため、動画配信やオンラインゲームなどに使用されます。

インターネット層 (IP)

異なるネットワーク間でデータを転送するための経路選択やアドレス指定を担当する層

  • IP (Internet Protocol)
    • データをパケット(データグラム)として送受信し、送信元から目的地までの経路を決定します。現在、IPv4とIPv6が主に使用されています。
  • ICMP (Internet Control Message Protocol)
    • ネットワークのエラーメッセージや診断情報を転送します。例えば、pingコマンドはICMPを使用しています。
  • ARP (Address Resolution Protocol)
    • IPアドレスから対応するMACアドレスを取得するためのプロトコル。同一ネットワーク内での通信に使用されます。

リンク層 (イーサネット(MACアドレス))

物理的なネットワーク媒体上でデータの伝送を行う層

  • イーサネット (Ethernet)

■ ザックリTCPパケットの構造

スクリーンショット 2025-02-19 9.26.35.png (14.1 kB)

■ リンク層

イーサネットのフレームフォーマット

※ 1オクテット = 1バイト

フィールド サイズ 説明
プリアンブル 7オクテット 1と0を交互に並べたフィールド。「イーサネットの始まり」を示します。
SFD (Start Frame Delimiter) 1オクテット 10101011 。「フレームの開始」を表すフィールドです。
宛先MACアドレス 6オクテット フレームの宛先MACアドレス。
送信元MACアドレス 6オクテット フレームの送信元MACアドレス。
タイプ 2オクテット データ部分のプロトコルを表す番号 (0800: IPv4, 0806: ARP, 86DD: IPv6, etc...)。
データ 46 ~ 1500オクテット 上位層プロトコルのHeader + Data。46オクテット未満は0で埋めます。
FCS 4オクテット フレーム全体を特定のビット列で割った余りを格納し、エラー検出を行います。
スクリーンショット 2025-02-17 0.11.03.png (44.0 kB)

■ インターネット層 (IP)

IPパケットのフォーマット

フィールド サイズ 説明
Version 4bit IPバージョン。IPv4なら 4 、IPv6 なら 6
IHL (Internet Header Length) 4bit IPヘッダのサイズを4オクテット(32bit)単位で表します。オプションなしなら 5 (20オクテット)。
TOS (Type of Service) 8bit 送信しているIPのサービス品質。現在はDSCP(6bit), ECN(2bit)として利用。
Total Length 16bit IPヘッダとIPデータを合計したパケット全体のサイズ(オクテット単位)。
Identification 16bit フラグメント復元用の識別子。パケット送信ごとにインクリメント。
Flags 3bit パケット分割(フラグメント)に関する制御情報。
Fragment Offset 13bit フラグメントが元のデータのどこに位置していたかを示す。
Time to Live 8bit パケットの生存期間。ルーター通過ごとにデクリメントされ、0で破棄。
Protocol 8bit データ部分のプロトコル。(ICMP=1, IPIP=4, TCP=6, UDP=17, IPv6=41)
Header Checksum 16bit IPヘッダのチェックサム。
Source Address 32bit 送信元IPアドレス。
Destination Address 32bit 宛先IPアドレス。
Options 可変長 テスト・デバッグ用に利用。
Padding 可変長 Optionを32bitの整数倍にするためのパディング。
Data 可変長 IPの上位層プロトコルのHeader + Data
スクリーンショット 2025-02-18 23.12.15.png (52.5 kB)

ICMPパケットのフォーマット

フィールド サイズ 説明
Type 8bit 通知メッセージの種類 (0: Echo Reply, 8: Echo, etc...)
Code 8bit サブタイプ情報
Checksum 16bit ICMPヘッダとデータのチェックサム
Identifier 16bit Echo Reply時にEcho要求と同じ値を格納し、要求を識別
Sequence Number 16bit Echo Reply時にEcho要求と同じ値を格納し、要求を識別
Data 可変 送信元が任意のデータを格納可能
スクリーンショット 2025-02-18 23.30.56.png (31.6 kB)

ARPパケットのフォーマット

ARP要求: IPアドレスからMACアドレスを知るためにブロードキャストで送信
ARP応答: 要求されたIPアドレスが自身のものであった場合に、自身のMACを知らせるために返送

フィールド サイズ 説明
Hardware Type 16bit リンク層プロトコルの種類 (1: Ethernet)
Protocol Type 16bit Ethernetヘッダで使用されているプロトコルの種類 (0x0800: IPv4)
Hardware Size 8bit ハードウェアアドレスのサイズ。Ethernetの場合はMACアドレスなので 6
Protocol Size 8bit プロトコルアドレスのサイズ。IPv4の場合は 4
Opcode 16bit ARPリクエストなのか、ARPリプライなのか (1: Request, 2: Reply)
Sender MAC Address 48bit 送信元のMACアドレス
Sender IP Address 32bit 送信元のIPアドレス
Target MAC Address 48bit 宛先のMACアドレス
リクエスト時はブロードキャストになるので 00:00:00:00:00:00ff:ff:ff:ff:ff:ff
Target IP Address 32bit 宛先のIPアドレス
スクリーンショット 2025-02-19 9.27.35.png (58.5 kB)

■ トランスポート層

TCPパケットのフォーマット

Field Name ビット数 説明
Source Port 16bit 送信元ポート番号。
Destination Port 16bit 宛先ポート番号。
Sequence Number 32bit データの順序を管理するための番号。抜けがあると再送を依頼します。
Acknowledgment Number 32bit 確認応答番号。受信側が次に受信を期待するシーケンス番号を格納します。(シーケンス番号+受信したデータのバイト数)
Data Offset 4bit TCPヘッダの長さを4オクテット(32bit)単位で表します。データがTCPパケットの先頭のどこから始まるのかを意味します。
Reserved 4bit 将来の利用のための予約。常に 000
Flags 8bit 制御ビット 。8bitそれぞれが CWR, ECE, URG, ACK, PSH, RST, SYN, FIN の意味を持ちます。
Window Size 16bit 受信側が Acknowledgment Number の位置から受信可能なデータサイズ(オクテット数)を格納します。
Checksum 16bit ヘッダとデータのチェックサム。途中のルーターの故障によってデータが破損していないかを確認する目的。
Urgent Pointer 16bit 緊急データ位置。
Flags の URGが 1 の場合に有効になり、Data の先頭からUrgent Pointerに格納されている数値(オクテット長)までのデータが緊急データとなります。
主に通信を途中で中断する場合に利用されます。(webブラウザの中止ボタン, TELNETでCTRL+Cを入力した場合)
Options 可変長 拡張オプション
タイプ1: Maximum Segment Size(MSS): コネクション確立時に最大セグメント長を決定
タイプ3: WSOPT-Window Scale: Window Sizeを最大1Gオクテットに拡張(通常は64kオクテット)。スループット改善
など
Padding 可変長 Optionを32bitの倍数に揃えるためのパディング。
Data 可変長 TCPセグメントのペイロード。
スクリーンショット 2025-02-18 23.23.07.png (51.4 kB)

UDPデータグラムのフォーマット

フィールド サイズ 説明
Source Port 16 bit 送信元ポート番号
Destination Port 16 bit 送信先ポート番号
Length 16 bit ヘッダ+データの合計バイト数
Checksum 16 bit エラー検出のためのチェックサム(IPv4ではオプション、IPv6では必須)
Data 可変 送信するペイロード(最大65,507バイト)
スクリーンショット 2025-02-19 8.49.06.png (28.3 kB)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?