常见的文件传输协议—— FTP

这里只讨论一下我们编码过程中需要注意的部分。

FTP连接上限

FTP是有连接上限的,开发过程中需要注意到这一点,高并发情况下要考虑复用连接。

比如说:我们前端界面上有很多的 img,我们后台没做任何处理,直接获取一个连接,将 FTP 服务器上的图片资源传输给前端,在未使用连接池的情况下,达到连接达到上限之后,就会出现部分用户查看不到图片的情况。

4种文件类型

一、ASCII
也就是文本为字符形式,以换行符为例,在Unix下是/n,Windows下是/r/n,Mac下是/r,ASCII模式下,文件会被处理成当前系统兼容的数据格式,数据内容挥发生一定的变化。

二、EBCDIC
这类文件也是字符形式,只不过字符来自IBM的EBCDIC字符集;

三、二进制文件(Binary)
文件传输之后,不会发生任何变化,用于传输图片、压缩包等文件;

四、本地数据
大部分的计算机,都是8位1个字节,本地数据的特点就是,一个字节长度不是由8个比特组成,某些特殊操作系统就有这种特性,接收方根据逻辑字节大小进行和本机的存储特点进行转换。

传输模式(主动模式和被动模式)

FTP的工作方式分为,主动模式和被动模式,主动和被动是针对服务端说的,
主动模式,服务端通过20端口,主动访问客户端的端口,然后开始传输数据;
被动模式,服务端开放一个端口,把端口告诉客户端,由客户端发起连接,被动地接受客户端的访问。

在主动模式情况下,因为是服务端主动访问客户端,能否成功建立数据连接,取决于客户端的配置。
这个过程有非常大的概率,被客户端的防火墙拦截;如果客户端没有公网IP,根本无法建立连接

以下内容来自于百度

21端口用于认证,20端口用于传输数据;

FTP客户端随机开启一个大于1024的端口N,向服务端的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT 命令,将开放的N+1端口告诉服务端。
服务端接收到命令后,会用其本地的数据端口(20端口),连接客户端指定的端口N+1,进行数据传输。

FTP客户端随机开启一个大于1024的端口N,向服务端的21号端口发起连接,然后开放N+1号端口进行监听,向服务器发送PASV命令,通知服务器自己处于被动模式。
服务器收到命令后,开放一个大于1024的端口P进行监听,然后用PORT命令通知客户端,自己的数据端口是P。
客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

源码参考

https://gitee.com/seaboot/commons-net

posted on 2021-04-18 16:08  疯狂的妞妞  阅读(995)  评论(0编辑  收藏  举报

导航