データを転送しているサーバーがあります。 ifconfig
がMTUが1500であると報告しているにもかかわらず、サーバーがジャンボサイズのフレームを送信しているという事実にまでさかのぼるいくつかの問題がありました。これはどのように可能ですか?ボックスはCentOs5を実行しています。これは、ipv4で発生しています。
サイズが1500を超えるパケットの送信を停止するようにサーバーに指示するにはどうすればよいですか?
ラージセンドオフロードを無効にすると、問題が解決する場合があります。 MTUに関係なく、15k、さらには30kのパケットを見てきました。
サーバーでパケットをキャプチャしている場合は、TCP MTUよりも大きなセグメントを送信していることがわかります。ただし、ネットワーク上のパケットはMTUサイズのみになります。これは、キャプチャすることで確認できます。ネットワークデバイス(スイッチ)などで。あるいは、リモート(クライアント)マシンでパケットをキャプチャすると、各パケットが<= MTUであることがわかります。
この動作は、TSO/GSOが有効になっている場合、TCPセグメントがNICハードウェアによってMTUサイズのパケットに分割されるためです。tcpdumpはソフトウェアでキャプチャするため、レイヤーでは、MTUよりも大きいセグメントがNICカードに送信され、さらに転送されます。
NICのtso/gsoを無効にすると、すべての送信パケットが<= MTUサイズ(おそらくpMTUサイズ)であることがわかります。
サーバーはパケットをフラグメント化して1500バイトのチャンクにします。ネットワーク内のどこかでMTUが1500未満である可能性があり、これが問題の原因である可能性があります。 1500のサイズでもう一方の端にpingを実行できますか?
ping -s 1500 <ip>
また、より大きなサイズのパケットを送信できるはずです。リモートエンドまたはその間の何かがICMPパケットをフィルタリングしている場合は、ブロックしている可能性があります MTU検出 パケット。
ファイアウォールを介したICMPフラグメンテーションが必要(タイプ3、コード4)パケットを許可する必要があります