ネットワークの基礎講座

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

 

MBZMust 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層の上にはTCPUDPなどが乗っているので、どのプロトコルに渡すかの情報により受信データグラムを所定のプロトコルに渡すことができる。

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

 

fcflag copyの意味で、このデータグラムがフラグメント化されたときにこのオプション・フィールドをコピーするか否かを指定する。

class2ビットの符号なしの整数で、0は制御、1は予約、2はデバッグと計測、3は予約となっている。

option number5ビットの符号なし整数で以下のようになっている。

0        オプションリストの終わり。クラスは0fc0である。lengthもデータもない1バイトのtypeだけのものである。すなわちオプション・リストがこれで終了することを示す。これはIPヘッダ長が4バイトの整数倍で表現されており、実際のヘッダ長と合わないときに必要となる。

1        no operationでこれも1バイトのみであり、長さを32ビットワードにあわせる時に使用する。

2        Securityのレベルで、クラスは0fc1length11、データは8バイトである。これは米国国防省の秘匿用に使われる。

3        Loose Source Routingで、class0fc1、データは可変長である。

4        Internet Timestampで、class2fc0、可変長データである。最大長は40バイトである。

7        Record Routeで、class0fc1、データは可変長である。

8        Stream IDで、class0fc0length4、データバイトは1バイトである。これはSATNETシステムで使われる。

9        Strict Source Routingで、class0fc1、データは可変長である。

lengthtypelengthフィールドを含めたオプションの長さをバイトで示したものである。

padding:

オプションが使われたときに、次の32ビットの境界に合わせるためにオールゼロで詰める。

data:

これは上位プロトコルに渡すべきメッセージである。

 

 

 

 

前節     目次     次節