よく書かれたTCP NATの原則、と話しzhiihiuの1、:の貫通手段原則と開発実戦
stackoverflowの上一篇:どのようにソケットAPIは()関数の作業を受け入れるのですか?
どのように
accept
仕事を?それがどのように実装されていますか?このトピックに関する多くの混乱があります。多くの人々は、新しいポートを開き、あなたはそれを介してクライアントと通信受け入れる主張します。新しいポートが開かれていないとして、しかし、これは明らかに、真実ではありません。あなたは、実際には異なるクライアントと同じポートを介して通信しますが、どのようにできますか?複数のスレッドが呼び出すときにrecv
同じポートで、どのデータがどこに行くために知っているのですか?
ここに答えハイ賞賛は、次のとおりです。
サーバーポート:ソケットはサーバーのIPで識別された思考であなたの混乱の嘘。実際には、ソケットは、一意の情報のカルテットによって識別される場合:
Client IP : Client Port
そしてServer IP : Server Port
サーバーのIPおよびサーバーポートはすべて受け入れた接続で一定である一方、そのため、クライアント側の情報が、それはすべてが起こっている場所を追跡することを可能にするものです。
物事を明確にする例:
私たちは、サーバーで持っていると言う
192.168.1.1:80
と、2台のクライアントを、10.0.0.1
と10.0.0.2
。
10.0.0.1
ローカルポートでの接続が開き1234
、サーバへとコネクトします。今、サーバは次のように同定された1つのソケットがあります。10.0.0.1:1234 - 192.168.1.1:80
今
10.0.0.2
ローカルポートでの接続が開き5678
、サーバへとコネクトします。今、サーバは次のように識別される2つのソケットがあります。10.0.0.1:1234 - 192.168.1.1:80 10.0.0.2:5678 - 192.168.1.1:80
別の答えにZhihu:
リンクします。https://www.zhihu.com/question/270396590/answer/38229019A1:唯一の公共IPネットワークは、インターネットユーザーにアクセスすることができ、サーバのプライベートIPは、インターネットユーザーがアクセスすることはできませんサーバーIP = 10.0.0.1、同社のパブリックIP = 1.1.1.1と仮定し、ポートマッピングは、次の静的に生成されますエントリ:
NATデバイスの目的IP +ポート番号を受信すると1.1.1.1:443パケットが10.0.0.1:443に変換され、変換されたIPパケットはサーバに転送され続けています。