web-dev-qa-db-ja.com

タイムスタンプが有効になっていると、一部の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フォーラムにこれを投稿しましたが、後から考えると、これがより適切な場所である可能性があります。手がかりの貸し出しを期待しています。

9
user133831

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

sysctl -w net.ipv4.tcp_tw_recycle=0

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

tcp_tw_recycleのドキュメントには、多くのNATルーターがタイムスタンプを保持しているため、有効にすることは推奨されないため、 [〜#〜] paws [〜# 〜] 同じ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.
5
lav