FTP协议报文详解及FTP穿越NAT

版权声明:本文为博主原创文章,转载请附带此文链接。 https://blog.csdn.net/ever_peng/article/details/89022796

目录

 

1、拓扑图

2、FTP协议简介

3、FTP工作原理

3.1、主动连接(PORT)

3.2、被动连接(PASV)

3.3、FTP主动模式穿越SNAT原理

3.4、FTP被动模式穿越DNAT原理

4、问题思考

4.1、主动模式和被动模式是谁决定的

4.2、主动模式和被动模式是怎么协商出端口

4.3、设想中间防火墙怎么识别子连接并给子连接放行

4.4、思考NAT设备如何给子连接做地址转换

4.5、下载两个文件,会每个文件开一个数据连接么

4.6、列出目录,服务器发送目录列表,会使用数据连接传输么

5、FTPipv4和ipv6的区别


1、拓扑图

 

2、FTP协议简介

FTP 英文全称:File Transfer Protocol,中文全称:文件传输协议

提供交互式的访问,对传输文件的格式和类型有分类,允许文件具有存取权限。适合异构网络任意计算机的传送。

3、FTP工作原理

FTP采用C/S架构,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务,FTP服务器检查有两大部分组成:一个主进程,负责接收新的请求,另外有若干的从属进程,负责处理单个请求,工作步骤如下:

  1. 建立TCP连接
  2. 打开熟知端口21(控制端口),使客户进程能够连接上
  3. 等待客户进程发链接请求。
  4. 启动从属进程来处理客户进程发来的请求。主进程与从进程并发执行,从属进程对客户进程的请求处理完毕后即终止。
  5. 回到等待状态,继续接收其他客户进程的请求。

3.1、主动连接(PORT)

1、主动连接介绍

服务端通过制定端口号(20)主动与客户端建立数据连接,并向客户端发送数据。

以下报文是SNAT转换后的报文,源IP(10.10.10.2)转换成出接口IP地址(192.168.10.114)

2、报文拆分解释

2.1、报文1-3:TCP建立三次握手,建立连接

 

2.2、报文4:服务端(21端口)向客户端(49203端口)发送request报文。code字段表示新用户服务就绪,arg字段为服务器名称和服务器版本号

 

2.3、报文5:客户端(49203端口)向服务端(21端口)发送request报文。command字段表示该报文里包含的是用户名,arg字段为用户名内容。

 

2.4、报文6:服务端(21端口)回复response报文,code值为331,表示用户名可以,需要密码

2.5、报文7:客户端(49203端口)向服务端(21端口)发送request报文,command字段表示该报文里包含的是密码,arg字段为密码内容。

 

2.6、报文8:服务端(21端口)回复response报文,code值为230,表示用户已登录,请继续操作

2.7、报文9:客户端(49203端口)向服务端(21端口)发送SYST报文,表示返回服务器使用的操作系统。

2.8、报文10:服务端(21端口)回应系统类型,code字段为215,表示返回的是系统类型。arg字段为UNIX,表示系统类型是UNIX系统

2.9、包11:客户端(49203端口)请求系统状态

包12:服务端(21端口)回应系统状态,code字段为211,arg字段为特征列表

2.10、包15:客户端(49203端口)PWD获取当前路径

包16:服务端(21端口)返回当前路径

包17:客户端(49203端口)CWD更改目录

包18:服务端(21端口)返回修改后的目录

包19:客户端(49203端口)PWD获取当前路径

包20:服务端(21端口)返回当前路径

2.11、包21:客户端(49203端口)请求使用ascii传输

包22:服务端(21端口)响应,同意使用ascii传输

 

2.12、包23:客户端(49203端口)发起主动连接,向服务端发送建立子连接的IP和端口

包24:服务端(21端口)响应,同意使用客户端发送的IP端口建立子连接

2.13、包26-28:FTP子连接三次握手建立TCP连接。

2.14、包:30-32:服务端(20端口)向客户端(49204端口)发送数据。

2.15、包33-37:数据传输完成,TCP断开连接

2.16、包60-63:控制连接已断开,TCP四次挥手断开TCP连接

3.2、被动连接(PASV)

1、被动连接介绍

服务端采用客户端建议使用被动模式,开启数据传输端口的监听,被动等待客户端的连接然后向客户端发送数据。

以下报文是SNAT转换后的报文,源IP(10.10.10.2)转换成出接口IP地址(192.168.10.114)

2、报文拆分解释

2.1、TCP三次握手建立TCP连接

2.2、报文4:服务端(21端口)向客户端(49206端口)。code字段表示新用户服务就绪,arg字段为服务器名称和服务器版本号

2.3、报文5:客户端(49206端口)向服务端(21端口)发送request报文。command字段表示该报文里包含的是用户名,arg字段为用户名内容。

2.4、报文6:服务端(21端口)回复response报文,code值为331,表示用户名可以,需要密码

2.5、报文7:客户端(49206端口)向服务端(21端口)发送request报文,command字段表示该报文里包含的是密码,arg字段为密码内容。

2.6、报文8:服务端(21端口)回复response报文,code值为230,表示用户已登录,请继续操作

2.7、报文9:客户端(49206端口)向服务端(21端口)发送SYST报文,表示返回服务器使用的操作系统。

2.8、报文10:服务端(21端口)回应系统类型,code字段为215,表示返回的是系统类型。arg字段为UNIX,表示系统类型是UNIX系统

2.9、包11:客户端(49206端口)请求系统状态

包12:服务端(21端口)回应系统状态,code字段为211,arg字段为特征列表

2.10、包15:客户端(49206端口)PWD获取当前路径

包16:服务端(21端口)返回当前路径

包17:客户端(49206端口)CWD更改目录

