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

6.2 Storing PMTU Information (PMTU 情報の保存)

6.2 Storing PMTU Information (PMTU 情報の保存)

一般的に, IP 層は学習した各 PMTU 値を特定のパスに関連付ける必要があります。パスは送信元アドレス, 宛先アドレス, および IP type-of-service (サービスタイプ) によって識別されます。(一部の実装はパスの送信元アドレスを記録しません。これは可能な送信元アドレスが 1 つしかないシングルホームホストには受け入れられます。)

注意: 一部のパスは異なるセキュリティ分類によってさらに区別される場合があります。このような分類の詳細は, このメモの範囲を超えています。

この関連付けを保存する明白な場所は, ルーティングテーブルエントリのフィールドとしてです。ホストはすべての可能な宛先のルートを持っているわけではありませんが, すべてのアクティブな宛先のホストごとのルートをキャッシュできるはずです。(この要件は ICMP Redirect (リダイレクト) メッセージを処理する必要性によってすでに課されています。)

ホストごとのルートが存在しないホストに最初のパケットが送信される場合, ネットワークごとのルートのセットまたはデフォルトルートのセットからルートが選択されます。これらのルートエントリの PMTU フィールドは, 関連する最初のホップデータリンクの MTU に初期化される必要があり, PMTU Discovery プロセスによって変更されてはなりません (must never)。(PMTU Discovery はホストごとのルートのエントリのみを作成または変更します)。Datagram Too Big メッセージが受信されるまで, 最初に選択されたルートに関連する PMTU は正確であると推定されます。

Datagram Too Big メッセージが受信されると, ICMP 層は Path MTU の新しい推定値を決定します (パケット内の非ゼロの Next-Hop MTU 値から, またはセクション 5 で説明されている方法を使用して)。このパスのホストごとのルートが存在しない場合は, 1 つが作成されます (ほぼホストごとの ICMP Redirect が処理されているかのように。新しいルートは現在のルートと同じ最初のホップルータを使用します)。ホストごとのルートに関連する PMTU 推定値が新しい推定値よりも高い場合, ルーティングエントリの値が変更されます。

PMTU の減少についてパケット化層に通知する必要があります。パスを積極的に使用しているパケット化層インスタンス (たとえば TCP 接続) は, PMTU 推定値が減少した場合に通知される必要があります。

注意: Datagram Too Big メッセージに UDP パケットを参照する Original Datagram Header (元のデータグラムヘッダー) が含まれている場合でも, その接続のいずれかが指定されたパスを使用する場合, TCP 層に通知する必要があります。

さらに, Datagram Too Big メッセージを引き出したデータグラムを送信したインスタンスは, PMTU 推定値が変更されていない場合でも, データグラムが破棄されたことを通知されるべきです。これにより, 破棄されたデータグラムを再送信できます。

注意: 通知メカニズムは, ICMP Source Quench (ソース抑制) メッセージの通知を提供するために使用されるメカニズムに類似させることができます。一部の実装 (4.2BSD 派生システムなど) では, 既存の通知メカニズムは関与する特定の接続を識別できないため, 追加のメカニズムが必要です。

あるいは, 実装は次にPMTU 推定値より大きいデータグラムを送信しようとするまで通知を延期することによって, PMTU 減少のための非同期通知メカニズムの使用を回避できます。このアプローチでは, DF ビットが設定されたデータグラムを送信 (SEND) しようとし, データグラムが PMTU 推定値より大きい場合, SEND 関数は失敗し, 適切なエラー表示を返す必要があります。このアプローチは, 接続のないパケット化層 (UDP を使用する層など) により適している可能性があります。一部の実装では, ICMP 層からそれを "通知" することが困難な場合があります。この場合, 通常のタイムアウトベースの再送信メカニズムを使用して, 破棄されたデータグラムから回復します。

パスを使用しているパケット化層インスタンスに PMTU の変化について通知することと, 特定のインスタンスにパケットが破棄されたことを通知することは異なることを理解することが重要です。後者はできるだけ早く (つまり, パケット化層インスタンスの観点から非同期的に) 行うべきですが, 前者はパケット化層インスタンスがパケットを作成したいときまで遅らせることができます。再送信は, Datagram Too Big メッセージで示されるように, 破棄されたことがわかっているパケットに対してのみ行うべきです。