Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux FTP服务器如何处理来自同一端口的多个连接?_Linux_Sockets_Networking_Ftp_Port - Fatal编程技术网

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/端口20
3)
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()