IPv4
パケットをインターネット中に届ける 20 バイトのヘッダ。
IPv4 ヘッダ
チェックサム込みの実物のヘッダです。3 ビットや 4 ビットしかないフィールドがあることに注目してください。
0:00
フレーム全体
45 00 00 2C 1C 46 40 00 40 06 20 97 C0 A8 01 14 CB 00 71 32: 192.168.1.20 から 203.0.113.50 へ TCP を運ぶ 44 バイトのパケットで、残りホップ数は最大 64、フラグメントは禁止です。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| バージョン | 0 バイト目の bits 7–4 | 4 | IPv4 では常に 4。最初の 4 ビットで、受信側は IPv4 と IPv6(6)を一目で見分けます。 |
| ヘッダ長 (IHL) | 0 バイト目の bits 3–0 | 5 ワード = 20 バイト | ヘッダ長(32 ビットワード単位)。5 × 4 = 20 バイトが最小(オプションなし)。最大は 15 × 4 = 60 バイトです。 |
| DSCP | 1 バイト目の bits 7–2 | 0 = ベストエフォート | Differentiated Services Code Point。通信品質の指定(音声・動画・ベストエフォートなど)です。0 は既定のベストエフォート。 |
| ECN | 1 バイト目の bits 1–0 | 0 = 未使用 | Explicit Congestion Notification。輸送路が混んだとき、ルータがパケットを捨てずに印を付けられる仕組みです。 |
| 全長 | 2–3 バイト目 | 0x002C = 44 | ヘッダとペイロードの合計バイト数。20 + 24(MSS オプション付き TCP SYN)= 44。最大 65,535。 |
| 識別子 | 4–5 バイト目 | 0x1C46 = 7238 | 送信側がパケットごとに決める番号です。フラグメントされた場合、全断片が同じ値を持ち、受信側が再構築に使います。 |
| フラグ | 6 バイト目の bits 7–5 | 010 = DF が立っている | フラグメントを制御するビットです。 |
| フラグメントオフセット | 6–7 バイト目にまたがる | 0 | この断片が元のパケットのどこから始まるか(8 バイト単位)。0 は最初(または唯一)の断片です。 |
| TTL | 8 バイト目 | 64 hops | Time To Live。ルータを通るたびに 1 減り、0 になるとパケットを捨てて通知します。パケットが永遠に回り続けるのを防ぎ、traceroute もこれを利用します。 |
| プロトコル | 9 バイト目 | 6 = TCP | ペイロードの種類。1 は ICMP、6 は TCP、17 は UDP。 |
| ヘッダチェックサム | 10–11 バイト目 | 0x2097 (✓) | ヘッダだけ(ペイロードは含まない)に対する 16 ビットの 1 の補数和です。ここでは実際に計算した 0x2097 です。TTL を減らす全ルータが再計算します。 |
| 送信元アドレス | 12–15 バイト目 | 192.168.1.20 | 送信者の IPv4 アドレス。ドット区切りの数字 1 つが 1 バイトです。 |
| 宛先アドレス | 16–19 バイト目 | 203.0.113.50 | 最終的な宛先です。MAC と違い、途中のルータを何台通っても変わりません。 |
概要
IP は、インターネットを 1 つのネットワークにする層です。ヘッダには送信元と宛先(32 ビットのアドレス)、パケットの長さと中身の種類、パケットが永遠に生き続けないためのホップ数制限が入っています。ルータはこのヘッダを読んで宛先を引き、転送します。ペイロードの中は見ません。
IP はベストエフォートです。パケットは失われ、重複し、順序が入れ替わり、分割されることがあります。信頼性は TCP の仕事です。
基本情報
- アドレス
- 32 ビット(約 43 億個)
- ヘッダ
- 20 バイト(最大 60)
- 最大パケット
- 65,535 bytes
- チェックサム
- ヘッダのみ・16 ビット
- バイト順
- ビッグエンディアン(ネットワークバイトオーダー)
- 規格
- RFC 791
使われる場面
- 今日のインターネットの通信は、IPv4(または後継の IPv6)に乗っています
- ICMP(ping・traceroute)は IP に直接載ります
- トンネルや VPN は IP パケットを別の IP パケットの中に包みます
つまずきやすい点
- TTL は時間ではなくホップ数です。traceroute は TTL を 1、2、3 と増やして送り、期限切れを通知してきた相手を順に読み取ります。
- アドレスは枯渇しました。NAT で多数のプライベートホスト(192.168.x.x)が 1 つのグローバルアドレスを共有していますが、エンドツーエンドの接続性を犠牲にしています。
- チェックサムはペイロードをカバーしません。TCP と UDP がそれぞれ自前で持ちます。
出典・規格
- RFC 791: Internet Protocol
- RFC 1071: Computing the Internet Checksum