バイト・ オフセット | 長さ (ビット数) | 内容 | 備考 |
---|---|---|---|
0 | 64 | プリアンブル | 01010101....(フレーム同期のため) |
8 | 48 | 宛先MACアドレス | aa:bb:cc:dd:ee:ff |
14 | 48 | 送信元MACアドレス | aa:bb:cc:dd:ee:ff |
20 | 16 | フレームタイプ | 0x0800.IPパケット その他たくさん Linuxの場合、/usr/include/linux/if_ether.hに記述してあります。 |
22 | 368〜 12000 | フレームデータ | フレームタイプがIPパケットなら、IPヘッダが続きます。 |
??? | 32 | CRC | フレーム全体のチェック用。 |
(*1)これらは、あくまでも経路制御を行う際のヒントに過ぎません。たとえばパケットの優先度は、ルータなどが輻輳制御などに使用すること*も*できます。各種の通信機器がこれをサポートしているとは限りませんし、またインターネットの性格上、「遅延させるな」とか言われても、それは非現実的というのはお分かりいただけると思います。 (*2)これらは、パケットのフラグメンテーション(分割)および再構成の時に使われます。たとえば、イーサネットのLANから回線を経由してインターネット側へパケットを転送する場合、イーサネット上は1500バイトまで一度に送信できますが、回線上はエラーによる再送回数を減らすために、最大パケット長(MSS)(MTU --- Max Transfer Unit --- 最大転送単位ともいうみたい。よくわからない)はイーサネットより少なくなる場合があります。分割されたパケットは、IPレベルにおいて受け側で再構成してやる必要があります。
バイト・
オフセット長さ
(ビット数)内容 値
0 4 バージョン情報 現在は4(将来は6?)
4 ヘッダ長(バイト数)÷4 現在は5
1 8 サービスタイプ(*1) xxx-----:パケットの優先度(0-7)
---1----:[D]elayビット(極力遅延させない)
----1---:[T]hroughputビット(高スループット要求)
-----1--:[R]eliabilityビット(高信頼性を要求)
------xx:未使用
2 16 TOTAL LENGTH IPパケット全体の長さ
4 16 IDENTIFICATION(*2) データグラムを識別する一意の整数
6 3 FLAGS(*2) 1xx:フラグメント不可
x1x:フラグメント中間データ
xx1:フラグメント後続あり
13 FRAGMENT OFFSET(*2) 元のデータ中の位置
8 8 TIME TO LIVE(TTL)
--- 生存時間
送信側がセットし、ゲートウェイを通るごとに1ずつ引かれます。0になったらそのパケットは破棄され、送信元にエラーパケットが返されます。これにより、経路制御のミスでパケットがループするのを防ぎます。
9 8 PROTOCOL
0.IP 1.ICMP 6.TCP 17.UDP 255.RAW
DATA部のフォーマットを規定します。
Linuxの場合、/etc/protocolsに記述してあります。
10 16 HEADER CHECKSUM IPヘッダ部分*のみ*を対象としたチェックサム。 12 32 送信元IPアドレス
16 32 宛先IPアドレス
これ以降はオプション
20 可変 いろいろ 説明は割愛します
?? 可変 パディング文字 ヘッダが4バイト区切りとなるように調整。
?? 可変 データ部 通常はTCPまたはUDPパケット
バイト・
オフセット長さ
(ビット数)内容 値
0 16 送信元ポート番号 53.DNS 80.httpd など。
Linuxの場合/etc/servicesに、Windows NTの場合、 %SYSTEMROOT%\system32\
drivers\etc\servicesに記述してあります。
2 16 宛先ポート番号 同上
4 16 メッセージ長
6 16 チェックサム (この計算は難しい)
8 任意 データ