FTP报文格式

FTP基于C/S架构,客户端和服务器之间会建立两条TCP连接,分别是控制连接和数据连接

控制连接

控制连接上的FTP报文是纯文本的,基于请求-响应模型。客户端发送请求,服务器返回响应

请求格式

1
<命令> <参数>\r\n

\r\n用于标识一个FTP请求报文的结束

例如

1
2
3
4
5
6
7
USER xxx\r\n:发送用户名
PASS xxx\r\n:发送密码
LIST\r\n:列出当前目录下的文件和目录
PASV\r\n:切换到被动模式
TYPE I\r\n:切换到binary模式
PORT 192,168,163,103,143,127\r\n:客户端给出主动模式下的数据连接监听端口
PASV\r\n:通知服务器本次数据连接采用被动模式

响应格式

1
<响应码> <说明文字>\r\n

例如

1
2
3
331 Please specify the password.\r\n
230 Login successful.\r\n
227 Entering Passive Mode (192,168,163,105,208,45).\r\n:服务器给出被动模式下的监听端口

更多关于控制连接报文格式的信息,参考RFC文档

https://datatracker.ietf.org/doc/html/rfc959

数据连接

数据连接直接传输文件的字节流,没有报文格式

binary/ascii模式

但数据连接有两个模式,binary和ascii模式

数据连接的主被动模式是针对数据连接的建立方式而言,这里不阐述,可以参考我的另一篇文章 FTP主被动模式与抓包分析

binary模式直接传输文件的字节流,不做任何处理

ascii模式用于处理不同操作系统的换行符的差异,举个例子

假设是客户端处于windows下,服务器处于linux下。客户端下载文件,服务器会将发出的字节流中的\n转换为\r\n。客户端上传文件,服务器会将收到的字节流中\r\n转换为\n。也就是说,其实换行符的转换都是服务器在操作

如何切换模式

在FTP客户端上输入ascii或binary即可,客户端会记住你选择的模式。如果你不指定模式,一般FTP客户端默认都是binary模式

客户端在每次要上传或下载文件时,都会在控制连接上自动在控制连接上发出请求TYPE I(binary模式)或TYPE A(ascii模式)通知服务器本次数据连接的模式


FTP报文格式
https://www.pasiphae.top/2023/10/30/FTP报文格式/
作者
pasiphae
发布于
2023年10月30日
许可协议