1. 序論 (Introduction)
1.1. 動機 (Motivation)
インターネットプロトコル (Internet Protocol) は、相互接続されたパケット交換コンピュータ通信ネットワークのシステムでの使用のために設計されています。このようなシステムは「catenet」[1]と呼ばれています。インターネットプロトコルは、送信元から宛先へデータグラム (datagrams) と呼ばれるデータブロックを送信する機能を提供します。送信元と宛先は固定長アドレスによって識別されるホストです。インターネットプロトコルはまた、必要に応じて「小パケット」ネットワークを通じて送信するための長いデータグラムの分割 (fragmentation) と再構築 (reassembly) の機能を提供します。
主要な設計目標
1. 相互接続性 (Interconnection)
ネットワークA ←→ ゲートウェイ ←→ ネットワークB ←→ ゲートウェイ ←→ ネットワークC
↓ ↓ ↓
ホスト1 ホスト2 ホスト3
IPは異なるタイプのネットワークの相互接続通信を可能にします
2. データグラム送信 (Datagram Delivery)
- コネクションレスサービス (Connectionless Service)
- 各データグラムは独立してルーティングされる
- 配送、順序、重複保護の保証なし
3. アドレス識別 (Addressing)
- 32ビット固定長アドレス
- インターネット上の各ホストを一意に識別
- 階層構造 (ネットワーク + ホスト)
4. 分割と再構築 (Fragmentation & Reassembly)
大きなデータグラム (1500バイト)
↓ 分割
フラグメント1 (500バイト) + フラグメント2 (500バイト) + フラグメント3 (500バイト)
↓ 小パケットネットワーク経由で送信
↓ 再構築
大きなデータグラム (1500バイト)
1.2. 範囲 (Scope)
インターネットプロトコルの範囲は、相互接続されたネットワークシステムを通じて送信元から宛先へビットのパッケージ (インターネットデータグラム) を配送するために必要な機能を提供することに特に限定されています。エンドツーエンドのデータ信頼性、フロー制御、シーケンシング、またはホスト間プロトコルで一般的に見られる他のサービスを強化するメカニズムはありません。 インターネットプロトコルは、サポートするネットワークのサービスを利用して、さまざまなタイプと品質のサービスを提供できます (can)。
IPが提供しない機能
| 機能 | IPが提供するか | 提供者 |
|---|---|---|
| 信頼性のある配送 | ❌ いいえ | TCP |
| フロー制御 | ❌ いいえ | TCP |
| 順序保証 | ❌ いいえ | TCP |
| エラー回復 | ❌ いいえ | TCP |
| 接続管理 | ❌ いいえ | TCP |
| 輻輳制御 | ❌ いいえ | TCP |
IPが提供する機能
| 機能 | 説明 |
|---|---|
| ✅ アドレッシング | 32ビットIPアドレス |
| ✅ ルーティング | データグラム転送 |
| ✅ 分割/再構築 | 異なるMTUに適応 |
| ✅ 生存時間 | TTLがループを防ぐ |
| ✅ サービスタイプ | ToSフィールド |
| ✅ ヘッダチェックサム | ヘッダエラーを検出 |
設計哲学
エンドツーエンド原則 (End-to-End Principle):
- IP層をシンプルに保つ
- 複雑な機能はエンドシステムで実装
- ネットワークコアは転送のみを行う
利点:
✅ ネットワークのスケーラビリティが高い
✅ 複数の上位層プロトコルをサポート
✅ 障害ドメインの分離
1.3. インターフェース (Interfaces)
このプロトコルは、インターネット環境におけるホスト間プロトコルによって呼び出されます。このプロトコルは、インターネットデータグラムを次のゲートウェイまたは宛先ホストに配送するために、ローカルネットワークプロトコルを呼び出します。
上位層インターフェース (Upper Layer Interface)
例: TCPがIPを呼び出す
TCPモジュールは、TCPセグメント (TCPヘッダとユーザーデータを含む) を
インターネットデータグラムのデータ部分として受け取るために、
インターネットモジュールを呼び出します。TCPモジュールは、
インターネットヘッダのアドレスと他のパラメータを、
呼び出しの引数としてインターネットモジュールに提供します。
インターフェースフロー:
アプリケーション層 (Application)
↓ データ
トランスポート層 (TCP/UDP)
↓ TCPセグメント/UDPデータグラム
ネットワーク層 (IP) ← IPヘッダを追加
↓ IPデータグラム
データリンク層 (Ethernet/etc)
↓ フレーム
物理層
下位層インターフェース (Lower Layer Interface)
例: IPがローカルネットワークを呼び出す
ARPANETの場合、インターネットモジュールはローカルネットワークモジュールを
呼び出し、そのモジュールはインターネットデータグラムに1822リーダー[2]を
追加してARPANETメッセージを作成し、IMP (Interface Message Processor) に
送信します。ARPANETアドレスは、ローカルネットワークインターフェースに
よってインターネットアドレスから導出されます。
1822プロトコルの例:
+----------------+------------------+
| 1822リーダー | IPデータグラム |
| (ARPANET固有) | (汎用形式) |
+----------------+------------------+
インターフェースパラメータ
IP送信インターフェース:
send_ip_datagram(
source_address, // 送信元IPアドレス
dest_address, // 宛先IPアドレス
protocol, // 上位層プロトコル (TCP=6, UDP=17)
tos, // サービスタイプ
ttl, // 生存時間
data, // データ
length, // データ長
options // IPオプション (任意である, optional)
);
IP受信インターフェース:
receive_ip_datagram(
source_address, // 送信元IPアドレス
dest_address, // 宛先IPアドレス
protocol, // 上位層プロトコル
data, // データ
length // データ長
);
1.4. 動作 (Operation)
インターネットプロトコルは、アドレッシング (addressing) と 分割 (fragmentation) という2つの基本機能を実装します。
アドレッシング (Addressing)
インターネットモジュールは、インターネットヘッダに含まれるアドレスを使用して、インターネットデータグラムを宛先に配送します。送信パスの選択はルーティング (routing) と呼ばれます。
アドレス構造:
32ビットIPアドレス = ネットワーク部 + ホスト部
クラスA: [0][7ビットネットワーク][24ビットホスト]
クラスB: [10][14ビットネットワーク][16ビットホスト]
クラスC: [110][21ビットネットワーク][8ビットホスト]
ルーティング決定:
def route_datagram(dest_ip):
if dest_ip in local_network:
# 直接配送
send_to_host(dest_ip)
else:
# ゲートウェイに転送
gateway = lookup_routing_table(dest_ip)
send_to_gateway(gateway, datagram)
分割 (Fragmentation)
インターネットモジュールは、「小パケット」ネットワークを通じて送信する必要がある場合、インターネットヘッダのフィールドを使用してインターネットデータグラムを分割および再構築します。
分割プロセス:
元のデータグラム (MTU=1500):
+--------+------------------------+
| IPヘッダ | 1480バイトデータ |
+--------+------------------------+
MTU=500のネットワーク経由後の分割:
フラグメント1:
+--------+--------+
| IPヘッダ | 480バイト | MF=1, Offset=0
+--------+--------+
フラグメント2:
+--------+--------+
| IPヘッダ | 480バイト | MF=1, Offset=60
+--------+--------+
フラグメント3:
+--------+--------+
| IPヘッダ | 520バイト | MF=0, Offset=120
+--------+--------+
分割フィールド:
- Identification: 元のデータグラムを識別
- Flags:
- DF (Don't Fragment): 分割しない
- MF (More Fragments): さらにフラグメントあり
- Fragment Offset: 元のデータグラムでのフラグメントの位置 (8バイト単位)
動作モデル
送信側:
1. 上位層からデータを受信
2. IPヘッダを追加
3. ルーティングテーブルを検索
4. 必要に応じて分割
5. ローカルネットワークに渡す
中間ゲートウェイ:
1. IPデータグラムを受信
2. 宛先アドレスを確認
3. ルーティングテーブルを検索
4. TTLを減少
5. 必要に応じて分割
6. 次のホップに転送
受信側:
1. IPデータグラムを受信
2. 宛先アドレスを確認 (自分宛てか?)
3. 分割されている場合は再構築
4. 上位層プロトコルに渡す
主要メカニズム
インターネットプロトコルは、サービスを提供するために4つの主要メカニズムを使用します: サービスタイプ (Type of Service)、生存時間 (Time to Live)、オプション (Options)、および ヘッダチェックサム (Header Checksum)。
サービスタイプ
- 希望するサービス品質を示すために使用される
- パラメータの抽象的または一般化されたセット
- ゲートウェイが送信パラメータを選択するために使用される
- ルーティングとネットワーク選択の決定をガイドする
生存時間
- データグラムの寿命の上限
- 送信者が設定し、各ホップで減少される
- TTLがゼロに達すると、データグラムは破棄される
- 自己破壊時間制限と考えることができる (can)
オプション
- 一部の状況で必要な制御機能
- 最も一般的な通信には不要
- タイムスタンプ、セキュリティ、特別なルーティングの規定を含む
ヘッダチェックサム
- ヘッダが正しく送信されたことの検証
- データにはエラーが含まれる可能性がある (may) (IPではチェックされない)
- チェックサムが失敗すると、データグラムは直ちに破棄される
信頼性モデル
インターネットプロトコルは、信頼性のある通信機能を提供しません。エンドツーエンドまたはホップバイホップの確認応答はありません。データのエラー制御はなく、ヘッダチェックサムのみがあります。再送信はありません。フロー制御はありません。
検出されたエラーは、インターネットプロトコルモジュールに実装されているインターネット制御メッセージプロトコル (ICMP) [3]を介して報告される可能性があります (may)。
主要概念の要約
データグラム (Datagram)
- 独立したパケット
- 完全なアドレス情報を含む
- 独立してルーティング可能である (can)
コネクションレス (Connectionless)
- 接続確立が不要
- 各データグラムは独立して処理される
- シンプルで効率的
ベストエフォート (Best Effort)
- 配送の保証なし
- 順序の保証なし
- 重複に対する保証なし
- 信頼性は上位層プロトコルで処理される
設計哲学: IPプロトコルは「シンプルなネットワーク、インテリジェントなエンドポイント」の設計哲学に従い、複雑さをネットワークエッジに押しやり、コアネットワークをシンプルでスケーラブルに保ちます。この設計により、インターネットはさまざまなアプリケーションとサービスをサポートできます (can)。