ネットワーク障害が発生した際、Wiresharkを使っていますが、フィルターをうまく使用することで、原因調査のスピードアップが図れます。想定ケースごとに、フィルターのテンプレ集的にメモっています。
「通信できない」場合
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| ARP確認 | arp | MAC解決できているか |
| ARP要求のみ | arp.opcode == 1 | ARP出しっぱなし=疎通不可 |
| ICMP到達不能 | icmp.type == 3 | 宛先到達不可 |
| TCP SYNのみ | tcp.flags.syn == 1 && tcp.flags.ack == 0 | 接続要求のみで止まっている |
| RST確認 | tcp.flags.reset == 1 | サーバ側拒否 |
| DNSエラー | dns.flags.rcode != 0 | 名前解決失敗 |
「通信が遅い」場合
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| 再送 | tcp.analysis.retransmission | パケットロス確認 |
| 高速再送 | tcp.analysis.fast_retransmission | ロス発生 |
| 重複ACK | tcp.analysis.duplicate_ack | ロス兆候 |
| ゼロウィンドウ | tcp.analysis.zero_window | 受信側処理遅延 |
| DNS遅延 | dns.time > 1 | 名前解決が遅い |
| パケット間隔 | frame.time_delta > 1 | 通信停止時間確認 |
Webが開かない
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| HTTPS通信 | tcp.port == 443 | 通信しているか |
| HTTPエラー | http.response.code >= 400 | エラー確認 |
| 500系 | http.response.code >= 500 | サーバ障害 |
| SNI確認 | tls.handshake.extensions_server_name contains "example.com" | 接続先確認 |
| RST | tcp.flags.reset == 1 | 強制切断 |
DNSトラブル
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| DNS全体 | dns | DNS発生確認 |
| クエリのみ | dns.flags.response == 0 | 問い合わせ |
| 応答なし確認 | dns && dns.flags.response == 0 | クエリのみで止まる |
| NXDOMAIN | dns.flags.rcode == 3 | 存在しない |
| SERVFAIL | dns.flags.rcode == 2 | DNSサーバ異常 |
接続が途中で切れる
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| RST | tcp.flags.reset == 1 | 強制終了 |
| FIN | tcp.flags.fin == 1 | 正常終了 |
| 再送 | tcp.analysis.retransmission | ロスによる切断 |
| TTL超過 | icmp.type == 11 | 経路異常 |
負荷・帯域の問題
| 確認内容 | フィルタ | 目的 |
|---|---|---|
| 大きいパケット | frame.len > 1400 | MTU付近 |
| TCPデータ量 | tcp.len > 1000 | 大量通信 |
| 特定IP帯域確認 | ip.addr == 192.168.1.10 | 端末負荷確認 |
| HTTP大量応答 | http.response.code == 200 | 大量DL確認 |