传输协议 - ftp
这里只讨论一下我们编码过程中需要注意的部分。
连接上限
FTP 是有连接上限的,开发过程中需要注意到这一点,高并发情况下要考虑复用连接。
4种文件类型
这与文件编码有关,使用 CRT、MobaXterm 等工具传输文件时,经常会让我们选择文件编码,如果选的不对,就会出现文件损坏、中文乱码等问题。
- 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,然后在两个端口之间进行数据传输。
二者的区别主要在于建立数据传输连接的时候,
主模式的连接发起方为服务器端,使用20号端口连接客户端的N+1端口建立数据连接;
被动模式连接发起方为客户端,客户端使用端口号+1去连接服务器的某一高位端口;