TCP通信ができないとき、
ほとんどの原因は3way handshakeのどこかで止まっています。
しかし現場では、
- 「FWは開いているはず」
- 「pingは通る」
- 「ポートはLISTENしている」
という状態で原因特定に時間がかかります。
本記事では、
- 3way handshakeの各段階の意味
- 止まる位置別の原因一覧
- tcpdumpによる正しい確認方法
- 確定診断のポイント
- 解決したと言える基準
を、実務レベルで解説します。
目次
まず整理:3way handshakeとは
1. Client → Server : SYN
2. Server → Client : SYN-ACK
3. Client → Server : ACK
この3段階が完了して初めてTCP接続は確立します。
止まる位置が分かれば、原因はほぼ特定できます。
診断の基本:tcpdumpで必ず両方向を見る
tcpdump -nn host 相手IP and port ポート番号
見るべきは:
- SYNが来ているか
- SYN-ACKが出ているか
- ACKが戻っているか
パターン①:SYNが届かない
症状
- サーバ側でSYNが見えない
- クライアントは再送を繰り返す
原因
- 中間FWでTCPのみ遮断
- ACL誤設定
- ルーティング誤り
- 宛先ポートのNAT不備
確認方法
- FWログ確認
- 経路上の中間機器でtcpdump
解決条件
サーバ側でSYNが確認できること。
パターン②:SYNは来るがSYN-ACKが出ない
症状
- tcpdumpでSYNのみ確認
- SYN-ACKが返らない
原因
- ポート未LISTEN
- iptables/firewalld拒否
- tcp_wrappers制御
- backlog枯渇(acceptキュー溢れ)
確認コマンド
ss -lnt
iptables -L -n
ss -s
解決条件
SYN-ACKが確実に出力されること。
パターン③:SYN-ACKは出るがACKが戻らない
症状
- サーバでSYN-ACK確認
- ACKが来ない
- SYN-RECVが溜まる
原因
- 戻り経路不一致(非対称ルーティング)
- NATセッション未作成
- クライアント側FW拒否
- rp_filterで破棄
確認方法
netstat -nat | grep SYN_RECV
sysctl net.ipv4.conf.all.rp_filter
解決条件
ACKがサーバ側で確認できること。
パターン④:接続確立後すぐ切れる
症状
- ESTABLISHEDになる
- 直後にRST/FIN
原因
- MTU不一致
- MSS未調整
- アプリ側エラー
- WAF/IPSによる遮断
確認
ping -M do -s 1472 相手IP
解決条件
データが継続的に送受信できること。
3way handshake停止の即断フローチャート
- SYNが見える? → NO → FW/経路問題
- SYN-ACK出ている? → NO → サーバ設定問題
- ACK戻る? → NO → 戻り経路/NAT問題
- ESTABLISHED維持? → NO → MTU/アプリ問題
この順で必ず原因に到達します。
再送(retransmission)が多い場合
tcpdumpで以下が見えた場合:
[TCP Retransmission]
これは、
- 相手が応答していない
- 途中で破棄されている
ことを意味します。
再送は「ネットワークが悪い」のではなく、
どこかで止まっている証拠
です。
解決したと言える状態
- 3way handshakeが毎回成功する
- SYN-RECVが溜まらない
- 再送が発生しない
- ESTABLISHEDが安定する
まとめ
3way handshakeで止まる原因は、
止まる位置で決まります。
- SYN届かない → 経路/FW
- SYN-ACK出ない → サーバ設定
- ACK戻らない → 非対称/NAT
- 確立後切断 → MTU/アプリ
tcpdumpで段階を可視化すれば、必ず解決できます。
あわせて読みたい


pingは通るのにTCP通信できない理由【原因の見抜き方と完全切り分け手順】
pingは成功する。 しかしSSHもHTTPも接続できない。 この状態は、 「ネットワークは正常」とは言えません。 pingはICMP(制御用プロトコル)、 TCPはセッション型通信で…
あわせて読みたい


LinuxでSYN-RECVが溜まり続ける原因と対処法
Linuxサーバーの通信トラブル調査中、以下のような状態に遭遇したことはないでしょうか。 ss や netstat で SYN-RECV が大量に表示される 時間が経っても減らない クラ…
あわせて読みたい


Send-Q / Recv-Q が増え続ける時の見方
Linuxで通信トラブルを調査していると、次のような状況に遭遇することがあります。 ss で ESTABLISHED になっている Send-Q / Recv-Q の数値が増え続けている 通信が遅…
あわせて読みたい


TCP再送・ウィンドウサイズ異常から読み解く通信遅延の原因
「回線は空いているはずなのに通信が遅い」「特定アプリだけレスポンスが悪い」 このような事象の多くは、TCP再送や ウィンドウサイズ異常によって発生しています。 本…
