Linux FTP服务器如何处理来自同一端口的多个连接?
您好,Linux FTP服务器如何处理来自同一端口的多个连接?,linux,sockets,networking,ftp,port,Linux,Sockets,Networking,Ftp,Port,您好, 如果我正确掌握了FTP协议(RFC959),在带有默认设置的活动模式下,服务器将建立从其端口20到客户端已从连接的ip/端口的数据连接 有人能给我解释一下这是如何与多个客户一起工作的吗?(或者告诉我哪里弄错了) 更具体地说,让我说: 1) 调用socket() 2) bind()将描述符绑定到我的ip/端口20 3) connect()创建数据连接的客户端 同时,在另一个处理不同客户机的线程中,我也尝试这样做 由于明显的原因,bind()调用将失败 我知道您可以将setsockopt()
如果我正确掌握了FTP协议(RFC959),在带有默认设置的活动模式下,服务器将建立从其端口20到客户端已从连接的ip/端口的数据连接 有人能给我解释一下这是如何与多个客户一起工作的吗?(或者告诉我哪里弄错了) 更具体地说,让我说: 1) 调用
socket()
2)
bind()
将描述符绑定到我的ip/端口203)
connect()
创建数据连接的客户端同时,在另一个处理不同客户机的线程中,我也尝试这样做 由于明显的原因,
bind()
调用将失败
我知道您可以将setsockopt()与SO_REUSEADDR一起使用,让套接字绑定到相同的地址/端口,但数据包是否能够正确传递?我完全迷路了
到目前为止,我还没有找到关于这个问题的任何信息,因此非常感谢您的帮助。套接字连接是使用4个参数识别的-源IP、源端口、dest.IP和dest.port。在活动连接的情况下,每个连接的第四个参数(目标端口,客户端计算机上的端口)将不同。当涉及路由器/NAT时,会出现复杂性,在许多情况下,活动模式不起作用 套接字连接使用4个参数标识-源IP、源端口、dest.IP和dest.port。在活动连接的情况下,每个连接的第四个参数(目标端口,客户端计算机上的端口)将不同。当涉及路由器/NAT时,会出现复杂性,在许多情况下,活动模式不起作用 客户端通常不绑定。调用
socket
然后connect
。将为连接分配唯一的本地端口
在服务器上,
socket
、bind
和listen
设置服务器端口accept
返回唯一的客户端连接。客户端通常不绑定。调用socket
然后connect
。将为连接分配唯一的本地端口
在服务器上,
socket
、bind
和listen
设置服务器端口accept
返回唯一的客户端连接。FWIW,SO\u REUSEADDR
的目的不是让服务器在单个TCP端口上获得多个连接。。。这样,TCP服务器可以在连接处于活动状态时快速重启;否则,它将不得不等待内核的连接表超时
有趣的是,UDP套接字可以断言
SO_REUSEADDR
以允许单播和多播应用程序在同一UDP端口上侦听。FWIW,SO_REUSEADDR的目的不是让服务器在单个TCP端口上获得多个连接。。。这样,TCP服务器可以在连接处于活动状态时快速重启;否则,它将不得不等待内核的连接表超时
有趣的是,UDP套接字可以断言
SO\u REUSEADDR
以允许单播和多播应用程序在同一UDP端口上侦听。如您所述,只要在两个套接字上都设置SO\u REUSEADDR
套接字选项,并且它们都没有侦听,那么bind()
不会失败-它们都可以绑定到同一本地地址
由于一个套接字连接到一个对等地址,而另一个套接字连接到另一个对等地址,因此数据包被正确传递。也就是说,当数据包到达源地址和端口以及目标地址时,amd端口用于确定要将其发送到哪个本地套接字(如果有的话)。如您所述,只要您在两个套接字上都设置了
SO\u REUSEADDR
套接字选项,并且它们都没有侦听,那么绑定()
不会失败-它们都可以绑定到同一本地地址
由于一个套接字连接到一个对等地址,而另一个套接字连接到另一个对等地址,因此数据包被正确传递。也就是说,当数据包到达时,使用源地址和端口以及目标地址amd端口来确定要将其发送到哪个本地套接字(如果有)。查看此问题,了解为什么有时需要使用SO\u REUSEADDR:欢迎使用SO。您可以通过编辑来更新自己的问题。你可以为问题投票(向上投票或向下投票),如果你得到了满足你需要的答案并回答了你的问题,你可以将其标记为回答。看看这个问题,找出为什么有时需要使用SO_REUSEADDR:欢迎使用SO。您可以通过编辑来更新自己的问题。你可以为问题投票(向上投票或向下投票),如果你得到了满足你需要的答案并回答了你的问题,你可以将其标记为回答。非常感谢,这就是我遗漏的部分。实际上,这至少是这4个参数。接口也可以构成标识元组的一部分。非常感谢,这就是我缺少的部分。实际上,至少是这4个参数。接口也可以构成标识元组的一部分。虽然这通常是正确的,但在活动模式FTP的特定情况下,服务器确实会调用
bind()
然后connect()
。虽然这通常是正确的,但在活动模式FTP的特定情况下,服务器确实会调用bind()
然后connect()
。