FTP报文格式
FTP基于C/S架构,客户端和服务器之间会建立两条TCP连接,分别是控制连接和数据连接
控制连接
控制连接上的FTP报文是纯文本的,基于请求-响应模型。客户端发送请求,服务器返回响应
请求格式
1 | |
\r\n用于标识一个FTP请求报文的结束
例如
1 | |
响应格式
1 | |
例如
1 | |
更多关于控制连接报文格式的信息,参考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报文格式/