
イーサネットのヘッダやら、IPのヘッダやら、なんだか混乱してきました。
無理やり覚えようとせずに、整理しながら考える。復習しながらみていこう。レイヤ2で使われるイーサネットフレームの構造と、レイヤ3で使われるIPパケットの構造を確認してほしい。

IPv4のヘッダは、基本的には20バイトである。(付加情報をつけることで拡張することも可能)
以下は,IPヘッダの内容です。本当は「0」と「1」のデータが一列に並んで送信されるのですが、スペースの関係で、32ビット(8バイト)で区切り、改行して記載します。
0 8 16 24 32
バージョン | IHL | ToS | パケット長 | ||
識別子 | フラグ | フラグメントオフセット | |||
TTL | プロトコル番号 | ヘッダチェックサム | |||
送信元IPアドレス(32 bit) | |||||
宛先IPアドレス(32 bit) | |||||
オプション(可変bit) | Padding(可変bit) | ||||
✚✚ IPヘッダの構成

なんだかよくわからないです・・・
イメージが湧きにくいと思いますので、実際のパケットをみてみましょう。
以下は、前にも紹介したWiresharkというソフトを使って取得したIPパケットです。具体的には、192.168.0.4のパソコンからhttp://nw.seeeko.com(IPアドレスは203.104.130.159)のサイトにアクセスしたときのパケットです。
下部にあるのが生のデータであり、「0」と「1」からなるデータを16進数表記しています(青色がIPヘッダ)。上部は、このソフトが生データを分かりやすく表示したものです。

では、ここで、各項目を上記のデータに照らし合わせて解説します。
項目 | 長さ(bit) | 上記のパケットの場合の値 (16進数表記) | 解説 |
バージョン | 4 | 4 | IPのバージョン情報で、バージョン4である4が入る。 |
IHL(IP Header Length) | 4 | 5 | IPヘッダのヘッダ長。32ビットの何倍かを整数で示す。付加情報を付けることで32ビットの整数倍にならない場合は、ヘッダ末尾のオプションに詰め物(Padding?)を入れることで、32ビットの整数倍にする。通常は20バイト(=160ビット)なので、ここには5が入る。 |
ToS(Type of Service) | 8 | 00 | パケットの優先度を付ける場合に利用される。あまり使うことはありない。 |
パケット長 | 16 | 023d | パケットの長さをバイト長で表します。今回は、16進数で023dなので、10進数にすると、573バイトです。 |
識別子 | 16 | 0bcf | パケットが分割(フラグメント化)された場合のパケット識別するグループ番号みたいなもの。 |
フラグ | 3 | (2進数表記で) 0 1 0 | 1ビット目:使用しません 2ビット目:DF(Dont Flagment)ビットで、これがOn(=1)だと、フラグメント化(パケットの分割)されない。→今回はDFビットあり、つまり1 3ビット目:More Flagmentsビットで、同じ識別子の中でこれ以上のフラグメント化されたパケットがあるかを示す(あれば1)。同一識別子のパケットの中で、このビットが無いもの(=0)が、最終パケットになる。⇒パケットが一つなので無し、つまり0 |
フラグメントオフセット | 13 | (2進数表記で) 0000000000000 | フラグメント化されたパケットにおける、位置を示す。これによって、分割された同一識別子のパケットの組み立て順序が分かる。先頭パケットのフラグメントオフセットは0になる。今回は、フラグメント化されていないので、0。 |
TTL(生存時間:Time To Live) | 8 | 80 | このパケットの生存時間。通常は128(16進数で80)から始まり、ルータを超える毎に1つずつ減っていく。0になったらこのパケットは廃棄される。この機能がないと、ネットワーク上を永遠に流れるパケットが存在してしまう可能性がある。 |
プロトコル番号 | 8 | 06 | TCP、UDPなどのプロトコルの種別を記載(プロトコルに関しては、このあと記載) |
ヘッダチェックサム | 16 | de37 | IPヘッダが途中で欠落したりしていないかなど、Iヘッダの正確性を確認するための検査用データ |
送信元IPアドレス | 32 | c0a80004 | 送信元IPアドレス。16進数のc0.a8.00.04を10進数表記すると、192.168.0.4 |
宛先IPアドレス | 32 | cb68829f | 宛先IPアドレス。16進数のcb.68.82.9fを10進数表記すると、203.104.130.159 |
オプション | (32ビット x N) | - | めったに使わないが、ルーティングの付加情報などのオプションを入れることができる。IPパケットを32の整数倍にする必要があるため、余った部分は詰め物が入れられる。Hedder Lengthと関連を持ち、オプションが増えれば、値も大きくなる。 |
過去問では、IPヘッダの中身を問われている。
【H18NW午前 問22】 IPv4のIPヘッダに含まれるものはどれか。 ア あて先MACアドレス イ あて先ポート番号 ウ シーケンス番号 エ 存在時間(TTL) |
↓
↓
↓
↓
上記のIPヘッダ情報をみてみよう。
ア:宛先MACアドレスは、イーサネットフレーム
イ、ウ:ポート番号とシーケンス番号はTCPヘッダ
正解:エ
■ヘッダのチェックサムに関して以下の過去問を見てみよう
H23NW午前2問14
問14 IPv4ネットワークにおいて, IPヘッダ, TCPヘッダ, UDPヘッダのチェックサムフィールドに関する記述のうち,適切なものはどれか。 ア IPヘッダのチェックサムの計算は必須であるが,TCPヘッダ及びUDPヘッダのチェックサムの計算はオプションであり,計算を省略してOを指定してもよい。 イ IPヘッダのチェックサムの対象はヘッダ部分だけであるが,TCPヘッダ及びUDPヘッダのチェックサムの対象はデータ部分も含む。 ウ TCPヘッダのチェックサムの計算は必須であるが. IPヘッダ及びUDPヘッダのチェックサムの計算はオプションであり,計算を省略して0を指定してもよい。 エ どのヘッダのチェックサムフィールドも,チェックサムの対象はヘッダ部分だけである。 |
↓
↓
↓
↓
↓
正解 イ
IPヘッダのチェックサムの対象はヘッダ部分だけであるが,TCPヘッダ及びUDPヘッダのチェックサムの対象はデータ部分も含む。
IPヘッダのチェックサムは、パケット全体をチェックしなくてもいいのですか?
TCPヘッダにて全部をチェックするので、なくてもいいのではないでしょうか。
■プロトコル番号の例
番号 プロトコル 解説
1 ICMP Internet Control Message Protocol
2 IGMP Internet Group Management Protocol
6 TCP Transmission Control Protocol
8 EGP Exterior Gateway Protocol
9 IGP any private interior gateway
17 UDP User Datagram Protocol
41 IPv6
46 RSVP Reservation Protocol
47 GRE General Routing Encapsulation
50 ESP Encap Security Payload
51 AH Authentication Header
58 IPv6-ICMP ICMP for IPv6
88 EIGRP
89 OSPF
103 PIM Protocol Independent Multicast
112 VRRP Virtual Router Redundancy Protocol
133 FC Fibre Channel