一、FTP简介:
FTP是基于TCP应用层的网络文件传输协议,支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。采用明文通信不加密。
1、Port模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
2、Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
PS:很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
二、CH9121做FTP客户端访问服务器
1、Port模式
将CH9121的端口1配置为TCP CLIENT模式,CH9121的端口可以随机也可以固定,目的IP为FTP服务器的IP地址,目的端口号为FTP服务器的端口号默认为21。
将CH9121的端口2配置为TCP SERVER模式,CH9121的端口设置后需要记一下后边会用到,目的端口号为FTP服务器的端口号默认为20。
配置好CH9121连接FTP服务器即可通过端口1的串口获取FTP服务器的如下信息,220表示FTP服务器已经就绪。
端口1的串口收到220后即可发送USER与PASS用以登录FTP服务器,
◇USER anonymous
◆331 User name ok, need password
◇PASS 123456
◆230 User logged in
当服务器回复230即表示CH9121登录FTP服务器成功,随后可通过建立数据通道的连接实现数据传输,注意PORT为主动模式CH9121主动告诉FTP服务器自己开放的数据传输IP与端口,(192,168,100,200)为IP,(11,184)为端口计算方法为11*256+184=3000,也就是CH9121端口2配置的本地端口号。
通过CH9121的端口1的串口发送PORT命令,
◇PORT 192,168,100,200,11,184
◆200 PORT command successful.
当服务器回复200即表示服务器收到了CH9121提供的IP与端口号,当要传输数据时FTP服务器会通过20端口与之建立连接实现数据收发。
比如通过CH9121端口1的串口发送LIST命令获取FTP服务器的根目录
◇LIST
◆150 File status OK ; about to open data connection
当服务器返回150后,服务器会通过20端口主动与CH9121的端口2建立连接并发送根目录信息。
◆drwxrwxrwx 1 owner group 0 Feb 21 19:46 .
dr-xr-xr-x 1 owner group 0 Oct 10 17:38 ..
-rwxrwxrwx 1 owner group 196939 Feb 04 10:01 CH9120 TFTP使用详解.pdf
-rwxrwxrwx 1 owner group 153 Dec 12 16:22 README
-rwxrwxrwx 1 owner group 47 Feb 03 17:04 test.c
需要注意的是每次数据命令执行完毕,服务器的数据端口都会自动关闭,下次通信需要CH9121重新发送PORT提供数据端口的信息。
2、Passive模式
CH9121被动模式目前仅适用于数据端口固定的FTP服务器,与主动的区别是CH9121的端口2需要配置为TCP客户端模式,目的端口为FTP服务器的端口,端口号可以通过CH9121端口1发送PASV获取。
◇PASV
◆227 Entering passive mode (192,168,100,111,61,111)
当FTP服务器回复227 表示FTP服务器处于被动模式且开放的数据通信端口信息为(192,168,100,111,61,111)其中(192,168,100,111)为服务器的IP,(61,111)为端口,可通过61*256+111=15727获取端口号为15727,将CH9121的端口2目的端口号设为15727即可,随后再次登录FTP服务器,发送PASV使得服务器进入被动模式,CH9121的端口2就可以与服务器的数据端口建立连接,之后的增删改查操作与主动模式相同。
需要注意的是使用CH9121被动模式与FTP服务器通信一定要先把服务器的数据端口固定不然无法与之建立数据通信,如果采用CH392、CH395或其他芯片则不需要指定服务器的数据端口号,只需要通过PASV获取服务器端口信息后创建相应的socket即可。