FTP协议
FTP 协议
介绍
FTP支持将计算机中的本地文件通过网络传送到另一台计算机中——即文件传送。FTP协议是有状态的基于TCP的网络协议。
- FTP屏蔽了各计算机系统的差异(Linux,Windows,MacOS,IOS,unix均可用FTP),因而FTP协议适合于在异构网络中的设备之间传送文件。
- FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码);允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)
FTP的应用场景:计算机之间传输文件,尤其是用于批量传输文件
格式
格式:ftp://账号:密码@IP地址:端口号
例如:ftp://admin:123456@192.108.11.87:21
如果对方的ftp服务并没有启动密码,格式:ftp://IP地址:端口号
概念
FTP协议工作时需要2种TCP连接:控制连接 和 数据连接。
- 控制连接:传输FTP命令和响应,默认使用TCP端口21。
- 数据连接:实际的文件传输。分为两种模式
- 主动模式(Active Mode)
-
FTP客户端通过控制连接告诉FTP服务器使用哪个端口(大于1024的某端口)进行数据传输
-
FTP服务器使用TCP20端口尝试连接FTP客户端的此端口进行数据传输。
-
连接成功,建立数据连接,传输数据
工作流程图
sequenceDiagram participant C as Client participant S as Server note left of C : 打开一个端口(以1028端口举例),并监听此端口 note left of C : 监听1028端口 C ->> S : [控制连接]发送刚打开的1028端口号 note right of S : 收到1028端口号 note right of S : 打开本地20端口 S ->> C : 尝试以20端口连接客户端1028端口 note left of C : 接受连接请求 S -> C : 建立数据连接(服务端20端口对客户端1028端口)传输数据 note left of C : 数据传输开始 note left of C : 数据传输完毕 note over C , S: 四次挥手,关闭数据连接 C ->> S : [控制连接]发送“QUIT”或“BYE”指令 note right of S : 接收到控制指令 S ->> C : [控制连接]发送响应码 note over C , S: 关闭控制连接
-
- 被动模式
-
FTP客户端发送PASV命令到FTP服务器,要求服务器进入被动模式
-
FTP服务器随机打开一个端口(大于1024)等待FTP客户端的连接
-
FTP服务器通过控制连接告诉客户端端口号
-
FTP客户端连接到这个端口,建立数据连接
工作流程图
sequenceDiagram participant C as Client participant S as Server C ->> S : [控制连接]发送PASV命令 note right of S : 收到命令 note right of S : 随机打开一个本地端口(1028) note right of S : 等待连接 S ->> C : 发送刚打开的1028端口号 note left of C : 收到1028端口号 note left of C : 打开本地20端口 C ->> S : 尝试以20端口连接服务端1028端口 note right of S : 接受连接请求 C -> S : 建立数据连接(服务端20端口对客户端1028端口)传输数据 note left of C : 数据传输开始 note left of C : 数据传输完毕 note over C , S: 四次挥手,关闭数据连接 C ->> S : [控制连接]发送FIN指令 note right of S : 接收到FIN控制指令 S ->> C : [控制连接]发送ACK响应码 note left of C : 接收到ACK响应码 S ->> C : [控制连接]发送FIN控制指令 note left of C : 接收到FIN C ->> S : [控制连接]发送ACK响应码 note right of S : 接收到ACK响应码 note over C , S: 关闭控制连接
-
- 主动模式(Active Mode)
只有操作者主动关闭ftp连接,控制连接才会关闭,而文件传输完毕,数据连接就会关闭。比如用Windows资源管理器连接了远程ftp服务器拷贝文件,文件拷贝完成后,数据连接也就关闭了,控制连接没有关闭,你要拷贝其他文件,数据连接会被重新建立,但是如果你关闭了Windows资源管理器的窗口,那么控制连接就被关闭了。
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18195618