Networking

伺服器如何處理同一埠上的多個客戶端?多個套接字或多個埠?

  • June 10, 2013

我對一些網路理論有誤解,因為我在網上找不到明確的答案(大多數資源都是理論和理論等,沒有簡明的例子)我在這裡問。

假設我有一台伺服器,IP 10.10.10.10它在埠 80 上偵聽,兩個客戶端分別使用IP 20.20.20.20IP 30.30.30.30分別連接,當兩個客戶端都連接到埠 80 上的伺服器時,會發生什麼?

可以…

**A.**伺服器在埠 80 上為兩個客戶端接受連接並創建兩個套接字:

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 埠上的連接,並在客戶端連接時分配其他埠與客戶端通信?所以現在我們仍然創建了兩個套接字,但是像這樣:

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是這種情況,請花點時間思考一下後果。如果目標埠不斷變化,防火牆幾乎是不可能的——伺服器和網路設備之間需要不斷的通信,伺服器會通知防火牆它期望在哪裡接受流量。由於這個原因和許多其他原因,那將是一場噩夢。

引用自:https://serverfault.com/questions/514704