2016-01-20 16 views
5

私はUbuntu上で動作するApacheサーバーを持っています。クライアントは画像を接続してダウンロードします。基礎となるTCP接続のRTT推定値を抽出する必要があります。これを行う方法はありますか?多分、私のtcpスタックをデバッグモードで実行して、どこかにこの情報を記録するようなものでしょうか?LinuxでTCPラウンドトリップ時間(RTT)を抽出する

私はtcpdumpを実行し、記録されたトレースからRTTを抽出したくないことに注意してください。 TCPスタックのRTT見積もりが必要です(明らかに、これはTCP_INFOソケットオプションで取得できる情報の一部です)。フックを挿入し、すべての着信パケット(またはすべての変更)にTCP接続の推定RTTを記録するには、基本的にtcpprob(kprobe)のようなものが必要です。

UPDATE

私は解決策を見つけました。 rtt、輻輳ウィンドウなどはtcpprobeを使用してログに記録できます。私は以下の答えを掲示した。

+0

http://stackoverflow.com/questions/16231600/fetching:

kill $pid 

output.outのフォーマットが(ライン198でsourceに係る):停止するには、単にこのプロセスを殺します-the-tcp-rtt-in-linux – indiv

+0

ありがとう!うん、私は "ss"に精通していますが、RTTの非常に粗いサンプリングを私に与えるので、私が必要とするものではありません。フックを挿入し、すべての着信パケット(またはすべての変更)にTCP接続の推定RTTを記録するには、tcpprob(kprobe)のようなものが必要です。 – kakhkAtion

+2

Hmm。まあ、Linuxの輻輳制御アルゴリズムは、 'net/ipv4 /'ディレクトリのプラグイン可能なモジュールです。それぞれrttを別々に計算します(そして、[reno](http://lxr.free-electrons.com/source/net/ipv4/tcp_cong.c)はそれをまったく計算しません)!特定の実装にフックする必要があります。私はあなたに立方体のタグが付いているので、それは[tcp_cubic.c](http://lxr.free-electrons.com/source/net/ipv4/tcp_cubic.c)です。私はrttを得るための一般的な方法はないと思っていますが、確かに間違っている可能性があります... – indiv

答えて

3

これは、kprobeを用いtcp_recv処理経路にフックを挿入するモジュールは着信パケットに応答して、TCPコネクションの状態を記録している、tcpprobeを用いて行うことができます。

sudo modprobe tcp_probe port=443 full=1 
sudo chmod 444 /proc/net/tcpprobe 
cat /proc/net/tcpprobe > /tmp/output.out & 
pid=$! 

フル= 1:受信

フルすべてのACKパケットにログオン= 0

あなたはポート443上のTCP接続を調査したいとしましょう、あなたは、次の操作を行う必要があります:ログオンのみコンドームの変更(これを使用すると出力が空になる可能性があります)

今すぐpidは、プローブを突き刺す。

[time][src][dst][length][snd_nxt][snd_una][snd_cwnd][ssthresh][snd_wnd][srtt][rcv_wnd] 
関連する問題