
前回の
記事では 、Webリソースを開く速度の監視について検討しました。 速度を測定する際の並行プロセスとして、Webページを開く速度が遅いことの考えられる理由をよりよく理解するために、TCP異常を測定することは興味深いでしょう。 この記事では、この問題の解決を試みます。
TCP異常は、送信中の情報の損失を示すパケットと見なされます。 おそらく、ネットワークトラフィックの詳細な分析のための最も一般的なツールは、
Wiresharkユーティリティとそのコンソールバージョンtsharkです。 したがって、最初のアナライザーと見なします。
TCPの異常には次のものが含まれます。
- tcp再送信-送信者が確認期間の終了後にパケットを再送信すると発生します。
- tcp duplicate_ack-同じACK番号が表示され、送信者が送信したデータの最後のバイトより小さい場合に発生します。 受信者がシーケンス番号のギャップを検出すると、欠落したパケットが正常に受信(再送信)されるまで、この接続を介して受信する後続の各パケットに対して重複ACKを生成します。
- tcp lost_segment-パケットのシーケンス番号にギャップがある場合に発生します。 パケットが失われると、ACKが重複し、再送信が発生する可能性があります。
- tcp.analysis.fast_retransmission-送信者が確認済みパケットよりも大きいシーケンス番号を持つ複数のパケットを受信すると発生します。この場合、送信者は確認タイマーが切れる前にパケットを再送信します。
- -tcp ack_lost_segment-確認応答パケットのシーケンス番号にギャップがある場合に発生します。
tsharkを使用してパッケージを分析するには、次の式を使用します。
tshark -i bce0 -t ad -qz io,stat,5,"(ip.addr==1.1.1.1) && tcp","COUNT(tcp.analysis.retransmission)(ip.addr==1.1.1.1) && tcp.analysis.retransmission","COUNT(tcp.analysis.duplicate_ack)(ip.addr==1.1.1.1) && tcp.analysis.duplicate_ack","COUNT(tcp.analysis.lost_segment)(ip.addr==1.1.1.1) && tcp.analysis.lost_segment","COUNT(tcp.analysis.fast_retransmission)(ip.addr==1.1.1.1) && tcp.analysis.fast_retransmission","COUNT(tcp.analysis.lost_segment)(ip.addr==1.1.1.1) && tcp.analysis.ack_lost_segment")
どこで
bce0は、パケット分析が実行されるインターフェイスの名前です。 linux / Unixシステムでのこの名前は、ifconfigコマンドで確認できます。
1.1.1.1-調査対象のリソースのIPアドレス
コマンドの出力の結果として、テーブルを取得します。その後、テーブルを処理し、グラフ化のためにデータベースにロードします。
テーブル ====================================================================================================== | IO Statistics | | | | Duration: 5. 40977 secs | | Interval: 5 secs | | | | Col 1: (ip.addr==1.1.1.1) && tcp | | 2: COUNT(tcp.analysis.retransmission)(ip.addr==1.1.1.1) && tcp.analysis.retransmission | | 3: COUNT(tcp.analysis.duplicate_ack)(ip.addr==1.1.1.1) && tcp.analysis.duplicate_ack | | 4: COUNT(tcp.analysis.lost_segment)(ip.addr==1.1.1.1) && tcp.analysis.lost_segment | | 5: COUNT(tcp.analysis.fast_retransmission)(ip.addr==1.1.1.1) && | | tcp.analysis.fast_retransmission | | 6: COUNT(tcp.analysis.lost_segment)(ip.addr==1.1.1.1) && tcp.analysis.ack_lost_segment | |----------------------------------------------------------------------------------------------------| | |1 |2 |3 |4 |5 |6 | | | Date and time | Frames | Bytes | COUNT | COUNT | COUNT | COUNT | COUNT | | |-------------------------------------------------------------------------------| | | 2017-07-10 15:00:45 | 507 | 481496 | 1 | 0 | 2 | 0 | 0 | | | 2017-07-10 15:00:50 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ======================================================================================================
前の記事と同様に、ツールとして、CactiとPython3を使用します。 前の記事のスクリプトをアップグレードして、速度とTCPの異常を測定します。
スクリプトを実行すると、次のように表示されます(オペレーティングシステムにtshark、nslookup、wgetユーティリティをインストールする必要があります)。
$python3.3 web_open.py -h_page habrahabr.ru web_speed_test:10960.000 tcp_error:2.0
以下は、1つのRRAから2つのチャートを取得するためにCactiのデータをアップグレードする方法に関する簡単な説明です。
サボテン1.データ入力メソッドに追加の出力フィールドを追加します。

2.追加のtcp_errorエリアをData Temlateに追加します

3.グラフテンプレートをコピーして追加情報を追加します。新しいチャートを開始するとき、最初にこのテンプレートを使用する必要があります。

4.上記のテンプレートを使用して、前の記事で示したようにグラフを開始し、グラフを複製します。

5.結果は次のようになります。

6.最初のチャートのデータを正しいものに変更します。 まず、テンプレートを変更し、[保存]をクリックしてから、データソースが正しいことを確認し、必要に応じて正しいものを選択します。

7. 2番目のチャートのデータを変更します。

すべてが正しく行われた場合、次のグラフが取得されるはずです


さらに、肯定的なレビューを伴う計画によれば、次の記事ではこれらの統計の近代化を検討します。
- TCPおよびICMP RTDの追加(往復遅延)。
- 可視化システムとデータベースを備えたホストサーバーの制御下で、プローブを分離するための測定値の削除。
- 任意のネットワークルーター(Cisco、Juniper、Huawei)からICMP RTDをテストする機能。
お時間をいただきありがとうございます。