Path MTU Discoveryについて

たにしさん  
(No.1)
RFCを読んでもイマイチ理解できず教えていただきたいです....。

例えば以下のような構成があるとします。
<構成>
ホストx - ルータA - ルータB - ルータC - ホストy
<経路のMTU>
ホストx - ルータAのMTUは1400
ルータA - ルータBのMTUは1300
ルータB - ルータCのMTUは1200
ルータC - ホストyのMTUは1200
<OS>
ホストx,yはWindows

ここで、ホストxがホストyまでFTPをしたいとします。

①PMTUDはどのタイミングで行われるのですか?
  FTPを始める前ですか?
  
②①でホストxがPMTUDをする時、どのようなパケットをルータAに送るのですか?
DFビットを立てるのはなんとなく想像がつきますが、PMTUD専用のICMPが準備されているのでしょうか?

③ホストxがPMTUDをして、ルータAはx-y間のPMTUを回答しますよね。
今回の場合、PMTUは1200です。
ルータAはどうやってその先のPMTUを知ることができたのですか。

有識者の方がいらっしゃいましたら、ご回答いただけますと幸いです。
2024.02.22 00:55
hisashiさん 
NW ゴールドマイスター
(No.2)
PMTUDの仕組みを誤認されているところが
見受けられるため、ご質問への回答は割愛します。

PMTUDには次の2つの用語を理解する必要があります。

・DFビットフラグ
パケットサイズが中継ルータの許容できるMTU値を超えた場合、ルータでのフラグメントを禁止するフラグ

・ICMP(Type 3 Code 4)
パケットサイズが中継ルータの許容できるMTU値を超えた場合、ルータからクライアントに通知するメッセージ


PMTUDとは、対向ホストに到達可能なMTU値に調節する仕組みのことです。
次の①~④の過程を経て調整されます。

①パケットサイズが中継ルータで許容できるMTU値を超えた場合、DFビットフラグがオンのため
  ルータはパケットを破棄し、クライアントに自身の許容できるMTU値をICMPパケット(Type 3 Code 4)で通知

②ICMPパケット(Type 3 Code 4)を受信したクライアントは、以前に送信したパケットが送信できなかったことを知り、ルータから通知されたMTU値に収まるようにパケットのデータを小分けし再送する

③パケットは、その先のルータでも同様に①と同様にMTU値が超過した場合、①と②の処理をする。

④ ①②③を繰り返し、経路上にあるリンクの最小MTU値に収まるようにデータを調整され、
   対向のホストにパケットが届けられるようになる。


ご提示の<経路のMTU>、<OS>を例にしますと

1.3wayハンドシェイクにて、ホストxは、ホストyとコネクションを確立する。
  (syn、syn+ack、ackは、データサイズが小さいためルータ上のMTU値を超過しません)

2.ホストxからホストyにデータ転送
3.ルータAより許容できるMTU値(1300)をICMPパケットで受信し、データサイズを調整し再送
4.ルータBより許容できるMTU値(1200)をICMPパケットで受信し、データサイズを調整し再送
5.PMTUDによりリンクの最小MTU値1200でホストxよりデータサイズが調整され、対抗のホストyにパケットが届く
6.後続のパケットは「5.」で得られたMTU値1200に収まるようにデータを調整し送出。

※WindowsやLinuxはデフォルトMTU値1500でパケットを送出します。
  ルータAのホストx側に設定されたMTU値は、ホストx側から送出するパケットの精査の対象にはなりません。
  TCP通信は、DFビットフラグをオンにして送出します。
2024.02.23 01:14
たにしさん  
(No.3)
丁寧なご回答ありがとうございます。
とてもわかりやすいご説明で理解できました。
(RFCも確認し、理解を深めました。)

大変恐縮ですが、
ご回答について2つ追加でご質問をさせていただけないでしょうか。

①TCP通信は、DFビットフラグをオンにして送出します。

→TCP通信は基本的にDFビットがオンになっているという意味でしょうか?

②ネット上で「PMTUDを有効にする」という文言をよく見かけます。
ホストに対してこの文言が使われている場合、「小難しく言っているだけで、DFビットをオンにしているだけ」かと思うのですが、理解は正しいでしょうか?
2024.02.25 14:40
hisashiさん 
NW ゴールドマイスター
(No.4)
>→TCP通信は基本的にDFビットがオンになっているという意味でしょうか?

ご認識のとおりです。
最近のOSは殆どDFビットをオンにします。


>②ネット上で「PMTUDを有効にする」という文言をよく見かけます。
ホストに対してこの文言が使われている場合、「小難しく言っているだけで、DFビットをオンにしているだけ」かと思うのですが、理解は正しいでしょうか?

PMTUDに対応している場合、デフォルトDFビットをオンにするという解釈が正しいと思います。
(ICMPパケット(Type 3 Code 4)の解釈、データサイズを最適化+再送動作が必要)

たとえばWindowsでpingを実行する際、-fオプションでDFビットをオンにすることができますが、PMTUDは、機能しません。

TCP通信は、PMTUDに対応しているとお考えいただいて差し支えありません。
2024.02.25 23:13

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop