メインコンテンツまでスキップ

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)

詳細フロー

  1. アプリケーションがデータを送信

    • アプリケーションAが送信するデータを準備する
    • TCPまたはUDPにデータを渡す
  2. TCP/UDP処理

    • トランスポート層ヘッダを追加する
    • セグメント/データグラムをIPに渡す
  3. IPモジュール (送信元ホスト)

    • アドレスを持つIPヘッダを追加する
    • ルーティングを決定する (直接またはゲートウェイ経由)
    • 必要に応じて分割する
    • ローカルネットワークに渡す
  4. ローカルネットワーク送信

    • ネットワークフレームにカプセル化する
    • 次のホップに送信する
  5. ゲートウェイ処理 (必要な場合)

    • IPデータグラムを受信する
    • 宛先アドレスを確認する
    • 次のホップを決定する
    • TTLを減少させる
    • さらに分割する可能性がある (may)
    • 次のネットワークに転送する
  6. IPモジュール (宛先ホスト)

    • IPデータグラムを受信する
    • 宛先が一致するか確認する
    • 分割されている場合は再構築する
    • 上位層プロトコルに渡す
  7. TCP/UDP処理

    • トランスポートヘッダを処理する
    • データをアプリケーションに配送する
  8. アプリケーションがデータを受信

    • アプリケーション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)。