2016-04-07 11 views
7

netstatコマンド出力にRecv-QとSend-Qカラムを使用することこれをリアルタイムシナリオで使用する場合は、私のシステムでは、列の両方が常にゼロとして表示されます。それはどういう意味ですか?私の男のページからRecv-QとSend-Qの使用

答えて

8

のRecv-Q

設立:このソケットに接続されたユーザプログラム によってコピーされなかったデータのバイト数。

リスニング:Kernel 2.6.18以来、この列には現在のsyn バックログが含まれています。

送信-Q

設立:リモート ホストによって認められなかったデータのバイト数。

リスニング:Kernel 2.6.18以降、この列にはsynバックログの最大サイズ が含まれています。

これが0に固執している場合は、接続の両側にあるアプリケーションとそのネットワークが正常に機能していることを意味します。実際の瞬時値は0とは異なる場合がありますが、実際にそれを観察する機会はありません。これは(確立された接続上で、私はあなたのアイデアを得ると思います)0と異なる場合があります現実のシナリオの

例:

私は最近に話しLinuxの組み込みデバイス上で働いていました(設計が不適切な)第三者のデバイス。このサードパーティ製のデバイスでは、アプリケーションが明らかにスタックされていて、TCP接続で受信したデータを読み込んでいないため、TCPウィンドウが0になり、数十秒間そのままになっていました(ミラーポートのwireshark 2つのホスト)。そのような場合には:

  • のRecv-Q:は、いくつかの屋根値まで表示増加のRecv-Qを有することができる(私は が何を意味していなかった)、サードパーティのデバイスにnetstatを実行しています アプリケーションが ソケットで利用可能なデータを読み取らないため、ウィンドウが が0になるため、反対側(私)はデータ送信を停止します。これらのデータは、TCP実装の 貼り付けられたアプリケーションに - 受信側から 側、アプリケーションの問題。

  • 送信-Q:netstat実行されている( 1 /問題は、wiresharkのから明らかになったと 及び2の上に最初のケースだったので、私が試したしなかった/これは100%側の私はなかったです>を送信者 側から、TCPの実装を受ける( - 再現可能)送る-Qを、OSレベルでのかの他の側のTCP実装 がstuckedと私のデータをACKnowleding停止されている非ゼロ を示している可能性が典型的にはt彼はOSレベル)の問題です。

TCPウィンドウがダウンして0に戻った後、私のLinuxのTCP実装が不正な動作やデータを送信するために継続した場合は、上記の描写送信-Qのシナリオはまた、送信側の問題(私の側)てもよいし、 :受信側は、このデータのための余地がない - > ACKnowledgeしません。

Send-Qの問題は、受信者が原因ではなく、送信者と受信者の間のルーティング問題によって発生する可能性があります。いくつかのパケットは、2つのホスト間で "オンザフライ"ですが、ACKnowledgeはまだありません。 一方、Recv-Qの問題は明らかにホスト上にあります。パケットは受信され、ACKnowledgedですが、まだアプリケーションから読み取られていません。

EDIT:実際の生活の中で

、非安っぽいホストおよびアプリケーションとあなたが合理的に、期待できるとして、私はいくつかのルーティングの問題でほとんどの時間を引き起こしたことを送信-Qの問題を賭けたいです/ネットワークのパフォーマンスが低下しています。パケットの「オン・ザ・フライ」の状態を忘れてはいけません:

  • 、パケットは、送信者と受信者間のネットワーク上

  • (または受信することができるが、ACKはまだ送っていません上記を参照)

  • またはACKが受信者と送信者の間のネットワーク上に存在する可能性があります。

パケットを送信してからACKするには、RTT(ラウンドタイムトリップ)が必要です。