Wiresharkを使った解析

Wiresharkを使ったパケット全体の流れの解析、1つ1つのパケットの解析方法について説明しています。Wiresharkのインストール、実行、画面の見方からフィルタ方法、停止方法等基本的な使い方については前ページの「Wiresharkの使い方」をご参照下さい。

パケット一覧部概略

 パケット一覧部(Packet List)は概ね以下のようになっています。

Wiresharkを使った解析1

 赤枠で囲った部分の説明は以下の通りです。

【パケット一覧部の項目】
項目 説明
No. 採取したパケットの順番を示します。
Time 1番目のパケットから経過した時間を秒で示します。「ビュー」から「時刻表示形式」を選択すると何時何分、1つ前のパケットからの間隔等に表示を切り替える事が出来ます。
Source 送信元のIPアドレスを示します。IPアドレスがない場合はMacアドレスが表示されます。
Destination 送信先のIPアドレスを示します。IPアドレスがない場合はMacアドレスが表示されます。
Protocol プロトコルを示します。
Length フレームの長さをByteで表示します。
Info そのパケットがどんな意味を持つか概略を表示します。

パケット一覧部での解析

 表示されているパケットについて説明していきます。

 表示されているパケットは以下のようにパソコンからインターネットにあるWebサーバーにブラウザでアクセスした際に採取したパケットを加工したもので、IPアドレスも以下の図のように加工しています。

Wiresharkを使った解析2
Wiresharkを使った解析3

 赤枠部分はARPのやりとりを示します。No.1のパケットはパソコンがルーターのMacアドレスを知るために宛先をブロードキャストとしてARP解決を行おうとしています。Destination部分がBroadcast、Info部分がWho has 172.16.1.1となっているのが確認出来ると思います。

 No.2のパケットはルーターからの応答で自身のMacアドレスを応答しています。Info部分で172.16.1.1 is at 11:ff:11:ff:11:ffとなっているのが確認出来ると思います。

Wiresharkを使った解析4

 既にパソコンのARPテーブルに載っている場合は、この通信は発生しません。

Wiresharkを使った解析5

 赤枠部分はDNSのやりとりを示します。No.3のパケットでパソコンがルーターにexample.comのIPアドレスを教えてくれるように問い合わせています。Info部分がStandard query 0x0cf3 A example.comになっているのが確認出来ると思います。queryは問い合わせを意味します。

 No.4のパケットはルーターからの回答でexample.comのIPアドレスは172.16.2.1である事が分かります。responseは応答を意味します。

Wiresharkを使った解析6

 既にパソコンのDNSキャッシュに載っている場合は、この通信は発生しません。

 DNSの応答がない場合は、DNSサーバーと通信出来ていない可能性があります。存在しないFQDNで問い合わせをしても、DNSサーバーからは存在しないと応答があるためです。

 ここまでで通信先のIPアドレスが分かったため、次からがWebサーバーとの通信です。

Wiresharkを使った解析7

 赤枠部分でTCP通信を開始する時の3ウェイハンドシェイクを行っています。パソコン→Webサーバー、Webサーバーから応答、パソコンから再度応答の順で、info部分では[SYN]、[SYN,ACK]、[ACK]と順番になっているのが確認出来ると思います。

Wiresharkを使った解析8

 最初の[SYN]が送信されているにも関わらず、[SYN,ACK]が返ってこない場合は正常にルーティング出来ていない、フィルタリングされている等の要因が考えられます。

 通信出来ない場合は、多くの場合、ここまでのどこかで止まっていると思います。

Wiresharkを使った解析9

 3ウェイハンドシェーク完了後、パソコンからWebサーバーにコンテンツの要求を示すコマンドを送信しています。info部分でGET / HTTP/1.1が確認出来ると思います。これはhttpのコマンドで他にはPOST等があります。

Wiresharkを使った解析a
Wiresharkを使った解析b

 No.9と10のパケットでパソコンからの要求に応じてWebサーバーからデータを送信しています。No.11はそのAckで正常にデータを受信している事を示しています。ここでは「TCP通信の流れ」で示したWindowsの遅延Ackに従い、2つ受信したらAckを返しています。

 No.12から14も同様で繰り返しになります。その際、Ack番号がMSS値である1414byteを2パケット分足した数増えて行きます。No.7、No11、No.14のinfo部分でAck=1、Ack=2829、Ack=5657と変わっているのが確認出来ると思います。

Wiresharkを使った解析c
Wiresharkを使った解析d

 通信の終わりを示します。パソコンから[FIN,ACK]を送信し、サーバー側では[ACK]で応答します。又、サーバー側からも[FIN,ACK]を送信し、パソコンから[Ack]の応答があります。

Wiresharkを使った解析e

 通信に異常がある場合は黒や茶色等で分かるように色分けされて表示されるため、そのパケットに注目すると解析し易くなります。

Wiresharkを使った解析f

