私のネットワークのMTU関連の問題を解決しています。知識が不足しており、ここでの説明が必要です。 :)
クライアントホスト(NIでMTU = 1500バイトで構成されている)がサーバーホスト(NIでMTU = 1400で構成されている)にトラフィックを送信する設定があります。クライアントは、時にはサーバーホストのMTU(1450バイトなど)よりも大きく、DFフラグが設定されているパケットを送信します。
どちらのホストもPMTUDを有効にしましたが(sysctl net.ipv4.ip_no_pmtu_disc
return実行0
、したがってDFフラグの実行)、何らかの理由でクライアントはこの特定のパスに低いMTUを使用する必要があるという事実を学習しません。ip route get %server-ip-here%
特別なMTUは返されません。
2つのホストは互いに非常に近く(同じDCには1つのルータしかありません)、2つのホスト間のすべてのデバイスの99.9%が1450バイトのパケットをうまく処理できるため、削除する理由はありません。 ICMP「断片化が必要」を再送信します。
私が理解したのは、ネットワークインターフェイスのMTUが1400バイトなので、サーバーホストからパケットがドロップされることです。
PMTUDで見つかったすべての記事によると、これらのICMPパケットはクライアントとサーバー間のルーターによってのみ送信されるようです。
誰かが私のアイデアを確認できますか?長さがローカルに設定された MTU よりも長いため、最終ホストが着信パケットをドロップする場合、ICMP の「フラグメンテーションが必要」を送信しませんか?
答え1
実際には、ICMPフラグメントを送信するために必要なものを文書化したRFC 1191(パスMTU検索)のみが見つかりました。
基本的な考え方は、ソースホストが最初にパスのPMTUが最初のホップの(既知の)MTUであると仮定し、DFビットセットと共にそのパスのすべてのデータグラムを送信することです。データグラムが大きすぎる場合配信予定破片なしルーター経由道に沿って、そのルーターそれらは破棄され、「DFを断片化して設定する必要がある」ことを意味するコードとともに、ICMP宛先到達不能メッセージが返されます[7]。
いつルーターできない今後データグラムがネクストホップネットワークのMTUを超え、Don't Fragment(フラグメント化しない)ビットが設定されているため、ルータはICMP Destination Unreachableメッセージをデータグラムソースに返す必要があり、コードは「フラグメント化が必要でDF」を示します。置かれている」。
すべての説明では、ICMPがホストではなくルータによって送信されると仮定します。再送信時に決定が行われます。その他インターフェイスのMTUが低すぎて受信できません。
ホスト(受信したパケットをルーティングしない)がこれらのICMPを発行するための規制はありません。以下を実行するアプリケーションに直接エラーを送信します。放射そのようなパケットですが、もしそうなら受け取った「正式に」サポートされていない(MTUが1400であるため)、サイズ1500のパケットは、ハードウェアがそれを破棄する(しかしそうでないか論争の余地がある)、パケットを破棄します。 t、私の考えではこれは(RFCで)未定義の動作であり、OSネットワークスタックがこれを受け入れることができるようです。
LANの設定が正しいと仮定する必要があります。ホストは、同じブロードキャストドメイン内の他のすべてのノードと同じMTUを持ちます。