gpt4 book ai didi

sockets - FTP 主动模式和多​​路复用

转载 作者:行者123 更新时间:2023-12-03 12:04:26 26 4
gpt4 key购买 nike

FTP RFC 959指定服务器从端口 20 打开数据连接(默认)到客户端的一个随机端口,服务器通过 PORT h1,h2,h3,h4,p1,p2 知道命令。这称为主动模式传输。
所以主机是h1.h2.h3.h4而端口是p1 * 256 + p2 .
我的问题是:服务器如何通过同一端口初始化与多个客户端的多个连接 20默认情况下?
想象一下客户c1与服务器数据端口 20 建立了连接并且正在传输数据,客户端如何 c2如果数据端口已被 TCP 连接使用,则与服务器建立连接?

最佳答案

实现 Berkeley 套接字的服务器在接受连接时会经历几个阶段。很多管道通常由框架或操作系统处理,我会尝试指出它们。我将尝试在下面用一些伪代码来解释这一点。

1:绑定(bind)监听端口

服务器首先要求内核绑定(bind)到特定端口以开始监听:

void* socket = bind(20);

2:接受连接

这可能是导致一些误解的点。服务器通过绑定(bind)套接字获得连接,但不是使用监听端口 (20) 来处理与新客户端的通信,而是从内核请求一个新的(随机)端口以用于新的套接字连接。这通常由操作系统处理。
void* clientSocket;

// Block until a client connects. When it does,
// use 'clientSocket' (a new socket) to handle the new client.
socket->accept(clientSocket);

// We'll use 'clientSocket' to communicate with the client.
clientSocket.send(someBuffer, ...);

// 'socket' is free again to accept more connections,
// so we can do it again:
void* clientSocket2;
socket->accept(clientSocket2);

// Of course, this is typically done in a loop that processes new connections all the time.

总而言之,发生的事情是监听器套接字 (20) 仅用于接受新连接。客户端建立连接后,会创建一个新套接字来处理该特定连接。

您可以通过在建立连接后检查作为客户端获得的套接字连接来测试这一点。您会看到远程端口不再是 20(它将是远程服务器选择的随机端口)。

所有这些都由 tcp、ftp 和任何使用套接字协议(protocol)的协议(protocol)共享。

关于sockets - FTP 主动模式和多​​路复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com