勉強前の理解度
- なんかいっぱいある
- ヘッダは可変長
IPv4ヘッダの中身
[]の中はbit数。
バージョン[4]
IPヘッダのバージョン番号を表す。IPv4なら4、IPv6なら6が入る。なお、他の番号は実験的に割り当てられたもので、一般に使用されてはいない。
ヘッダ長(IHL:Internet Header Length)[4]
IPヘッダの長さを4オクテット単位で表す(データの長さは含まない)。オプションを使用しない場合は最小値の5(ヘッダ長が20バイト)となる。
DSCPフィールド、ECNフィールド[8]
先頭6bitのDSCPフィールドは(たぶん)21段階の優先度を示す。DSCPフィールドを3bitずつに分けて、前半3bitで通信の優先度を、後半3bit残り2bitで破棄レベル(破棄のされやすさ)を表す。かつてこのフィールドはサービスタイプ(TOS:Type Of Service)として利用されていて、その中の優先度を表すIP Precedenceと互換性が保たれている。
後半2bitのECNフィールドは、ネットワークが輻輳していることを通知するために利用されている。前半1bit(ECT)が1になっていてネットワークが輻輳している場合、ルーターが後半1bit(CE)を1にする。
パケット長(Total Length)[16]
IPヘッダとデータの長さの合計をオクテット単位で表す。
識別子(ID:Identification)[16]
パケットを分割してフラグメントを生成した場合にフラグメントを識別するために利用する。宛先IPアドレスと送信元IPアドレス、プロトコル及び識別子が同じフラグメントは、同じパケットから分割されたと見なして組み立てる。
フラグ(Flags)[3]
パケットの分割に関わる意味合いを持つが、1bitずつ意味が異なる。
- はじめの1bitは利用されていない。
- 真ん中の1bitはパケットを分割してよいかどうかを表す(0なら分割が可能となり、1なら分割が禁止される)。
- 末尾の1bitは、分割されたパケットの途中であるか、最後であるかを示す(0なら分割された最後のフラグメントで、1なら後続のフラグメントが存在する)。
フラグメントオフセット(FO:Fragment Offset)[13]
分割されたフラグメントが元のパケットのどの位置にあったのかを8オクテット単位で表す。
生存期間(TTL:Time To Live)[8]
パケットの生存時間を示す。実際には、パケットが通過できるL3スイッチとルーターの数の合計値を表していて、これらを一回通過するごとにTTLの値は1ずつ減算されていく。TTLの値が0になると、パケットは破棄される。これによって、パケットが永遠にネットワークに存在することを防止できる。
プロトコル[8]
上位層のプロトコルを表す。例えば、ICMPなら1、TCPなら6、UDPなら17である。
ヘッダチェックサム[16]
IPヘッダのエラーを検知するために、IPヘッダの1の補数の和を表している。
送信元IPアドレス[32]
送信元IPアドレスが入る。
宛先IPアドレス[32]
宛先IPアドレスが入る。
オプション[可変長]
通常は使用されないが、デバッグやテストを行う際は使用される。IPパケットが通過したルータのIPアドレスのログをとったり、ルーティング経路を指定できたりするらしい。4オクテット単位。
パディング[可変長]
オプションを使用してIPヘッダの長さが4オクテットの整数倍にならなかった場合、4オクテットの倍数になるまで0で埋めて使用する。
参考
QoS - IP Precedence(IPプレシデンス)とは
QoS - DiffServモデルの処理フロー
QoS - DSCP(Differentiated Services Code Point)とは
TCP/IP - IPとは
IPv4ヘッダー ‐ 通信用語の基礎知識
IPヘッダ - プログラミング探して!
マスタリングTCP/IP