23

お客様の1人が、アプリケーション(PC上)からサーバー(地理的に異なる場所)にデータを送信するのに問題があります。1100バイト未満のパケットを送信する場合、すべてが正常に機能しますが、これを超えると、TCPが数秒ごとにパケットを再送信し、応答がないことがわかります。テストに使用しているパケットは約1400バイトです(ただし1472未満)。1472バイトのICMPpingをwww.google.comに送信して、応答を得ることができます(したがって、ルーター/最初の数ホップではありません)。

私たちのアプリケーションがこれらのパケットにDFフラグを設定していることがわかりました。サーバーに向かう途中のルーターのMTUは1100以下であり、パケットをドロップしていると思います。

これは5000人に1人のクライアントに影響しますが、すべての人のルートが異なるため、これは予想されます。

データはSOAPエンベロープであり、SOAP応答が返されることを期待しています。なぜそれを行うのかを正当化することはできません。これを行うためのコードは前の開発者によって書かれました。

それで...アプリケーションデータのTCPパケットにDFフラグを設定することの利点または正当性はありますか?

ネットワーク診断アプリケーションに必要な理由は考えられますが、私たちの状況では必要ありません(データが断片化されているかどうかに関係なく、エンドポイントに到達する必要があります)。私たちのシステム管理者の1人は、SSLを使用することと関係があるかもしれないと言いましたが、私が知る限り、SSLはストリームのようなものであり、断片化に関係なく、ストリームが最後に再構築される限り、問題はありません。

正当な理由がない場合は、アプリケーションの動作を変更します。

前もって感謝します。

4

3 に答える 3

49

DFフラグは通常、TCPセグメントを伝送するIPパケットに設定されます。

これは、TCP接続がパスMTUに一致するようにセグメントサイズを動的に変更できるためであり、TCPセグメントがそれぞれ1つのIPパケットで伝送されると、全体的なパフォーマンスが向上します。

そのため、TCPパケットにはDFフラグが設定されています。これにより、中間ルーターがパケットが大きすぎるためにパケットを破棄する必要がある場合に、ICMPFragmentationNeededパケットが返されます。次に、送信TCPは、接続のパスMTU(Maximum Transmission Unit)の見積もりを減らし、より小さなセグメントで再送信します。DFが設定されていない場合、送信側TCPは、送信しているセグメントが大きすぎることを認識しません。このプロセスはPMTU-D(「経路MTU探索」)と呼ばれます。

ICMP Fragmentation Neededパケットが通過しない場合は、壊れたネットワークを処理しています。理想的には、最初のステップは、誤って構成されたデバイスを識別し、それを修正することです。ただし、それでも問題が解決しない場合は、アプリケーションに構成ノブを追加して、TCP_MAXSEGソケットオプションをに設定するように指示しますsetsockopt()。(誤って構成されたデバイスの典型的な例は、経験の浅いネットワーク管理者がすべてのICMPをドロップするように構成したルーターまたはファイアウォールであり、TCP PMTU-Dでフラグメンテーションが必要なパケットが必要であることを認識していません)。

于 2010-05-07T13:31:35.037 に答える
2

Path-MTUディスカバリーの操作は、RFC 1191、https: //www.rfc-editor.org/rfc/rfc1191で説明されています。TCPは、特定のサイズを超えるすべてのパケットを2つの部分(通常は1つは大きいものと1つは小さいもの)にフラグメント化するよりも、Path-MTUを検出する方が適切です。

于 2016-01-12T17:23:14.930 に答える
-3

どうやら、NFSのようないくつかのプロトコルは断片化(リンクテキスト)を回避することで恩恵を受けています。ただし、本当に必要な場合を除いて、通常はDFを要求するべきではないという点で正しいです。

于 2010-05-06T07:29:55.460 に答える