タイムスタンプが有効になっていると、一部のSYNパケットに応答がありません


9

Ubuntu 12.04.3(カーネル3.8.0-31-generic)を実行しているマシン(「サーバー」)で待機するTCPサーバーがあります。2つの異なるクライアントマシンから接続を受信します。マシンAはUbuntu 12.04.4(3.11.0-17-generic)を実行しており、マシンBはUbuntu 11.10(3.0.0-32-server)を実行しています。

サーバーでTCPタイムスタンプが有効になっている場合(sysctl net.ipv4.tcp_timestamps = 1)、マシンAからのSYNパケットが「無視」されることがあります。サーバーでtcpdumpを使用すると(無差別モードでは)、SYNが正常に到着し、正しいチェックサムが表示されます-応答がないだけです-SYN / ACKもRSTもありません。マシンAは、SYNを何度か再送信してから、あきらめます。マシンAで実行されているクライアントソフトウェア(この場合はwget)はすぐに新しい接続を再試行して成功し、瞬時にSYN / ACKを取得します。

マシンBは同じサーバーで問題はなく、トラフィックは正常に見えます-マシンAと同じTCPオプションを使用しています(キャプチャファイルで確認したところ)。サーバーでTCPタイムスタンプを無効にすると、すべてが正常に機能します。

無視されたSYNパケットのタイムスタンプは私には有効であるように思われるので、なぜそれらが問題を引き起こしているのか、あるいは根本的な原因であるのかどうかはわかりません。

匿名のpcapをここに配置しましたhttps://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap。サーバー(10.76.0.74)で取得され、マシンA(10.4.0.76)がHTTP GET(パケット1〜10)を正常に実行し、1秒後に同じURL(パケット11〜17)を再度フェッチしようとしましたが、代わりにSYNは無視されます。パケット18から27は別の成功です。

これは「サーバーがSYNパケットに応答してSYN / ACKパケットを送信しないのはなぜですか」で説明した問題と同様の問題であり、タイムスタンプを無効にすることが回避策である一方で、何が起こっているのかを理解したいと思います。これは単なるバグですか?

実行中のローカルファイアウォールはありません。サーバーはかなりの数のTCP接続(常に約32K)を処理しますが、十分な空きメモリ/ CPUがあります。pcapに示されたテストの時点では、マシンAとサーバーの間に他のTCP接続はありませんでした。サーバーアプリケーションの受け入れキューが突然いっぱいになる兆候はありません(それ以外に、両方のクライアントに影響するはずです)。サーバーで取得したpcapでパケットが問題ないように見えるので、介在するネットワークデバイスが障害を起こしているようには見えません。

私は最初にこれをubuntuフォーラムに投稿しましたが、後から見ると、これはより適切な場所かもしれません。手がかりのローンを期待しています。

回答:


5

私の場合、次のコマンドでLinuxサーバーからのSYN / ACK応答がない問題を修正しました。

sysctl -w net.ipv4.tcp_tw_recycle=0

結局のところ、TCPタイムスタンプは便利です(PAWS、ウィンドウスケーリングなど)ので、TCPタイムスタンプを無効にするよりも正しいと思います。

上のドキュメントをtcp_tw_recycle明示的には、多くのNATルータがタイムスタンプを維持するとして、それを有効にすることを推奨されていないと述べているので、に同じIPからのタイムスタンプが一致していないようにキック。

   tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
          Enable fast recycling of TIME_WAIT sockets.  Enabling this
          option is not recommended for devices communicating with the
          general Internet or using NAT (Network Address Translation).
          Since some NAT gateways pass through IP timestamp values, one
          IP can appear to have non-increasing timestamps.  See RFC 1323
          (PAWS), RFC 6191.

問題のマシンはすべてアップグレードされており、問題は発生していないと思うので、今は試すことができません。この場合、クライアントとサーバーの間にNATは含まれていませんでした。まだ疑わしいバグのようです。
user133831
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.