0
がこのようにしてTCPホールパンチが動作しないのはなぜですか? NATテーブルの理解マイ
- NATテーブルだけにマッピングされ(プライベートIP:ポート) - >(公衆IP:ポート)それは、プロトコルまたはソケット接続を気にしません
このようにして、ローカルポートを再利用してTCPホールパンチを行うことができたと思いました。 NATの背後にある
ホストAがサーバSに接続し、ホストAのNATは、ホストAは同じローカルポート(100)
に新しいリスニングソケットを開き、そのソケットを閉じ、Host A(192.0.0.1:100) -> NAT -> Server (192.0.0.1:100 -> 121.0.0.1:200) MAPPED
そのペアにマッピング( - > 121.0.0.1:200 192.0.0.1:100)
Host A(listening 192.0.0.1:100) -> NAT -> Server (192.0.0.1:100 -> 121.0.0.1:200) MAPPED
- その後、私は、任意のクライアントがすでにマップされたペアを使用して(サーバーから121.0.0.1:200を取得)ホストに接続することができると思いましたNATテーブルでは、宛先IPとポートは発信元IPとポートのみを考慮しているためです。
しかし、これは動作しません!私は他の複雑な実装を見つけましたが、私はこのように問題が何か不思議です。
だまされやすい人に「翻訳の方法」の部分をお読みください。http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie