■ T C P / I P の お 勉 強 ■
■IP(v4)のパケットの構造0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Version | IHL | Type Of Service | Total Length | ||||||||||||||||||||||||||||
Identification | Flags | Flagment Offset | |||||||||||||||||||||||||||||
Time To Live | Protocol | Header Checksum | |||||||||||||||||||||||||||||
Source Address | |||||||||||||||||||||||||||||||
Destination Address | |||||||||||||||||||||||||||||||
Options + Padding | |||||||||||||||||||||||||||||||
Data |
・Version
IPヘッダのバージョン番号を示す。で、ここではIPv4の構造を示しているので、当然、ここの値は4になります。v6だったら当然6ね。
・IHL(Internet Header Length)
IPヘッダの大きさをオクテットで示す。オプションがない場合はIPパケットは5オクテットになるので、ここにくる値は5になるわけでございます。
・Type Of Service
IPのサービスの品質なんだそうです。この中で各ビットにさらに意味があって、0-2ビット目が優先度、3ビット目が最低限の遅延、4ビット目が最大限のスループット、5ビット目が最大限の信頼性、6ビット目が最小限の経費、7ビット目は未使用となっているようです。なーんかよくわかりませんが、その実現の難しさから現在のインターネットではほとんど利用されていないそうです。
・Total Length
IPヘッダとIPデータを足したパケット全体の長さ(オクテット)をあらわすようです。で、ここが16ビットなので、IPが転送可能なパケットの最大サイズは65535オクテットになるようです。
・Identification
フラグメント(=データを分割したときのその断片)を復元するときの識別子で、同じフラグメントでは同じ値になるように処理されるのだそうです。
・Flags
3ビットのうち、1ビット目は0固定、2ビット目は分割していいかどうかをあらわすフラグで0で分割可能、1で分割不可、3ビット目は分割されたパケットの場合に最後のパケットかどうかを表す(0が最後のフラグメントパケット、1が途中のフラグメントパケット)。
・Fragment Offset
分割されたフラグメントが元データのどこにあったかをあらわす。
・Time To Live
何個のルーターを中継してよいのかを意味するもので、ルーターをとおるたびにこの値はひとつづつ減らされていき、0になったらそのパケットは破棄される。
・Protocol
上位のプロトコルが何なのかを示す値。いろいろあるけど、TCPだと6、UDPだと17、OSPFだと89等々。
・Header Checksum
その名のとおり(っていうかわかる人には全部その名のとおりだよね)、チェックサム。16ビット単位で1の補数の和を求め、求まった値の1の補数をチェックサムフィールドに入れる。らしい。
・Source Address
送信元のIPアドレス。
・Destination Address
送信先のIPアドレス。
・Options
可変長でテストやデバッグに使われるもの(つまり通常は使われない)。
・Padding
上記OptionsにこのPaddingを足した長さが32ビットの整数倍になるように、0の羅列でデータを埋める。
・Data
データ。
とまぁ、IP(v4)のヘッダはこんな感じですね。なんかわかった気になりますね。ならない?
今後の予定。
TCPのヘッダ/UDPのヘッダ/IPのいろいろな機器について/サブネットマスクってなんやねん/デフォルトゲートウェイってなんやねん/IPv6のヘッダ
って感じですかねぇ。