2015-11-09 20 views
8

このパターンは、TCP接続を介してデータを転送している2つのRHEL 6ボックスの間で多く発生しています。クライアントはTCP Window Fullを発行します.0.2秒後にクライアントはTCP Keepalivesを送信し、サーバーは正しい形状の応答のように見えます。しかし、クライアントはこれに満足しておらず、ほぼ9秒後にRSTとの接続を最終的に閉じるまでTCPキープアライブを送信し続けます。TCPゼロウィンドウの後にTCPキープアライブが関与し、接続を誤って終了する

これは、これが唯一の沈黙の2時間まで行う必要があることを宣言し、デフォルトのTCPキープアライブconfiguratation

net.ipv4.tcp_keepalive_time = 7200 
net.ipv4.tcp_keepalive_probes = 9 
net.ipv4.tcp_keepalive_intvl = 75 

を持つRHELボックスにもかかわらず、です。 PCAPを間違って読んでいますか?

以下は、パターンのWiresharkのスクリーンショットです。中央に自分のパケットノートがあります。

Wireshark screenshot

M.

+0

これは本当にウィンドウプローブです。スクリーンショットはいつものように読むことができません。 – EJP

+0

あなたのアサーションを拡大してもよろしいですか?スクリーンショットを2回クリックすると読みやすくなります。必要に応じてPCAP抽出物を入手できます。 –

+0

2回のクリックでわかりやすくなりました。私はさらに拡大する必要はありません。 – EJP

答えて

0

クライアントから発信するパケットの送信元および宛先IPアドレスが、いくつかのデバイスが間に存在することを示す、応答パケットの宛先及び送信元IPアドレスと一致しません箱はNATをしています。また、パケットがキャプチャされた場所を理解することも重要です。おそらく、クライアント自体のパケットキャプチャが問題の理解に役立つでしょう。

クライアントが2時間以上データパケットを受信しない場合、TCPキープアライブを生成できることに注意してください。 RFC 1122によると、クライアントはピアからのキープアライブ応答を受信しない場合、キープアライブを再試行します。最終的には、再試行の連続失敗後に切断されます。

NATデバイスは通常、進行中の接続の状態を維持するために接続キャッシュを実装します。接続のサイズが制限に達すると、NATデバイスは新しい接続を処理するために古い接続を削除します。このようなシナリオにつながる可能性もあります。

特定のパケットキャプチャは、パケットがクライアントに到達していない可能性が高いことを示しているため、クライアントマシンでパケットをキャプチャすると便利です。

0

私は少し異なるトレースを読む: 送信者は、受信機が処理できる以上のデータを送信し、zerowindow応答 送信者は、ウィンドウプローブを送信する(それがそのためにすぐに道でキープアライブではない)と、アプリケーションがいないと10秒後に諦めます進捗状況を確認して接続を終了すると、リセットはTCP sendbufferに保留中のデータがあることを示します。 アプリケーションがソケットへの大きなブロックサイズの書き込みを使用している場合、tcpdumpに表示されている10秒以上進捗が見られないことがあります。

これはストレート接続(などなしプロキシ)である場合、最も可能性の高い理由は、最大受信停止を受けた(または送信者&データ伝送よりも遅い)ということである

0

これは、パケット番号249522のように私には見えます接続を中止するために10.120.67.113でアプリケーションを誘発しました。すべてのウィンドウプローブは.132(ペイロードなし)から0のウィンドウレスポンスを得て、次に.132は63バイトのパケット249522(依然として0のウィンドウを表示します)を送信します。 PSHフラグは、この63バイトが.132のアプリによって書き込まれた全データであることを示唆しています。同じミリ秒の.113はRSTで応答します。 TCPスタックがデータ受信後すぐにRSTを送信する理由は考えられません(シーケンス番号は正しい)。私の見解では、.113のアプリは、送られた63バイトのメッセージに基づいてあきらめることを決めたことがほぼ確実です。132.

関連する問題