服务器如何处理同一端口上的多个客户端?多个套接字还是多个端口?

服务器如何处理同一端口上的多个客户端?多个套接字还是多个端口?

我对一些网络理论有误解,因为我在网上找不到明确的答案(大多数资源都是理论和理论等,没有简洁的例子),所以我在这里询问。

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 仍然可以接受其他连接?

那么它是哪一个?

如果这个问题听起来很愚蠢或很新奇,我很抱歉,但我发现网上提到了这两种说法,但它们不可能都是正确的。我想其他人也有同样的困惑,这里一个清晰简洁的答案可能会很有帮助。

答案1

套接字由(源 IP、源端口、目标 IP、目标端口)的组合唯一标识,因此您的A场景是正确的。

花一点时间想想如果情况确实如此。如果目标端口不断变化,防火墙几乎不可能实现 - 服务器和网络设备之间需要不断通信,服务器需要通知防火墙它预计在哪里接受流量。出于这个原因和其他许多原因,这将是一场噩梦。

答案2

它比你想象的要容易得多。

服务器正在监听端口 80,它从 20.xx 收到数据包,因此知道 20.xx 需要某些东西,因此执行该操作并将其发送回 20.xx。然后 30.xx 过来并在端口 80 上询问,因此它直接响应 30.xx。

就是这样,没有什么更复杂的。

这有点像你在打电话,听到两个不同的人说话,听到你妻子问你什么时候回来,你回应“亲爱的”,听到你的孩子尖叫着要你带冰淇淋回来,然后说“不,去睡觉”——所有这些都在一行里。说真的,这是我能想到的最好的比喻,对不起 :)

相关内容