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を知ることができたのですか。
有識者の方がいらっしゃいましたら、ご回答いただけますと幸いです。
例えば以下のような構成があるとします。
<構成>
ホスト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ビットフラグをオンにして送出します。
見受けられるため、ご質問への回答は割愛します。
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ビットをオンにしているだけ」かと思うのですが、理解は正しいでしょうか?
とてもわかりやすいご説明で理解できました。
(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日経過したスレッドへの投稿はできません。