パケット詳細部概略

 パケット詳細部(Packet Details)は以下のように最初は要約された情報だけが表示されていますが、左のWiresharkのアイコン1部分をクリックする事で詳細が見れるようになります。

Wiresharkを使った解析g

 例えば上から2つ目のWiresharkのアイコン1をクリックすると以下のようになります。

Wiresharkを使った解析h

 見たい部分のWiresharkのアイコン1をクリックしていく事で詳細が見れるようになっています。

 IPヘッダー部分でWiresharkのアイコン1をクリックすると以下のように表示されます。

Wiresharkを使った解析i

 各項目の意味は以下の通りです。

【パケット詳細部の項目(IPヘッダー)】
項目 説明
Version 上記ではIPv4を示しています。IPv6では6になります。
Header length IPヘッダーの長さをbyteで示しています。
Differentiated Services Field DSCPと記述している部分ではQosで使う優先度が表示されます。上の例ではセットされていません。
Total length パケットの長さをbyteで示しています。
Identification IDを示し、通信が進むにつれて増えて行きます。
Frags パケットを途中でフラグメントして良いかを示します。上の例ではDon't Fragmentになっているため途中でのフラグメントを許可していません。
Fragment offset フラグメント化されたパケットの場合、フラグメント化される前のどの位置なのかを示します。組み立てる時に2番目なのか3番目なのか分かるようになっています。フラグメント化されていない場合は0になります。
Time to live TTLを示します。ルーターを介する度に1引かれ、0になると破棄されます。
Protocol 上位レイヤーのプロトコルを示します。上の例ではTCPを示しています。
Header checksum IPヘッダーのチェックサムです。
Source 送信元IPアドレスです。
Destination 送信先IPアドレスです。

 上記は応用編「パケット」の「パケットヘッダー構造」で示した構造に従って16進数を分かり易い形にして表示したものになります。

 TCPヘッダー部分でWiresharkのアイコン1をクリックすると以下のように表示されます。

Wiresharkを使った解析j

 各項目の意味は以下の通りです。

【パケット詳細部の項目(TCPヘッダー)】
項目 説明
Source port 送信元のポート番号を示しています。
Destination port 送信先のポート番号を示しています。
Sequence number シーケンス番号を示しています。
Acknowledgment number Ack番号を示しています。
Header length TCPヘッダーの長さをbyteで示しています。
Windows size ウィンドウサイズを示しています。スライディングウィンドウで受信出来ない程送られてくるとここを0で応答し、一時的に送ってこないようにしてその間にデータを処理するようにします。
Checksum TCPヘッダーのチェックサムです。
Urgent pointer 受信側で処理を優先する緊急データの位置を示します。緊急データが含まれていない場合は0になります。
TCP segment data データ部分の長さを示し、この値がMSSに当たります。

 上記は応用編「TCP・UDP」の「TCPヘッダーの構造」で示した構造に従って16進数を分かり易い形にして表示したものになりますが、[]で囲まれた部分はWiresharkが独自に追加した情報です。例えば、Nextsequence numberでは次のシーケンス番号が確認出来ます。

トラブル時の解析例

 通信開始の際、以下のようにARPが沢山出力されていて次に進んでいないとします。

Wiresharkを使った解析k

 ゲートウェイに対してARP解決しようとしていますが応答がないため、Macアドレスが分からず通信出来ない状態です。

 ケーブルが接続されていない、リンクアップしていない、VLANが違う、ネゴシエーションが合っていない等レイヤーが低い位置を疑う必要があります。

 次は、以下のようにDNSの部分から次に進んでいない場合の例です。

Wiresharkを使った解析l

 1番目のパケットでDNSのリクエストを送信し、2番目で応答がありますが、Info部分を見て分かる通りNo such nameで名前解決出来ていません。

 存在しないサーバーと通信しようとしているか、DNSの設定が間違っている等が考えられます。

 DNSが原因の場合、このように分かり易い時もありますが、通信の途中でDNSの通信があって遅くなる場合もあります。この場合はTimeの部分を確認して下さい。DNSの通信があって次のパケットが送信されるまで間隔が長い場合、DNSが正常に引けてなくて通信が遅くなっている可能性があります。

 次は以下の場合です。

Wiresharkを使った解析m

 5番目のパケットのパケット詳細部でFlags部分を確認するとDon't Fragmentになっているのが確認出来ると思います。サーバー側でこのままMSSを小さくせずにフラグメント化も許可しない場合は、通信出来ないままタイムアウトになります。

 このようにトラブル発生時の解析では、どこで通信が止まっているかパケット一覧部で確認し、その前後のパケットをパケット詳細部で見てどこに原因があるか推測していきます。止まっていないように見えても再送を繰り返している事もあります。その場合は、シーケンス番号やAck番号を確認する事も必要です。

前のページ「Wiresharkの使い方

サイト関連1

トラブル対応「ポートミラーリング

キーマンズネット1

ネットワーク早わかり講座「第34回 パケットの捕捉・解析 LANアナライザ
  • このエントリーをはてなブックマークに追加