目录
- 协议基础
- 对比
- 使用踩坑
协议基础
File Transport Protocal
使用FTP协议实际上是去访问远端服务器的文件系统,使用TCP的20, 21端口建立连接。
- FTP基于TCP/IP 协议,面向连接,属于应用层协议。
- FTP需要两个端口的原因是,需要建立控制链路&数据链路。
- 21端口是控制端口,20是数据端口,但是20端口可能用不到,涉及主动/被动模式。
建立控制链路后,该链路一直保持,而数据链路是不保持的。
服务器需要记录连接者的状态(体现在控制链的响应码上)
命令跟响应码
https://blog.csdn.net/bear_huangzhen/article/details/41806903
支持的文件类型:
- 1.ASCII码文件类型(默认选择),以NVT ASCII码形式通过数据连接传输;
- 2.EBCDIC文件类型。该文本文件传输方式要求两端都是EBCDIC系统;
- 3.图像文件类型(也成为二进制文件类型),数据发送形式呈现为一个连续的比特流。
支持的数据结构:
- 1.文件结构(File Structure)字节流,无结构;
- 2.记录结构(Record Structure)文件被划分为记录,用于文本文件;
- 3.页结构(Page Structure)文件被划分为页,每页有页号和页头。可以进行随机存取或顺序存取。
支持的传输方式:
- 1.流模式:数据以字节流的形式传送
- 2.块模式:文件以块的形式传送,块带有自己的头部分。头字节包括16位计数域和8位描述子代码
- 3.压缩模式:压缩模式中,因为数据是压缩过的,对于增加带宽有很多好处。
FTP的建立连接,是需要账户&密码的,但是也支持匿名连接,
原理是远程计算机建立了名为anonymous的用户特殊ID,任何人在任何地方都可使用该用户ID,下载文件,而无需成为其注册用户。
匿名FTP主机的连接使用方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,其口令可以是客户端自己喜欢的任意字符串。
FTP连接的特点就是,分两种模式
一种是主动模式
- client 开启 N端口跟N+1端口(并不一定真的是相邻的两个端口,只是接近)
- N端口与 server的 21端口建立控制连接,告诉server,N+1端口是我的数据端口
- 控制链路建立成功,server 的20端口 去连接client 的N+1端口
- 但是 client存在防火墙,很可能server主动来建立数据链路的方式,会被client挡住
另一种被动模式
- client 开启 N端口跟N+1端口(并不一定真的是相邻的两个端口,只是接近)
- N端口与 server的 21端口建立控制连接
- 控制链路建立,server开一个数据端口P(随机不冲突的端口),通过PORT指令告诉client
- client用N+1端口与P建立数据连接
- 这种就是 server建立的数据连接
与Http对比
相同点
- 1.都是面向连接
- 2.都基于TCP/IP 协议
- 3.都属于应用层协议
不同点
FTP | HTTP | |
---|---|---|
连接 | 两路连接,一路控制,一路数据 | 一路连接 |
端口 | 21+20 | 80 |
身份验证 | 需要 | 不需要 |
数据流向 | 双向 | 单向 |
状态 | 记录状态 | 无状态 |
链接持久性 | 控制链持久链接,数据链非持久链接 | 默认持久(长链接) |
使用踩坑
ftp Connection reset
经常出现这种socket reset的问题,但是没找到根源
网友评论