タイムスタンプが有効になっていると、一部のSYNパケットに応答がありません
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フォーラムに投稿しましたが、後から見ると、これはより適切な場所かもしれません。手がかりのローンを期待しています。