1. FTP基本概念
FTP采用典型的C/S架构(即服务器端与客户端模型),端口号为20/21,客户端与服务器端建立TCP连接之后即可实现文件的上传、下载。20端口用来传输数据流,21端口用来传输控制流。
2. FTP传输文件的模式
针对传输的文件类型不同,FTP可以采用不同的传输模式:
ASCII模式:传输文本文件(TXT、LOG、CFG )时会对文本内容进行编码方式转换,提高传输效率。当传输网络设备的配置文件、日志文件时推荐使用该模式。
Binary(二进制)模式:非文本文件(cc、BIN、EXE、PNG),如图片、可执行程序等,以二进制直接传输原始文件内容。当传输网络设备的版本文件时推荐使用该模式。
3. FTP传输过程——主动模式
使用主动模式时,FTP客户端使用一个随机端口(一般大于1024)向FTP服务器端的端口21发送连接请求;FTP服务器端接受请求,建立一条控制连接来传输控制消息。同时FTP客户端开始监听另一随机端口P(一般大于1024),并使用PORT命令通知FTP服务器端。当需要传输数据时,FTP服务器端从端口20向FTP客户端的端口P发送连接请求,建立一条传输连接来传输数据。
4. FTP传输过程——被动模式
当使用被动模式时,FTP客户端使用一个随机端口(一般大于1024)向FTP服务器端的端口21发送连接请求,FTP服务器端接受请求,建立一条控制连接来传输控制消息。同时FTP客户端开始监听另一随机端口P(一般大于1024),并使用PASV命令通知FTP服务器端,FTP服务器端接到PASV 命令后,开启一个随机端口N(一般大于1024),并使用Enter PASV命令告知客户端自身开放端口号。当需要传输数据时,FTP客户端从端口P向FTP服务器端N端口发送连接请求,建立一条传输连接来传输数据。
主动模式和被动模式的区别
使用主动模式传输数据时,如果FTP客户端在私有网络中并且FTP客户端和FTP服务器端之间存在NAT设备,那么FTP服务器端收到的PORT报文中携带的端口号、IP地址并不是FTP客户端经过NAT转换之后的地址、端口号,因此服务器端无法向PORT报文中携带的私网地址发起TCP连接(此时,客户端的私网地址在公有网络中路由不可达)。
使用被动模式传输数据时,FTP客户端主动向服务器端的一个开放端口发起连接,如果FTP服务器端在防火墙内部区域中,并且没有放通客户端所在区域到服务器端所在区域的主动访问,那么这个连接将无法建立成功,从而导致FTP无法正常传输。
5. TFTP基础
相较于FTP,TFTP的设计就是以传输小文件为目标,协议实现就简单很多: 使用UDP进行传输(端口号69) 无需认证 只能直接向服务器端请求某个文件或者上传某个文件,无法查看服务器端的文件目录。
6. TFTP输出示例
TFTP存在5种报文格式: RRQ:读请求包。 WRQ:写请求包。 DATA:数据传输报文。 ACK:应答包,用于确认收到对端的报文。 ERROR:差错控制报文。
7. liunx系统TFTP搭建
-
安装TFTP服务端和客户端
sudo apt-get install tftpd-hpa tftp-hpa
-
创建TFTP目录并添加权限
mkdir /home/tftp/tftpboot
chmod 777 tftpboot
-
修改配置文件
vi /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/tftp/tftpboot" //我们创建的目录
TFTP_ADDRESS="0.0.0.0:69" //ip和端口号要为0.0.0.0
TFTP_OPTIONS="-c -l -s" //TFTP启动参数
-l:以standalone/listen模式启动TFTP服务,而不是从xinetd启动。
-c:可创建新文件。默认情况下,TFTP只允许覆盖原有文件,不能创建新文件。
-s:改变TFTP启动的根目录。不用手动指定目录,默认使用配置文件中的目录。
-
重启TFTP服务器
service tftpd-hpa restart
-
在创建的目录下新建文件并编辑内容
touch test.txt
-
客户端获取TFTP服务器文件
tftp IP地址 get 文件名 //下载
q //退出
8. 错误解决
- 如果TFTP的下载不成功,运行下面的命令卸载软件,然后再重新安装,最后再重启TFTP服务器。
sudo apt-get remove --purge tftpd-hpa tftp-hpa
sudo apt-get install tftpd-hpa tftp-hpa
sudo service tftpd-hpa restart