2. 概要 (Overview)
2.1. 他のプロトコルとの関係 (Relation to Other Protocols)
インターネットプロトコルは、一方では上位レベルのホスト間プロトコルと、もう一方ではローカルネットワークプロトコルとのインターフェースを持ちます。この文脈において、「ローカルネットワーク (Local Network)」は、建物内の小さなネットワークや、ARPANETのような大規模なネットワークの可能性があります (may)。
プロトコルスタック
+-------------+
|| Application |
+-------------+
|| TCP | TCP/UDP/ICMP
+-------------+
|| IP | インターネットプロトコル (本ドキュメント)
+-------------+
|| Local Net | Ethernet, WiFi, etc.
+-------------+
関係図
+------+ +-----+ +-----+ +-----+
||Telnet| | FTP | | ... | |Voice|
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | | ... |
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP |
+-------------------------------+
|
+-------------------------------+
| Local Network Protocol |
+-------------------------------+
主要プロトコル
- TCP (Transmission Control Protocol): 信頼性のある、順序付けられた、エラーチェックされたデータ配送を提供します
- UDP (User Datagram Protocol): コネクションレスデータグラムサービスを提供します
- ICMP (Internet Control Message Protocol): エラー報告と診断に使用されます
- ローカルネットワークプロトコル: Ethernet, Token Ring, ARPANET, など
2.2. 動作モデル (Model of Operation)
あるアプリケーションプログラムから別のアプリケーションプログラムへデータグラムを送信する動作モデルは、次のシナリオで示されます:
送信シナリオ
アプリケーションA (ホスト1) → IPモジュール → ゲートウェイ → IPモジュール → アプリケーションB (ホスト2)
詳細フロー
-
アプリケーションがデータを送信
- アプリケーションAが送信するデータを準備する
- TCPまたはUDPにデータを渡す
-
TCP/UDP処理
- トランスポート層ヘッダを追加する
- セグメント/データグラムをIPに渡す
-
IPモジュール (送信元ホスト)
- アドレスを持つIPヘッダを追加する
- ルーティングを決定する (直接またはゲートウェイ経由)
- 必要に応じて分割する
- ローカルネットワークに渡す
-
ローカルネットワーク送信
- ネットワークフレームにカプセル化する
- 次のホップに送信する
-
ゲートウェイ処理 (必要な場合)
- IPデータグラムを受信する
- 宛先アドレスを確認する
- 次のホップを決定する
- TTLを減少させる
- さらに分割する可能性がある (may)
- 次のネットワークに転送する
-
IPモジュール (宛先ホスト)
- IPデータグラムを受信する
- 宛先が一致するか確認する
- 分割されている場合は再構築する
- 上位層プロトコルに渡す
-
TCP/UDP処理
- トランスポートヘッダを処理する
- データをアプリケーションに配送する
-
アプリケーションがデータを受信
- アプリケーションBがデータを受信する
データグラムの旅の例
ホストA ゲートウェイ1 ゲートウェイ2 ホストB
| | | |
| 1. データグラム送信 | | |
|------------------->| | |
| | 2. ルート&転送 | |
| |------------------->| |
| | | 3. ルート&転送 |
| | |------------------->|
| | | | 4. 配送
| | | |
2.3. 機能説明 (Function Description)
インターネットプロトコルの目的は、相互接続されたネットワークのセットを通じてデータグラムを移動させることです。これは、宛先に到達するまで、データグラムをあるインターネットモジュールから別のインターネットモジュールへ渡すことによって行われます。
主要機能
1. アドレッシング (Addressing)
- 各データグラムには送信元アドレスと宛先アドレスが含まれる
- 32ビットアドレスがホストを一意に識別する
- ネットワーク部とホスト部が階層的ルーティングを可能にする
2. ルーティング (Routing)
- 相互接続されたネットワークを通じたパスの選択
- 宛先アドレスとルーティングテーブルに基づく
- 直接配送またはゲートウェイ経由の間接配送が可能である (can)
3. 分割と再構築 (Fragmentation and Reassembly)
- 大きなデータグラムが小さなフラグメントに分割される
- MTU (Maximum Transmission Unit) が変化する場合に必要
- フラグメントは最終宛先でのみ再構築される
4. サービスタイプ (Type of Service)
- 希望するサービス品質を示す
- パラメータ: 優先度 (precedence)、遅延 (delay)、スループット (throughput)、信頼性 (reliability)
- ゲートウェイがルーティング決定に使用する
5. 生存時間 (Time to Live)
- インターネット内でのデータグラムの寿命を制限する
- 無限ループを防ぐ
- 各ホップで減少される
6. オプション (Options)
- セキュリティパラメータ
- ソースルーティング (Source Routing)
- ルート記録 (Route Recording)
- タイムスタンプ (Timestamps)
7. ヘッダチェックサム (Header Checksum)
- ヘッダの整合性を保護する
- 各ホップで再計算される (TTLの変更による)
- データペイロードは保護しない
インターネットモジュールの責任
インターネットモジュール (特にゲートウェイ内) は、データグラムが正しくフォーマットされ、有効なアドレスを持ち、宛先に向けて正しくルーティングされていることを判断します。主要な責任には次のものが含まれます:
- エラー検出 (Error Detection): ヘッダチェックサムを検証する
- TTL管理: TTLを減少させ、確認する
- 分割 (Fragmentation): 必要に応じてデータグラムを分割する
- 再構築 (Reassembly): 宛先で元のデータグラムを再構築する
- オプション処理: IPオプションを処理する
- ICMP生成: ICMPを介してエラーを報告する
アドレッシングスキーム
クラスA: 0NNNNNNN.HHHHHHHH.HHHHHHHH.HHHHHHHH
- 0.0.0.0 から 127.255.255.255
- 128ネットワーク、各16,777,216ホスト
クラスB: 10NNNNNN.NNNNNNNN.HHHHHHHH.HHHHHHHH
- 128.0.0.0 から 191.255.255.255
- 16,384ネットワーク、各65,536ホスト
クラスC: 110NNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH
- 192.0.0.0 から 223.255.255.255
- 2,097,152ネットワーク、各256ホスト
クラスD: 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
- 224.0.0.0 から 239.255.255.255
- マルチキャスト (Multicast)
クラスE: 1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
- 240.0.0.0 から 255.255.255.255
- 将来の使用のために予約 (Reserved)
2.4. ゲートウェイ (Gateways)
ゲートウェイは、ネットワーク間でデータグラムを転送するためにインターネットプロトコルを実装します。ゲートウェイは2つ以上のネットワークに接続され、1つのネットワークからデータグラムを受信し、別のネットワークに転送します。
ゲートウェイの機能
1. ルーティング (Routing)
- ルーティングテーブルを維持する
- 各データグラムの次のホップを決定する
- ルーティングプロトコル (RIP, OSPF, など) を使用する可能性がある (may)
2. 分割 (Fragmentation)
- データグラムを分割する必要がある可能性がある (may)
- 次のネットワークのMTUが小さい場合に発生する
- 再構築は行わない (宛先のみが行う)
3. TTL管理
- TTLを少なくとも1減少させる
- TTLが0に達した場合、データグラムを破棄する
- ICMP Time Exceededメッセージを送信元に送信する
4. エラー処理 (Error Handling)
- さまざまなエラー状態を検出する
- ICMPエラーメッセージを生成する
- エラーを送信元に転送する
5. オプション処理 (Option Processing)
- IPオプションを処理する
- 要求された場合にタイムスタンプを追加する
- ソースルーティングを処理する
ゲートウェイアーキテクチャ
ネットワークA ゲートウェイ ネットワークB
+---------+ +----------+ +---------+
|| | | | | |
|| ホストA |---------| ルータ |---------| ホストB |
|| | | | | |
+---------+ +----------+ +---------+
| | |
| | |
IPモジュール IPモジュール IPモジュール
ローカルネットA 両方のネット ローカルネットB
ゲートウェイ処理ステップ
1. ネットワークインターフェースからデータグラムを受信
2. ヘッダチェックサムを検証
3. 宛先がローカルか確認
- はい: ホストに配送
- いいえ: 転送処理を続行
4. TTLを減少
- TTL = 0の場合: 破棄し、ICMPを送信
5. 次のホップのルーティングテーブルを検索
6. 分割が必要か確認
- DFフラグが設定されており、分割が必要な場合:
破棄し、ICMPを送信
- それ以外: 必要に応じて分割
7. ヘッダチェックサムを再計算
8. 次のネットワークインターフェースに転送
ルーティングテーブルの例
|| 宛先ネットワーク | 次のホップ | インターフェース | メトリック | ||------------------|------------|------------------|------------| || 10.0.0.0/8 | Direct | eth0 | 0 | || 192.168.1.0/24 | Direct | eth1 | 0 | || 0.0.0.0/0 | 10.0.0.1 | eth0 | 10 |
ゲートウェイの責任
- してはならない (must not) フラグメントを再構築する (最終宛先のみが行う)
- しなければならない (must) 必要に応じて分割する
- しなければならない (must) TTLを減少させる
- しなければならない (must) 変更後にヘッダチェックサムを再計算する
- すべきである (should) エラー報告のためにICMPを実装する
- してもよい (may) ルーティング決定にサービスタイプを使用する
まとめ (Summary)
インターネットプロトコルは、コネクションレスのベストエフォートデータグラム配送サービスを提供します。上位レベルのホスト間プロトコル (TCPなど) と下位のネットワークプロトコルの間で動作します。主要な特徴には次のものが含まれます:
- ユニバーサルアドレッシング 相互接続されたネットワーク全体で
- ルーティング ゲートウェイを通じた
- 分割 (Fragmentation) 異なるネットワークMTU向け
- シンプルでステートレス な動作
- 信頼性の保証なし (上位層で処理される)
この設計により、インターネットはスケーラブルで柔軟性があり、堅牢になり、多様なネットワークとアプリケーションをサポートできます (can)。