はじめに
後輩に質問されたのでメモを残しておきます。
TCP Pingとは、TCPの接続確認、つまり TCP 3-way-handshake を使って、ターゲットホストの到達性やポートの応答を確認する手法です。ICMPを使えない環境や、特定のポート番号への直接的な疎通確認を行うときに重宝します。
仕組み
TCP 3-way-handshakeだけで確認するので、アプリケーションデータを投げずに接続確認を終えるのが特徴です。
- クライアントからSYNを送信
- サーバからSYN/ACKが返ってきたら到達確認成功
- ACKを返し、すぐにFINを送って接続を終了
Wireshark 等でパケットキャプチャを取得すると以下のように見えます。(上記といっていることは同じ)
No | 時間 (秒) | 送信元IP | 送信先IP | プロトコル | サイズ | 詳細 |
---|---|---|---|---|---|---|
1 | 0.757173 | 192.0.2.10 | 198.51.100.20 | TCP | 66 | 57290 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM |
2 | 0.765175 | 198.51.100.20 | 192.0.2.10 | TCP | 66 | 443 → 57290 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460 SACK_PERM WS=128 |
3 | 0.765425 | 192.0.2.10 | 198.51.100.20 | TCP | 54 | 57290 → 443 [ACK] Seq=1 Ack=1 Win=131328 Len=0 |
TCPレイヤの確認のみであり、アプリケーション層は確認できないことに注意してください。例えばHTTPが正しく動作するかまでは分かりません。
比較項目 | ICMP Ping | TCP Ping |
---|---|---|
使用プロトコル | ICMP (Echo Request/Reply) | TCP (SYN, SYN/ACK, ACK) |
通信レイヤ | ネットワーク層 (L3) | トランスポート層 (L4) |
確認対象 | ホストの到達性 | 特定ポートの到達性 |
ファイアウォールでの挙動 | ICMPはしばしばブロックされる | TCPはポート次第で許可されることが多い |
アプリケーション確認 | 不可 | 不可(TCP接続確認のみ、アプリ層は別途確認要) |
ICMP Pingはネットワーク層の疎通確認、TCP PingはTCPポート単位での接続確認です。特に、ICMPが制限されている環境や、ポート443のような特定ポートの疎通を確認したい場合にTCP Pingは重宝します。
代表的なツール
TCP Ping を行う際に使うツールをいくつか挙げておきます。
ツール名 | OS | 備考 |
---|---|---|
tcping | Windows / Linux | 定番ツール。ICMPのpingに似た使い方 |
Test-NetConnection | Windows PowerShell | 標準搭載。TCP接続確認に対応 |
nmap -p` | Windows / Linux | ポートスキャンの一部として利用可能 |
おわりに
TCP Ping は俗称なので通じないこともあるかもしれませんが、正式名称があるわけでもないのでTCP Pingで覚えて問題ないと思います。強いて言うなら、TCP 3-Way Handshake Check
くらいが正確な言い方かもしれません。
以上
役に立った方はぜひビール1杯おごってください!
この続きはcodocで購入