Networking
伺服器如何處理同一埠上的多個客戶端?多個套接字或多個埠?
我對一些網路理論有誤解,因為我在網上找不到明確的答案(大多數資源都是理論和理論等,沒有簡明的例子)我在這裡問。
假設我有一台伺服器,
IP 10.10.10.10
它在埠 80 上偵聽,兩個客戶端分別使用IP 20.20.20.20
並IP 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是這種情況,請花點時間思考一下後果。如果目標埠不斷變化,防火牆幾乎是不可能的——伺服器和網路設備之間需要不斷的通信,伺服器會通知防火牆它期望在哪裡接受流量。由於這個原因和許多其他原因,那將是一場噩夢。