1. 简介
项目中有一个在stm32中移植ftp的功能,在网上找到了一个开源的 lwip_ftpd_master 的代码,文件系统是fatfs。
ftp使用的是tcp协议,通过21端口建立连接,客户端通过这个端口发送命令给服务器,服务器根据发送来的命令进行相应的操作。
ftp涉及到两种模式,一种是主动模式(PORT命令)、一种是被动模式(PASV命令)。
2. 具体(passive模式)
1. 当有客户端连接ftp服务器时,会先建立21端口上的命令的连接,出现3次握手,标识建立了稳定的连接(10.0.0.2 是ftp服务器,10.0.0.1是客户端):
2. 紧接着服务器发送给客户端 “220 lwIP FTP Server ready.” 通知客户端,连接稳定,客户端接收到通知信息后,发送一个ACK。
3. 到此阶段,客户端开始发送请求的命令给服务器,服务器接收到命令后进行正常的响应。
4. 通过PASV指令,服务器会发送回ip地址和端口号 (10,0,0,2,117,48)ip地址是10.0.0.2,端口号是117,48两个的组合, 117转换成十六进制75,48转换成十六进制30,然后端口是7530(hex)–>30000
5. 当命令连接上时就会建立传输数据的tcp的连接,当LIST命令发送给服务器后,服务器会建立传输数据用的tcp连接, 3次握手
其中上图的第三条是对LIST命令的ACK,端口号是21
建立连接后,服务器便开始发送数据给客户端。