笔者最近几天被FTP折腾了一下,简单的路由器ACL就是无法通过被动模式的FTP流量。经数次实验和度娘、谷哥指导,终于对FTP模式有了深入理解。先感叹一句,以前学艺不精,书到用时方恨少!
不必要对FTP协议深究,但是看看上面的RFC文档,对于网工来说,不无裨益。
FTP的目标是:促进程序/数据文件的共享;鼓励(通过程序)使用远程计算机;使用户不必面对不同主机上不同文件系统的差异;对数据进行高效可靠的传输。FTP使用C/S结构,服务器通过TCP21端口建立控制连接,一般情况下通过TCP20端口建立数据连接。
为什么上面说是一般情况,这就引出了FTP的两种模式:主动模式(PORT)和被动模式(PASV)。FTP服务器在主动模式时,会使用21、20两个端口,在被动模式时仍使用21端口做控制连接,使用大于1024的端口做数据连接。请看官仔细着,这里的被动和主动是对于服务器来说的。
主动模式过程:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口)。紧接着客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。最后服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1),这样客户端就可以和ftp服务器建立数据传输通道了。ftp port模式工作流程如下图所示:
针对FTP服务