IP (Internet Protocol)
IPは、インターネットに接続されたホスト間のデータグラムの配送に必要な機能のみ実現され、上位プロトコルに対してこれらの機能を提供する。これ自体にはデータの信頼性や配送順序は保障されない。このようなプロトコルを最善努力型(best effort)プロトコルと呼ばれる。
IP Address
IPアドレスのクラス
クラス | 上位bit | |
---|---|---|
クラスA | 0 |
先頭から8 bitがネットワーク部 残りの24 bitがホスト部 |
クラスB | 10 |
先頭から16 bitがネットワーク部 残りの16 bitがホスト部 |
クラスC | 110 |
先頭か24 bitがネットワーク部 残りの8 bitがホスト部 |
クラスD | 1110 | マルチキャストアドレスとして用いられている。 |
クラスE | 1111 |
予約されている。 実験などに用いられ、実用的に使用するクラスではない。 |
Classful Addressing to Subnetting
この問題を解決するために、サブネットという概念が誕生した。
サブネット
IPデータグラムの構成
Ver | IHL | TOS | Total Length | |
Identification | Flag | Fragment Offset | ||
TTL | Protocol | Header Checksum | ||
Source Address | ||||
Destination Address | ||||
Option | ||||
Data |
IPバージョン(Ver) (4 bit)
ヘッダ部分の長さ(IHL) (4 bit)
配送サービスの種類(TOS) (8 bit)
はじめの3 bitは配送の優先度、4から6 bitはDTR bitとよばれ、配送経路に対しての要求を表す。D bitは遅延に関する要求、T bitはスループットに関する要求、R bitは信頼性に関する要求である。7,8 bit目は必ず0とする。IPであるから、TOSの要求はbest effortによって実現され、必ずしも要求が保障されるものではない。
IPデータグラムの識別子(Identification)
Identificationは分割した複数のIPデータグラムに対して同一の値を与えることで、これらのIPデータグラムがあるIPデータグラムからフラグメンテーションされたものだと判断することができる。IPデータグラムの復元は送信先ホストのみが実現できる仕様になっている。
フラグメンテーションに関する情報(Flag/Fragment Offset)
分割されたIPデータグラムには次の内容が記録される。
- 分割されたIPデータグラムに同一のIdentificationが与えられる。
- IPデータグラムがフラグメンテーションされたことを示すために、Flagフィールドの3 bit目を1にする。
- 分割したIPデータグラムが元のIPデータグラムデータグラムにおいて何バイト目から何バイト目のデータを含んでいるのかをオフセット情報としてFragment offsetに記録する。
0 | D | M |
D bitは、このIPデータグラムをルータがフラグメンテーションしてもよいかを示す。ここが0であれば、フラグメンテーションを許可する。一方で、1であれば、MTUがIPデータグラムのサイズより小さかったとしても、IPデータグラムのフラグメンテーションを許可しない。このときルータは、そのIPデータグラムを破棄する。
M bitは、このIPデータグラムに続くフラグメントが存在するかを示す。存在する場合は1、存在しない場合は0が格納される。分割していないIPデータグラムはこのbitは0である。また、フラグメンテーションしたIPデータグラムにおいて、データの末尾が含まれているフラグメント以外は1、データの末尾が含まれているフラグメントは0が格納される。
TTL(Time To Live) (8 bit)
上位プロトコル(Protocol) (8 bit)
このように、IPの機能は様々な上位プロトコルによって利用されるが、IPソフトウェアモジュールがどの上位プロトコルのソフトウェアモジュールに引き渡せばよいか区別をつける必要がある。
Protocolフィールドの値と上位プロトコルの対応関係は次のように決定されている。
- ICPM(Internet Control Message Protocol): 1
- UDP(User Datagram Protocol): 17
- TCP(Transmission Control Protocol): 6
ヘッダチェックサム(Header Checksum) (16 bit)
以下にHeader Checksumの計算手順を示す。
- IPデータグラムのヘッダ部分を先頭から16 bitずつに区切る。
- 区切られたそれぞれについて1の補数を計算する。ただし、Header Checksumの16 bit分は0であるとする。
- 前項の計算結果の和を算出する。その値の1の補数をHeader Checksumとする。
Source Address
Destination Address
ICPM (Internet Control Message Protocol)
- 配送経路が存在しない
- フラグメンテーションが発生したIPデータグラムを再構成できない。
- Flagフィールドの要求により、フラグメンテーションが許可されていないため、ネットワークを通過できない。
- source routingができない。
- 送信元ホストのルーティングテーブルが不適切がゆえにIPデータグラムの配送経路が冗長であるとき、適切なルーティングテーブルの情報を通知する。
- ルータの処理がIPデータグラムの受信に追いつかないとき、送信元ホストに送信速度を下げるように要求する。
- ネットワークインタフェースが正常に作動しているか確認する。
ICMPメッセージIPデータグラムの配送に必須である。IPの実装にはICMPの実装が必須であるから、ICMPはIPはと同一のレイヤのプロトコルとされている。

