文件传输协议
主机之间传输文件是IP网络的一个重要功能,如今人们可以方便地使用网页、邮箱进行文件传输。
然而在互联网早期,Web(World Wide Web,万维网)还未出现,操作系统使用命令行的时代,用户使用命令行工具进行文件传输。其中最通用的方式就是使用FTP(File Transfer Protocol,文件传输协议)以及TFTP(Trivial File Transfer Protocol,简单文件传输协议)。
FTP基本概念
FTP采用典型的C/S架构(即服务器端与客户端模型),客户端与服务器端建立TCP连接之后即可实现文件的上传、下载。
针对传输的文件类型不同,FTP可以采用不同的传输模式:
- ASCII模式:传输文本文件(TXT、LOG、CFG )时会对文本内容进行编码方式转换,提高传输效率。当传输网络设备的配置文件、日志文件时推荐使用该模式。
- Binary(二进制)模式:非文本文件(cc、BIN、EXE、PNG),如图片、可执行程序等,以二进制直接传输原始文件内容。当传输网络设备的版本文件时推荐使用该模式。
FTP传输数据时支持两种传输模式:ASCII模式和Binary模式。
ASCII模式用于传输文本文件。发送端的字符在发送前被转换成ASCII码格式之后进行传输,接收端收到之后再将其转换成字符。二进制模式常用于发送图片文件和程序文件,发送端在发送这些文件时无需转换格式即可传输。
cc:VRP版本文件。
FTP传输过程 - 主动模式
主动模式工作原理如下:
客户端随机生成源端口N(一般大于1024)访问FTP服务器的21端口,完成TCP的3次握手,客户端向服务器发送PORT消息并携带(X,X,X,X,p1,p2),其中x,x,x,x为客户端IP地址,P1,P2是客户端产生的2个随机正整数。
当需要传输数据时,FTP服务器端从端口20向FTP客户端的端口P发送连接请求,(P=p1*256+p2),完成数据通道TCP的3次握手,建立数据通道。
FTP传输过程 - 被动模式
客户端随机生成源端口N访问FTP服务器的21端口,完成TCP的3次握手后,客户端给服务器端发送PASV消息,告知服务器处于被动模式,服务器回应Entering Passive Mode消息并携带(X,X,X,X,p1,p2).其中X,X,X,X为服务器自身的IP地址,P1,P2为服务器产生的2个随机正整数。当需要传输数据时,客户端使用N+1做为源端口,访问服务器的p1*256+p2端口,完成数据通道的TCP的3次握手,建立数据通道。该模式下,2个通道均由客户机发起。
主动模式和被动模式建立数据连接方式完全不同,在实际使用中各有利弊:
- 使用主动模式传输数据时,如果FTP客户端在私有网络中并且FTP客户端和FTP服务器端之间存在NAT设备,那么FTP服务器端收到的PORT报文中携带的端口号、IP地址并不是FTP客户端经过NAT转换之后的地址、端口号,因此服务器端无法向PORT报文中携带的私网地址发起TCP连接(此时,客户端的私网地址在公有网络中路由不可达)。
- 使用被动模式传输数据时,FTP客户端主动向服务器端的一个开放端口发起连接,如果FTP服务器端在防火墙内部区域中,并且没有放通客户端所在区域到服务器端所在区域的主动访问,那么这个连接将无法建立成功,从而导致FTP无法正常传输。
TFTP基础
相较于FTP,TFTP的设计就是以传输小文件为目标,协议实现就简单很多:
- 使用UDP进行传输(端口号69)
- 无需认证
- 只能直接向服务器端请求某个文件或者上传某个文件,无法查看服务器端的文件目录。
上传文件只要客户端收到服务端确认,便上传文件,下载文件时,客户端收到服务器确认,发出确认报文,服务器收到确认报文后,才开始下发文件。
TFTP存在5种报文格式:
- RRQ:读请求包。
- WRQ:写请求包。
- DATA:数据传输报文。
- ACK:应答包,用于确认收到对端的报文。
- ERROR:差错控制报文。