Tshark でパケットロスを分析する

WiresharkBeginner
オンラインで実践に進む

はじめに

この実験では、Wireshark のコマンドラインツールである Tshark を使用して TCP パケットロスを分析する方法を学びます。実際のターミナルコマンドを通じて、ネットワークトラフィックのキャプチャ、再送の特定、およびロス統計の解釈を練習します。

演習では、パケットロスのパターンを検出し、ネットワークパフォーマンス指標を理解する手順が案内されます。通常のトランスミッションとシミュレートされたロスシナリオの両方で実践的な経験を積み、実際の TCP 接続問題のトラブルシューティングを行います。

-f "tcp" で TCP をキャプチャする

このステップでは、Wireshark のキャプチャフィルタオプション -f "tcp" を使用して TCP トラフィックをキャプチャする方法を学びます。TCP (Transmission Control Protocol) はインターネットの核心プロトコルの 1 つで、信頼性の高いデータ配信を担当しています。このフィルタを使用すると、TCP パケットのみがキャプチャされます。これは、接続確立 (3 ウェイハンドシェイク)、再送、フロー制御などの TCP 固有の動作に焦点を当て、他のネットワークトラフィックに邪魔されずに分析したい場合に特に有用です。

  1. まず、LabEx 仮想マシン (VM) でターミナルを開きます。Xfce デスクトップのターミナルアイコンをクリックするか、ショートカット Ctrl+Alt+T を使用します。このターミナルで、このネットワーク分析に必要なすべてのコマンドを実行します。

  2. キャプチャファイルを保存するデフォルトの作業ディレクトリに移動します。

    cd ~/project
    

    このディレクトリは、実験作業用に特別に作成されており、ファイルを整理し、システムファイルと分けて保管します。

  3. 次のコマンドを実行して、TCP パケットのキャプチャを開始します。

    sudo tshark -f "tcp" -w tcp_capture.pcap
    

    各部分の機能を分解して説明します。

    • sudo は、パケットキャプチャに必要な管理者権限を付与します。
    • tshark は Wireshark のコマンドラインバージョンです。
    • -f "tcp" は、tshark に TCP パケットのみをキャプチャするよう指示します。
    • -w tcp_capture.pcap は、キャプチャしたパケットを tcp_capture.pcap という名前のファイルに保存します。
  4. tshark が実行されている間、別のターミナルタブまたはウィンドウ (Ctrl+Shift+T) を開き、いくつかの TCP トラフィックを生成します。ここでは、curl を使用して簡単なウェブリクエストを行います。

    curl -I https://www.labex.io
    

    -I フラグは、curl に HTTP ヘッダのみを取得するよう指示します。これにより、不要なデータをダウンロードすることなく、分析に十分なトラフィックが生成されます。

  5. 十分なパケットをキャプチャするために 5 - 10 秒待った後、tshark が実行されているターミナルで Ctrl+C を押してキャプチャを停止します。次のような出力が表示されるはずです。

    Capturing on 'eth1'
    10 packets captured
    

    これにより、セッション中にキャプチャされた TCP パケットの数が確認できます。

  6. ディレクトリ内のファイルを一覧表示することで、キャプチャファイルが正常に作成されたことを確認します。

    ls -lh tcp_capture.pcap
    

    -lh オプションは、ファイルサイズを人間が読みやすい形式 (KB や MB など) で表示し、その他の詳細も表示します。これにより、次のステップに進む前にキャプチャが適切に保存されたことを確認できます。

-Y "tcp.analysis.retransmission" で再送を確認する

このステップでは、送信者が送信したパケットの確認応答 (ACK) を受け取らず、再度パケットを送信する必要がある場合に発生する TCP 再送を調べます。頻繁な再送は、ネットワークの輻輳、パケットロス、またはその他の接続問題を示すことが多いため、これは重要なネットワークトラブルシューティング手法です。

始める前に、何を探すのかを理解しましょう。

  • TCP が予想される時間内に ACK (確認応答) を受け取らない場合、再送が発生します。
  • Wireshark/tshark は、特別なフィルタ "tcp.analysis.retransmission" を使用してこれらを識別できます。
  • まず、既存のキャプチャを確認し、次にシミュレートされたネットワーク問題を伴う新しいキャプチャを作成します。
  1. まず、キャプチャファイルが保存されているプロジェクトディレクトリにいることを確認します。

    cd ~/project
    
  2. 先ほど作成したキャプチャファイルを分析して、再送があるかどうかを確認しましょう。コマンドの各部分は次のように機能します。

    • -r は、保存されたキャプチャファイルから読み取ります。
    • -Y は、表示フィルタを適用して、再送のみを表示します。
    tshark -r tcp_capture.pcap -Y "tcp.analysis.retransmission"
    
  3. 最初のキャプチャ中にネットワーク接続が安定していた場合、次のような表示がされるでしょう。

    0 packets captured
    

    これは正常な現象で、そのキャプチャ期間中に再送が必要なパケットがなかったことを示しています。

  4. 再送をよりよく理解するために、今度は意図的にネットワークの輻輳を引き起こしながら新しいキャプチャを作成します。2 つのターミナルウィンドウを開きます。

    最初のターミナルで、TCP トラフィックのキャプチャを開始します。

    sudo tshark -f "tcp" -w retransmission_capture.pcap
    

    2 番目のターミナルで、再送を引き起こす可能性のある低速ダウンロードを実行します。

    curl --limit-rate 10k https://www.labex.io
    

    数秒後、両方のプロセスを Ctrl+C で停止します。

  5. 今度は、新しいキャプチャファイルを再送について調べます。

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission"
    

    今回は、再送されたパケットが一覧表示され、シーケンス番号やタイミングの詳細が表示されます。これらの情報は、ネットワークのパフォーマンス問題を診断するのに役立ちます。