包18:服务端(21端口)返回修改后的目录

包19:客户端(49206端口)PWD获取当前路径

包20:服务端(21端口)返回当前路径

2.12、包23:客户端(49206端口)向服务端请求建立被动连接

包24:服务端(21端口)响应,同意建立被动连接,并且向客户端发送服务端的IP和监听端口

2.13、包26-28:FTP子连接三次握手建立TCP连接。

2.14、包:32-33:服务端(20端口)向客户端(49207端口)发送数据。

2.15、包34-36:数据传输完成,TCP断开连接

2.16、包59-62:控制连接已断开,TCP四次挥手断开TCP连接

3.3、FTP主动模式穿越SNAT原理

主动模式穿越SNAT主要用于FTP服务端在公网,客户端需要通过SNAT转换访问服务端。

1、FTP客户端通过防火墙的SNAT访问FTP服务端时使用主动模式。

2、当客户端发送PORT报文到服务端时,报文内的active ip address字段为10.10.10.2,active port字段为49217

3、当穿越SNAT的时候,SNAT会把active ip address字段和active port字段改为转换后的IP和端口

4、服务端收到经过SNAT后的PORT报文后,会给192.168.10.114发送响应报文。

5、响应报文经过链接跟踪表,转发给客户端。

3.4、FTP被动模式穿越DNAT原理

被动模式穿越DNAT主要用于FTP服务端在私网,客户端需要通过DNAT转换后访问服务端。

1、FTP客户端访问防火墙的10.10.10.1,进行DNAT转换,转换目的IP为192.168.10.114

2、当客户端发送PASV报文到服务端后,服务端返回自己的监听IP和端口,passive ip address字段是192.168.10.115,passive port字段是62443

3、当穿越DNAT的时候,DNAT会把passive ip address字段和passive port字段改为转换后的IP和端口

4、客户端收到转换后的响应报文后,和转换后的响应报文进行建立数据连接

 

4、问题思考

4.1、主动模式和被动模式是谁决定的

主动模式和被动模式是由客户端决定的,客户端请求建立数据连接时,发送PVSA报文,服务端就会建立被动连接;当客户端发送PORT报文时,服务端就会建立主动连接。

4.2、主动模式和被动模式是怎么协商出端口

主动模式协商端口

1、客户端使用任意一个的非熟知权端口N(N>1024)与服务端建立FTP控制连接,然后客户端开始监听N+1端口。客户端向服务端21端口发送PORT报文,PORT报文里包含客户端监听的IP和N+1端口。

2、服务端收到客户端的PORT报文后,使用客户端发送的IP和N+1端口与客户端建立数据连接。

被动模式协商端口

  1. 客户端开启FTP连接时,会打开两个任意的非熟知端口(N > 1024和N+1)。N端口连接服务器的21端口。
  2. 客户端发送PVSA报文给服务端
  3. 服务器会开启一个任意的非熟知端口(P > 1024),并发送响应报文给客户端响应报文包含服务端IP和端口号P。
  4. 客户端发起从本地端口N+1到服务器的端口P建立数据连接。

4.3、设想中间防火墙怎么识别子连接并给子连接放行

被动模式:

  1. 客户端开启FTP连接时,会打开两个任意的非熟知端口(N > 1024和N+1)。N端口连接服务器的21端口。
  2. 客户端发送PVSA报文给服务端。
  3. 服务器会开启一个任意的非熟知端口(P > 1024),并发送响应报文给客户端,响应报文包含服务端子连接IP和端口P。
  4. 防火墙收到服务端的响应后,获取响应报文中子连接的IP和端口P。
  5. 客户端发起从本地端口N+1到服务器的子连接IP、端口P建立数据连接。
  6. 防火墙收到客户端发送的报文目的IP是子连接IP后,允许转发,并转发给服务器。

4.4、思考NAT设备如何给子连接做地址转换

主动模式:

  1. 客户端使用任意一个的非熟知端口N(N>1024)与服务端建立FTP控制连接
  2. 客户端监听N+1端口。
  3. 客户端向服务端21端口发送PORT报文建立子连接,PORT报文里包含客户端监听的IP和N+1端口。
  4. NAT设备获取PORT报文内的客户端IP和N+1端口
  5. NAT设备修改PORT报文内的客户端IP和N+1端口为自己的IP和端口,生成动态NAT
  6. 服务端收到客户端的PORT报文后,使用NAT转换后的IP和端口与客户端建立数据连接。
  7. NAT设备收到后,访问转换后的IP和端口,根据动态NAT转换为客户端子连接的IP和N+1端口,发送给客户端。

4.5、下载两个文件,会每个文件开一个数据连接么

FTP同时下载两个文件,FTP会为每个文件打开一个数据连接。


1、下载文件test.txt,开启一条数据连接

2、下载文件test1.txt,开启另一条数据连接

4.6、列出目录,服务器发送目录列表,会使用数据连接传输么

会使用数据连接发送目录列表,当数据连接建立完成后,服务器会向客户端发送当前路径和目录列表内容。

5、FTPipv4和ipv6的区别

控制连接请求(被动模式)

IPv4使用PASV建立控制连接。PASV报文response报文的code字段为227(进入被动模式),arg字段为监听IP和端口。

IPv6使用EPSV建立控制连接。EPSV报文response报文的code字段为229(进入被动模式),arg字段为监听端口

控制连接请求(主动模式)

IPv4使用PORT建立控制连接。请求时携带监听的IPv4地址和端口。PART报文response报文返回200

IPv6使用EPRT建立控制连接。请求时携带监听的IPv6地址和端口。EPRT报文response报文返回200

 

猜你喜欢

转载自blog.csdn.net/ever_peng/article/details/89022796