首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FTP活动模式和多路复用

FTP活动模式和多路复用
EN

Stack Overflow用户
提问于 2016-02-16 02:08:23
回答 1查看 665关注 0票数 1

FTP RFC 959指定服务器通过PORT h1,h2,h3,h4,p1,p2命令打开从端口20 (默认)到客户端中随机端口的数据连接。这称为主动模式传输。

因此主机是h1.h2.h3.h4,而端口是p1 * 256 + p2

我的问题是:服务器如何通过相同的端口初始化到多个客户端的多个连接,默认端口是20

假设客户端c1已与服务器数据端口20建立连接,并且正在传输数据,如果数据端口已被c2连接使用,客户端TCP如何与服务器建立连接?

EN

回答 1

Stack Overflow用户

发布于 2016-02-21 20:13:27

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

1:绑定监听端口

服务器首先要求内核绑定到要开始侦听的特定端口:

代码语言:javascript
复制
void* socket = bind(20);

2:接受连接

这可能就是引起一些误解的地方。服务器通过绑定的套接字获得连接,但它不使用侦听端口(20)来处理与新客户端的通信,而是从内核请求一个新的(随机)端口用于新的套接字连接。这通常由操作系统处理。

代码语言:javascript
复制
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和任何使用套接字协议的协议所共享。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35416175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档