ICMPによって提供される機能
- ICMP echo
- 配送エラーの報告
- Network Unreachable --> Code: 0
- Host Unreachable --> Code: 1
- Protocol Unreachable --> Code: 2
- Port Unreachable
- Fragment Needed --> Code: 4
- Source Route Failed --> Code: 5
- 始点抑制 (Source Quench)
- 方向変換
- Redirect for Net --> Code: 0
- Redirect for Host --> Code: 1
- Redirect for TOS and Net --> Code: 2
- Redirect for TOS and HOST --> Code: 3
- 時間切れ
- Time out for TTL --> Code: 0
- Time out for re-constructing fragments --> Code: 1
- タイムスタンプ取得
- クロックの同期
- ラウンドトリップタイムの推測
- アドレスマスク取得
TYPE(8/0) | CODE(0) | CHECKSUM |
ID | SEQUNCE NUMBER | |
OPTIONAL DATA | ||
... |
ICMPメッセージのタイプ - TYPE (8 bit)
CODE (8 bit)
CHECKSUM (16 bit)
ID (16 bit)
SEQUENCE NUMBER
TYPE(3) | CODE(0-5) | CHECKSUM |
0 | ||
IP HEADER + 64 bit Data | ||
... |
このとき、メッセージのTYPEフィールドの値は3、CODEフィールドの値は配送失敗の原因に依存する。
TYPE feild: 4
CODE feild: 0
TYPE(4) | CODE(0) | CHECKSUM |
0 | ||
IP HEADER + 64 bit Data | ||
... |
TYPE feild: 5 Codeフィールドの値は以下の条件にしたがって割り当てられる。
TYPE(5) | CODE(0-3) | CHECKSUM |
router IP address | ||
IP HEADER + 64 bit Data | ||
... |
TYPE feild: 11
Codeフィールドの値は以下の条件にしたがって割り当てられる。
TYPE(11) | CODE(0/1) | CHECKSUM |
0 | ||
IP HEADER + 64 bit Data | ||
... |
この機能は、いくつかの技術に応用される。
ICMPタイムスタンプメッセージは以下のフォーマットをとる。
TYPE --> Request: 13, Reply: 14
CODE: 0
ORIGINAL TIMESTAMP: 32 bit. Timestamp when sending a request.
RECEIVE TIMESTAMP: 32 bit. Timestamp when receiving the request.
TRANSMIT TIMESTAMP: 32 bit. Timestamp when sending its reply.
TYPE(13/14) | CODE(0) | CHECKSUM |
ID | SEQUENCE NUMBER | |
ORIGINAL TIMESTAMP | ||
RECEIVE TIMESTAMP | ||
TRANSMIT TIMESTAMP |
TYPE --> Request: 17, Reply: 18
CODE: 0
ADDRESS MUSK: 32 bit.input the address mask.
TYPE(17/18) | CODE(0) | CHECKSUM |
ID | SEQUENCE NUMBER | |
ADDRESS MUSK |
サブネットとCIDR
(1) Proxy ARP

このように、1つのクラスを共有する物理ネットワークアドレスを接続するルータが、それぞれのIPアドレスを保持し、そのルータを通過させるべきIPデータグラムを配送する際は、送信先へのARP要求に対して、配送途中のルータが自分の物理ネットワークアドレスを通知することでIPデータグラムの中継を実現できる。これをProxy ARPという。
Proxy ARPは、代理ルータの機能以外に一切変更を必要としないことが利点であるが、ARPに依存したシステムであることから、代理ルータになりすまされる可能性もある。
(2) Netmask

ネットマスクの導入によるサブネットへの分割においては、このサブネット化されたネットワークに接続されたルータにおいては、従来と同様の配送アルゴリズムを用いてIPデータグラムを配送できる。しかし、このサブネットに接続されるルータでは、サブネットを考慮したルーティングを行わなければならない。ルータは、ネットワーク部とサブネット部から得られる物理ネットワークアドレスと次に転送すべきルータのIPアドレスとを対応付ける必要がある。このとき、どのビットを物理ネットワークを示すアドレスであるか。これを判定するのに、サブネットマスクが用いられる。