おれさまラボ

実際に手を動かして理解を深めるブログ。

TCP Ping とは

はじめに

後輩に質問されたのでメモを残しておきます。

TCP Pingとは、TCPの接続確認、つまり TCP 3-way-handshake を使って、ターゲットホストの到達性やポートの応答を確認する手法です。ICMPを使えない環境や、特定のポート番号への直接的な疎通確認を行うときに重宝します。

仕組み

TCP 3-way-handshakeだけで確認するので、アプリケーションデータを投げずに接続確認を終えるのが特徴です。

  1. クライアントからSYNを送信
  2. サーバからSYN/ACKが返ってきたら到達確認成功
  3. 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 PingTCPポート単位での接続確認です。特に、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で購入