ネットワークの基礎講座
IP(インターネット・プロトコル)
IPデータグラム
IPデータグラム(インターネット・データグラムともいう)は、インターネットのプロトコル・スイートの基本的な転送パケットであり、IPのための情報を有するヘッダと、上位層だけが関与するデータ部から構成されている。このIPデータグラムは下位層ではさらにカプセル化されて転送される。たとえばイーサネットの場合は最大1500バイト長のデータ部分にカプセル化される。だからといってIPデータグラムの長さを1500に規定しているわけでなく、IP側で分割(Fragmentation)と再組立(Re-assembly)の機能が用意されている。IP仕様書は最大長を規定しない代わりに「総てのサブネットワークは少なくとも576バイト長のデータグラムが処理できること」としている。
分割された各フラグメント(断片)には各々もとのデータグラムからコピーされたヘッダが付されており、通常のIPデータグラムとして宛先に送られる。つまり下位層はこれを意識する必要がない。ただしフラグメントがひとつでも欠落した場合は、データグラム全体が欠落したとみなされる。これはIPは再送手順を持っていない為である。相手のホストは残りのフラグメントを単純に廃棄する。
Header |
Data |
IPデータグラム
Physical
Network Header |
IP
Datagram as Data |
物理ネットワークのフレームへのカプセル化
IPデータグラムのフォーマットは以下のようになっている。ヘッダ部分は最小20バイト長である。
VERS:
IPプロトコルのバージョンを示す。現在のバージョンは4である。今話題のIPv6(以前はIPngとも呼ばれた)はバージョン6のことである。バージョン5も実験的に存在している。このバージョン値よりも若い番号のデータグラムを受信したときは破棄する。
LEN:
32ビットを単位としたヘッダ部の長さを示す。最小値は従って5である。
Type of
Service:
このIPデータグラムに要求されるサービス品質を示す。このフィールドは更に細分化されている。
優先度(Precedence)はこのデータグラムの優先度の程度を示す。適切な日本語がないので英文のまま示す。数字が高いほど優先度が高く、ネットワーク制御が最優先となるのはどのプロトコルでも言える。
000 Routine
001 Priority
010 Immediate
011 Flash
100 Flash override
101 Critical
110 Internetwork
control
111 Network control
TOS(Type of Service)はサービスのタイプを示す。上のビットから遅延、スループット、信頼度、経済コストの順となっている。
1000 Minimum delay
0100 Maximize throughput
0010 Maximize reliability
0001 Minimize monetary cost
0000 Normal service
MBZはMust Be Zeroの頭をとったもので、将来のため予約されており、ゼロでなければならない。
Total Length:
このデータグラムの全体の長さ(ヘッダ+データ)をバイト単位で示す。
Identification:
送信元が付すこのデータグラム固有の識別子である。これはフラグメント化されたデータグラムを再組立するときに使う。つまり受信側は同じ識別子のものをつなぎ合わせる。
Flags:
0
MBZ 予約、ゼロのこと
DF Don’t Fragment 0はフラグメント可、1は不可を意味する。途中ルータがこのデータグラムを分割する必要が生じたとき、このフラグが1のときはこのデータグラムを廃棄する。これはディスクレス・システムの立ち上げプログラムのように再送等の機能が用意されていないときの転送には必要である。
MF More Flagments 0はこれが最後のフラグメントであることを示し、1はそうでないことを示す。
Fragment
Offset:
フラグメント化されたデータグラムに付ける。つまりもとの(つまり一番最初の)データグラムのデータ部分の何番目のところからのフラグメントであるかを64ビット単位で示し、最初のフラグメントはこの値が0である。受信側は同じ識別子のフラグメントをこの数字の若いフラグメントから順にMFがゼロのものまで並べて再組み立てする。途中に欠落があれば全体を廃棄する。
Time to Live:
このデータグラムが相手に到達するまでに許容された最大時間を秒で示す。各ルータは自分のところでかかった処理時間を引いていく。実際のところ1秒もかかるルータは存在しないので、この場合は1を引く。従ってこの値は通過時間の計測よりも何ホップかかったかの判断に使える。この値がゼロになったらルータはこのデータグラムを廃棄し、不要なデータグラムがいつまでもネットワーク上に浮遊するのえを防止する。最初の値はこのデータグラムを作った上位プロトコルが設定する。
Protocol:
IPがこのデータグラムを渡すべき上位層プロトコルを示す。IP層の上にはTCPやUDPなどが乗っているので、どのプロトコルに渡すかの情報により受信データグラムを所定のプロトコルに渡すことができる。
0 Reserved
1 Internet
Control Message Protocol (ICMP)
2 Intenet
Group Management Protocol (IGMP)
3 Gateway-to-Gateway
Protocol (GGP)
4 IP
(IP encapsulation)
5 Stream
6 Transmission
Control (TCP)
8 Exterior
Geteway Protocol (EGP)
9 Private
Internet Routing Protocol
17 User
Datagram (UDP)
89 Open
Shortest Path First (OSPF)
Header
Checksum:
ヘッダ部分だけのチェックサムである。16ビット・ワードを1の補数で和をとりそれを1の補数とする。ルータはヘッダ部分が有効かをまず確認し処理できるので高速化が図れる。不正なデータグラムは直ちに廃棄する。
Source IP
Address:
このデータグラムを送信しているホストのIPアドレス。
Destination
IP Address:
このデータグラムの宛先ホストのIPアドレス。
Options:
これは可変長である。すなわち1バイトのtypeだけのものとtype, length, option dataの組み合わせの最大255バイト長のものまで存在し得る。
type |
1バイト |
type |
length |
option
data |
1バイト |
1バイト |
length-2バイト |
type(タイプ)のバイトは更に以下のように細分化されている。
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
fc |
class |
option
number |
fcはflag copyの意味で、このデータグラムがフラグメント化されたときにこのオプション・フィールドをコピーするか否かを指定する。
classは2ビットの符号なしの整数で、0は制御、1は予約、2はデバッグと計測、3は予約となっている。
option numberは5ビットの符号なし整数で以下のようになっている。
0
オプションリストの終わり。クラスは0でfcは0である。lengthもデータもない1バイトのtypeだけのものである。すなわちオプション・リストがこれで終了することを示す。これはIPヘッダ長が4バイトの整数倍で表現されており、実際のヘッダ長と合わないときに必要となる。
1
no operationでこれも1バイトのみであり、長さを32ビットワードにあわせる時に使用する。
2
Securityのレベルで、クラスは0、fcは1、lengthは11、データは8バイトである。これは米国国防省の秘匿用に使われる。
3
Loose Source Routingで、classは0、fcは1、データは可変長である。
4
Internet Timestampで、classは2、fcは0、可変長データである。最大長は40バイトである。
7
Record Routeで、classは0、fcは1、データは可変長である。
8
Stream IDで、classは0、fcは0、lengthは4、データバイトは1バイトである。これはSATNETシステムで使われる。
9
Strict Source Routingで、classは0、fcは1、データは可変長である。
lengthはtypeとlengthフィールドを含めたオプションの長さをバイトで示したものである。
padding:
オプションが使われたときに、次の32ビットの境界に合わせるためにオールゼロで詰める。
data:
これは上位プロトコルに渡すべきメッセージである。