tcpのパケットロスをパッシブに監視する方法は?(Linux)

自分のマシンとの間のTCP接続におけるパケットロスをパッシブに監視するにはどうしたらいいですか?

基本的には、バックグラウンドでTCPのack/nak/re-transmitを監視して、どの相手のIPアドレスでパケットロスが発生しているかのレポートを作成するツールが欲しいです。

SFのこのような質問では、ほとんどがiperfのようなツールの使用を勧めています。 しかし、私のマシン上の実際のアプリケーションとの接続を監視する必要があります。

このデータは、LinuxのTCPスタックの中にあるだけなのでしょうか?

問題の規模を大まかに把握するには、netstat -sで再送回数の合計を記録します。

# netstat -s | grep retransmitted
     368644 segments retransmitted

grep for segments を実行すると、より詳細な情報を得ることができます。

# netstat -s | grep segments
         149840 segments received
         150373 segments sent out
         161 segments retransmitted
         13 bad segments received

もっと詳しく知りたい場合は、Wiresharkを起動するとよいでしょう。

Wireshark でフィルタを tcp.analysis.retransmission に設定し、フローごとの再送を確認します。

これが私が思いついた最良の選択肢です。

他にも行き詰まったところがあります。

  • netfilter/conntrackツールは再送を保持していないようです。
  • netstat -sを stracing したところ、/proc/net/netstat` を出力しているだけであることがわかりました。
  • proc/net/tcp の column 9 は期待できそうでしたが、残念ながら使われていないようです。
解説 (6)

これらの統計情報は /proc/net/netstat にあり、collectl はこれらの統計情報をインタラクティブに監視したり、後で再生するためにディスクに書き込んだりします。

[root@poker ~]# collectl -st
waiting for 1 second sample...
#
#PureAcks HPAcks   Loss FTrans
        3      0      0      0
        1      0      0      0

もちろん、ネットワークトラフィックと並べて表示したい場合は、-snを付ければOKです。

[root@poker ~]# collectl -stn
waiting for 1 second sample...
#
#  KBIn  PktIn  KBOut  PktOut PureAcks HPAcks   Loss FTrans
      0      1      0       1        1      0      0      0
      0      1      0       1        1      0      0      0
解説 (0)

ノースカロライナ大学(UNC)の人たちが、まさにこれを調べるためにユーティリティーを作ったようです。

メソドロジー となっています。 TCPはレガシープロトコルの典型的な例であり、変更を受けると 変更されます。残念ながら、TCPの損失検出/回復メカニズムのような TCPの損失検出/回復メカニズムのような基本的なものの評価は 包括的なものではありません。私たちの目的は、TCPの損失とその回復メカニズムの現実的な評価を TCPの損失とそのパフォーマンスへの影響を評価することを目的としています。

また、実世界のTCPコネクションの受動的な分析を行うことで、必要なレベルの詳細さと現実性を実現しています。

http://www.cs.unc.edu/~jasleen/Research-passivetcp.htm#Tool

ツール

このツールの目的は、シーケンス外のセグメントの識別と特性評価において、より完全で正確な結果を提供することです。 このツールの目的は、配列外のセグメントを特定し、特徴づけるために、より完全で正確な結果を提供することです。 tcpanaly、tcpflows、LEASTなどの以前のツールで提供されていたものよりも、より完全で正確な結果を提供することです。 やMysteryなどの既存のツールよりも正確な結果が得られます。私たちの手法は、次のように表示される各セグメントを分類します。 パケットトレースに現れる各セグメントを次のいずれかに分類します。 パケットトレースに現れた順序不同のセグメントを以下のカテゴリーに分類します。 タイムアウト、重複したACK、部分的なACK、選択的なACK、および暗黙の 回復などです。さらに、各再送は、それが必要であったかどうかについても評価されます。 必要であったかどうかも評価されます。

本番さながらとは言いませんが。 以前、ip/port/ackのタプルをメモリに格納し、pcap出力をスキャンして重複するデータをレポートする簡単なperlスクリプトを作ったことがありますが、これはより詳細な分析ができそうです。

解説 (0)