FTP 服务器如何处理来自同一端口的多个连接?

1 sockets linux ftp port networking

您好,
如果我正确掌握了 FTP 协议(​​RFC959),在默认设置的主动模式下,服务器会建立从其端口 20 到客户端连接的 ip/端口的数据连接。

有人可以向我解释一下这实际上如何适用于多个客户端吗?(或者告诉我哪里错了)

更具体地说,我可以说:

1)调用socket()
2)bind()我的ip/端口20的描述符
3)connect()客户端建立数据连接
,同时在另一个处理不同客户端的线程中我尝试做同样的事情,bind()由于明显的原因,调用将失败。

我知道您可以使用带有 SO_REUSEADDR 的 setsockopt() 来让套接字绑定到相同的地址/端口,但是数据包是否会正确传送?我很迷失。

到目前为止,我无法找到有关此事的任何信息,因此我们将不胜感激。

Eug*_*its 5

套接字连接使用 4 个参数进行识别 - 源 IP、源端口、dest.IP 和 dest.port。如果是活动连接,则每个连接的第四个参数(目标端口,客户端计算机上的端口)将有所不同。当涉及路由器/NAT 时就会变得复杂,并且在许多情况下主动模式不起作用。