FTP 网络协议学习

目录

  • 协议基础
  • 对比
  • 使用踩坑

协议基础

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端口\color{red}{主动的} 去连接client 的N+1端口
  • 但是 client存在防火墙,很可能server主动来建立数据链路的方式,会被client挡住

另一种被动模式

  • client 开启 N端口跟N+1端口(并不一定真的是相邻的两个端口,只是接近)
  • N端口与 server的 21端口建立控制连接
  • 控制链路建立,server开一个数据端口P(随机不冲突的端口),通过PORT指令告诉client
  • client用N+1端口与P建立数据连接
  • 这种就是 server\color{red}{被动的}建立的数据连接

与Http对比

相同点

  • 1.都是面向连接
  • 2.都基于TCP/IP 协议
  • 3.都属于应用层协议

不同点

FTP HTTP
连接 两路连接,一路控制,一路数据 一路连接
端口 21+20 80
身份验证 需要 不需要
数据流向 双向 单向
状态 记录状态 无状态
链接持久性 控制链持久链接,数据链非持久链接 默认持久(长链接)

使用踩坑

ftp Connection reset

经常出现这种socket reset的问题,但是没找到根源

https://stambia.org/kb/16-execution-issues/235-error-java-net-socketexception-connection-reset-when-executing-an-ftp-action

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。