-z tcp,tree で損失統計を要約する

このステップでは、Wireshark の強力な統計機能を -z tcp,tree オプションとともに使用する方法を学びます。このコマンドは、キャプチャしたデータ内のすべての TCP ストリームの構造化された概要を提供することで、TCP 会話を分析し、パケット損失のパターンを特定するのに役立ちます。

始める前に、TCP 会話統計が何を示すのかを理解しましょう。

  • ツリービューは、ホストのペア間の通信を表示します。
  • 各方向で転送されたフレーム (パケット) とバイト数をカウントします。
  • 問題を示す可能性のある不均衡なトラフィックを特定するのに役立ちます。
  1. まず、キャプチャファイルが保存されているプロジェクトディレクトリにいることを確認します。

    cd ~/project
    
  2. 次に、最初のキャプチャから基本的な TCP 統計を分析しましょう。このコマンドはキャプチャファイルを読み取り、会話ツリーを生成します。

    tshark -r tcp_capture.pcap -z tcp,tree
    
  3. 出力には、すべての TCP 会話の構造化されたテーブルが表示されます。次の列に注意してください。

    • <- は、自分のマシンに到達するトラフィックを示します。
    • -> は、自分のマシンから送信されるトラフィックを示します。
    • Total は、両方向のトラフィックをまとめたものです。
    ======================================================
    TCP Conversations
    Filter:<No Filter>
    |       <-      | |       ->      | |     Total     |
    | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
    ======================================================
    
  4. 次に、再送キャプチャを具体的に調べましょう。再送は、パケットが失われて再送信する必要がある場合に発生します。

    tshark -r retransmission_capture.pcap -z tcp,tree
    

    フレーム数が他の会話よりも著しく多い会話を探してください。これは、再送の問題を示すことが多いです。

  5. 最も正確な分析を行うために、これを前の再送フィルタと組み合わせることができます。これにより、会話ツリーに再送されたパケットのみが表示されます。

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission" -z tcp,tree
    

    これにより、どの会話でパケット損失が発生しているかを正確に特定することができます。

-q で静かな出力を得る

このステップでは、Wireshark の -q オプションを使ってパケット分析を簡素化する方法を探ります。大規模なネットワークキャプチャを扱う際、すべてのパケットを見る必要はなく、重要な統計情報だけが欲しいことが多いです。-q (quiet: 安静モード) オプションは、詳細なパケットリストを非表示にし、要約データのみを表示することで役立ちます。

  1. まず、キャプチャファイルが保存されている作業ディレクトリに移動しましょう。

    cd ~/project
    
  2. 次に、安静モードで TCP キャプチャファイルを分析します。このコマンドはファイルを読み取り、TCP 会話統計のみを表示します。

    tshark -r tcp_capture.pcap -q -z tcp,tree
    
  3. -q オプションの機能を理解するために、このオプションを外して同じコマンドを実行してみましょう。このバージョンでは、統計情報の前に個々のパケットがすべて表示されることに注意してください。

    tshark -r tcp_capture.pcap -z tcp,tree
    
  4. 安静モードオプションを前の再送フィルタと組み合わせることができます。これにより、再送統計のみをクリーンに表示できます。

    tshark -r retransmission_capture.pcap -Y "tcp.analysis.retransmission" -q -z tcp,tree
    
  5. 出力形式は次のようになり、パケットの詳細を表示せずに会話統計のみが表示されます。

    ======================================================
    TCP Conversations
    Filter:tcp.analysis.retransmission
    |       <-      | |       ->      | |     Total     |
    | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
    ======================================================
    

まとめ

この実験では、実践的なネットワークトラブルシューティング手法を通じて、Tshark を使用して TCP パケット損失を分析する方法を学びました。特定のフィルタを使用して TCP トラフィックをキャプチャし、再送を特定し、接続統計を生成してネットワーク性能を評価しました。

演習では、包括的な TCP ストリーム分析に -z tcp,tree や、効率的な統計レポートに -q といった Tshark の高度な機能の使い方を示しました。これらのスキルを使えば、実際のネットワーク環境でパケット損失の問題を迅速に診断し、トラブルシューティングすることができます。