首页 > 技术知识 > 正文

在搭建ftp服务器之前,我们需要先了解一下,ftp具体是个什么。

ftp协议 与一般的C/S应用(客户端/服务器应用)不同在于FTP不在一个Socket连接里同时处理服务器端和客户端的连接命令和数据传输,而FTP协议中将命令与数据分开传送的方法提高了效率。

它有两个端口: 控制端口:控制 Socket 用来传送命令。 数据端口:数据 Socket 是用于传送数据。

两个可选择模式: 主动模式 (PORT) 主动模式下,客户端随机打开一个大于 1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出 “port N+1” 命令,由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口 (N+1)。 FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。

被动模式 (PASV) 为了解决服务器发起到客户的连接问题,有了另一种 FTP 连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。 被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024 和 N+1) 。 第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。

详细的解释百度会有,我们目前就先知道这么多开始上手。

第一步先搭建一个FTP服务器在linux上,本机地址就是服务器的地址。

之后将有两个重要函数

int send( SOCKET s, const char FAR *buf, int len, int flags );

不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。

int recv( SOCKET s, char FAR *buf, int len, int flags);

不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。该函数的第一个参数指定接收端套接字描述符;

这两个函数在后期实现ftp的数据传输中很是重要的。

熟悉了以上部分后就可以使用命令 sudo service vsftpd start 来启动FTP服务器

之后就该去寻找一个例程,开始ftp的学习了!

猜你喜欢