TCPの3ウェイハンドシェイクの仕組み
TCPのハンドシェイクは、トランスポート層やネットワークの経路上で行われます。ローカルのソケット、IPによる配送、TCPやUDPの動作、ファイアウォールによるフィルタリング、NATは切り分けて考えましょう。pingが通ってもTCPポートに到達できるとは限りませんし、ポートが開いていてもアプリケーションのプロトコルが正常に動いているとは限りません。
接続が途切れる場所を突き止める方法
近いところから遠いところへ、プロセスとバインドアドレス → ホストのファイアウォール → ルート → NAT/ポートフォワーディング → CGNATやISPによるフィルタリング → 外部からのテスト、の順に確認していきます。パケットサイズが原因の障害については、MTUと経路MTU探索(Path MTU Discovery)を別に検討してください。ポート番号は、必ずトランスポートプロトコルとセットで解釈します。
SYN、SYN-ACK、ACKの流れ
SYNに続いてSYN-ACKが返ってくれば、単にIPで到達できるという以上のことがわかります。そしてACKで接続の確立が完了します。RSTと再送タイムアウトはそれぞれ異なる障害パターンを示しており、ステートフルファイアウォールは想定される接続状態に属さないパケットを拒否することがあります。外部からハンドシェイクが成立するかどうかは、2IPのポート開放確認で試せます。