FTP
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。
其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive(也就是PASV,被动方式)
20端口数据流,21端口控制流;
ftp工作流程:
- 建立TCP连接
- 打开熟知端口21(控制端口),使客户进程能够连接上
- 等待客户进程发链接请求。
- 启动从属进程来处理客户进程发来的请求。主进程与从进程并发执行,从属进程对客户进程的请求处理完毕后即终止。
- 回到等待状态,继续接收其他客户进程的请求。
1.PORT主动模式
这里事先在虚拟机(134.135)里搭好了ftp,使用nat模式,宿主机(134.1)作为客户端进行连接。在宿柱机cmd上:
进行连接,点击回车触发以下流量包:
- 事先三次tcp连接:
- 服务器回应:
响应码220,给新用户准备服务,表示服务器准备好了,服务就绪 - 客户端请求:选择选项使用utf8编码格式
- 服务器回应:
响应200成功,设置成uft8模式
开始输入账户密码(这时候是客户端cmd界面开始提示输入账户密码):
- 客户端发送账户名
- 服务器响应:
用户名正确,请输入密码 - 客户端发送密码
- 服务器回应:
登录成功!
指定端口开始port模式:
-
客户端开始请求port
这里就是全文的关键点!!!客户端告诉服务器,给他说: 我的ip是134.1,我打开的端口是208*256+196=53444,请你连接我20端口,创建数据传输通道:
-
服务器回应
回应客户端设置port模式成功!考虑使用PASV
开始输入命令:
- 客户端请求:
LIST 如果指定了文件或目录,返回其信息;否则返回当前工作目录的信息。 - 三次握手
总的有三次tcp会话:
第一次:用于ftp登录账户密码和最后的退出(其中包含有后两次的客户端port端口请求)—随机端口–》21
第二次和第三次:一样都是在第一次请求端口的基础上建立连接,请求后的端口----》20
说白了就是1包2;控制的tcp会话包含传输数据的tcp会话。
传输数据的tcp会话的客户端端口,由控制tcp会话里面的PORT请求所决定(这个只是决定传输数据的端口,自身控制的端口还是没变)。传输数据完成后(包含握手和挥手),关闭整个连接就由 一开始的控制tcp的会话,来进行关闭;