私はいくつかのネットワーク理論について誤解を持っています、そして私がオンラインで決定的な答えを見つけることができなかったので(ほとんどのリソースは簡潔な例なしで理論と理論などです)私はここで尋ねています。
ポート80でリッスンするIP 10.10.10.10
を備えたサーバーと、それぞれIP 20.20.20.20
およびIP 30.30.30.30
を備えた2つのクライアントがあるとすると、両方のクライアントがポート80でサーバーに接続するとどうなりますか?
それは...
A。サーバーは両方のクライアントのポート80で接続を受け入れ、2つのソケットを作成します。
server IP: 10.10.10.10
server port: 80
client IP: 20.20.20.20
client port: whatever port client 1 used to connect
そして
server IP: 10.10.10.10
server port: 80
client IP: 30.30.30.30
client port: whatever port client 2 used to connect
次に、新しいパケットがクライアントからポート80に到着すると、クライアントのIPとポートに基づいて適切なソケットにディスパッチされますか?
または...
B。サーバーはポート80での接続のみを受け入れ、クライアントが接続するときにクライアントとの通信用に他のポートを割り当てますか?これで、2つのソケットが作成されましたが、次のようになります。
server IP: 10.10.10.10
server port: random free port
client IP: 20.20.20.20
client port: whatever port client 1 used to connect
そして
server IP: 10.10.10.10
server port: another random free port
client IP: 30.30.30.30
client port: whatever port client 2 used to connect
ポート80は他の接続を受け入れるために無料のままですか?
それで、それはどれですか?
質問がばかげているか、または新しさのように聞こえる場合は申し訳ありませんが、両方がオンラインで言及されていることがわかりました。他の人も同じ混乱を抱えていると思います。ここでの明確で簡潔な答えは非常に役立つかもしれません。
ソケットは(送信元IP、送信元ポート、宛先IP、宛先ポート)の組み合わせによって一意に識別されるため、[〜#〜] a [〜#〜]シナリオは正しいです。
[〜#〜] b [〜#〜]の場合は、少し時間を取って、その影響について考えてください。宛先ポートが絶えず変化している場合、ファイアウォールはほぼ不可能です。サーバーとネットワークギアの間で絶え間ない通信が必要であり、サーバーはトラフィックを受け入れる予定の場所をファイアウォールに通知します。この理由や他の多くの理由から、それは悪夢でしょう。
それはSOあなたが思っているよりずっと簡単です。
サーバーは、たとえばポート80でリッスンしており、20.xxからパケットを受信するため、20.xxが何かを要求していることを知っているので、20.xxに送信して送信します。次に30.xxが来てポート80で要求するので、30.xxに直接応答します。
それだけです。これほど複雑なことはありません。
これは、電話をかけていて、2人の異なる人が話しているのが聞こえ、妻が何時に戻ってきたのかを聞いたり、「5人の親愛なる人」と応答したり、子供があなたに向かって叫んだりするのを聞くことができます。アイスクリームを持ち帰り、「いいえ、寝なさい」と言う-すべて一行で。真剣にそれは私が申し訳ありませんと思うことができる最高のアナロジーについてです:)