2016-11-28 22 views
0

このようにしてTCPホールパンチが動作しないのはなぜですか? NATテーブルの理解マイ

  1. NATテーブルだけにマッピングされ(プライベートIP:ポート) - >(公衆IP:ポート)それは、プロトコルまたはソケット接続を気にしません

このようにして、ローカルポートを再利用してTCPホールパンチを行うことができたと思いました。 NATの背後にある

  1. ホスト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 
    
  2. そのペアにマッピング( - > 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 
    
  3. その後、私は、任意のクライアントがすでにマップされたペアを使用して(サーバーから121.0.0.1:200を取得)ホストに接続することができると思いましたNATテーブルでは、宛先IPとポートは発信元IPとポートのみを考慮しているためです。

しかし、これは動作しません!私は他の複雑な実装を見つけましたが、私はこのように問題が何か不思議です。

+0

だまされやすい人に「翻訳の方法」の部分をお読みください。http://stackoverflow.com/questions/26694286/how-do-i-do-tcp-hole-punching – selbie

答えて

関連する問題