FTP alg功能

普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而NAT ALG(Application Level Gateway,应用层网关)技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。

FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立

FTP数据连接的协商分为两种模式,一种是主动模式,另一种是被动模式。

主动模式的特点是,在客户端和服务器端要进行文件传递时,首先是客户端使用一个报文告诉服务器端,它将用某个IP地址的某个端口作为数据连接(这个信息就是报文的载荷),也就是通常说的PORT命令。服务器端收到这个报文后,回应一个同意的ACK报文,然后服务器端会主动用自己的IP地址加上端口20来发送一个SYN报文到客户端通过PORT命令告诉它的那个IP地址和端口,和客户端建立起一个数据连接。

主动FTP:
     命令连接:客户端 >1023端口 -> 服务器 21端口
     数据连接:客户端 >1023端口 <- 服务器 20端口

被动模式的特点是,在客户端和服务器端要进行文件传递时,首先是服务器端通过一个报文告诉客户端,它将用那一个IP地址的那一个端口作为数据连接(该报文以命令字227开始),也就是PASV命令。客户端收到这个报文之后,回应一个同意的ACK报文。然后客户端会用自己的IP地址,然后任选一个能够使用的端口(注意:通常情况下都不是20)和服务器端告诉它的那个IP地址和端口相连接,建立数据连接。

被动FTP:
     命令连接:客户端 >1023端口 -> 服务器 21端口
     数据连接:客户端 >1023端口 -> 服务器 >1023端口

主动模式需要alg支持才能正常工作,被动模式不需要alg支持

一、测试环境:

我的电脑 WINSCP软件模拟FTP客户端 进行测试

路由器设备给终端提供网络接入,终端作为FTP客户与客户的FTP服务端连接(FTP需要禁用Passive模式,即使用主动模式进行上传文件)

FTP server is speedtest.tele2.net (90.130.70.73), login anonymous.FTP客户端使用WISCP模拟。

抓取lan口的包查看

1> active 模式:

1. 在active模式下,如下图抓的包中,在命令连接部分(ftp类型的包),client端使用的端口是 65181,这个端口是大于1024的任意端口,ftp server端用的端口是21

2.如下图,在active模式下,要传输数据时,ftp client告诉server数据传输联系端口 65182 (大于1024的任意端口),并进行listen,

正常的流程是server端用端口20主动和client端65182建立数据传输通道,并传输数据。这里是server知道 了client端的数据通道监听端口后,主动建立了数据传输通道,所以是主动模式。

然而这边的打印是传输通道建立失败

建立失败的可能原因一:响应发送的端口与原来请求的端口不一致,导致不能正常建立连接

后面继续抓网络出口包,否定上面的猜测,下面的65181可能是重新请求建立的连接 与上一个连接请求过程无关

【问题现象】捷克200套UR51出货新版本FTP问题lan下面电脑通过5X ,用ftp 客户端主动模式,访问失败
【产生原因】ftp主动模式下服务器收到了客户端内网发给服务端数据传输的端口,但是服务端从20端口发出去的数据是内网ip和当前的数据传输端口,数据只能到蜂窝进入不了内网是因为未添加 FTP ALG 当前数据只能到达蜂窝接口,不能被NAT进行有效的转换,从而连接建立失败

【解决方案】修改内核的默认值/proc/sys/net/netfilter/nf_conntrack_helper 默认值为1
【测试结果】winscp模拟客户端通过lan口下的设备上网上传ftp文件到服务端正常,抓包,数据传输端口和20端口正常交互且数据正常传输

 建立失败的可能原因三:当前的ftp client比较强大,当主动模式不通时会自动切换成被动模式,所以加不加alg都能正常工作,用户感觉不出来, 主动模式连接后自动换成被动模式导致当前连接的端口出现变化 连接失败

标识1 :表示当前的主动模式告诉ftp服务器使用 65182 的端口来访问ftp client.
标识2: 表示主动模式请求失败,client 主动切换成了被动模式
标识3: 表示数据传输使用的是被动模式,端口与之前请求的端口已经不一致了

修改后可以正常访问23.40与上面的1.100都是表示为 FTP 客户端

标识1 :表示当前的主动模式告诉服务器使用52049的端口来访问ftp client. 
标识2: 表示主动模式请求成功。 
标识3: 表示服务端成功使用端口52049来进行数据传输

参考文档:

https://blog.csdn.net/huyb100/article/details/82625749

https://www.cnblogs.com/lnlvinso/p/8947369.html

捷克200套UR51出货新版本FTP问题(FTP主动模式无法正常传输数据问题)的更多相关文章

  1. FTP服务器访问主动模式、被动模式

    在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...

  2. FTP协议的主动模式和被动模式的区别

    最近准备做一个<FtpCopy系列教程>,主要讲解Ftp协议主动模式和被动模式的区别.以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份. ...

  3. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

  4. FTP 传输中的主动模式和被动模式

    最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...

  5. FTP之主动模式vs被动模式

    背景说明 最近有个项目涉及到FTP的上传下载问题.在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接.经过一些研究,发现是防火墙造成的 ...

  6. FTP的主动模式和被动模式

    摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...

  7. ftp主动模式与被动模式交互过程分析

    1.相关介绍 1.1主动模式和被动模式 主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据. 被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的 ...

  8. FTP 两种连接模式

    简介 FTP协议要用到两个TCP连接, 一个是命令连接,用来在FTP客户端与服务器之间传递命令:另一个是数据连接,用来上传或下载数据.通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的 ...

  9. FTP的PORT(主动模式)和PASV(被动模式)

    最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...

随机推荐

  1. dubbo的负载均衡策略和容错策略

    一.dubbo 负载均衡策略 random loadbalance 默认情况下,dubbo 是 random load balance 随机调用实现负载均衡,可以对 provider 不同实例设置不同 ...

  2. Zuul1与Spring Cloud Gateway对比

    一.API网关 1.1 Zuul1简介 1.2 Spring Cloud Gateway简介 二.对比 2.0 产品对比 2.1 性能对比 2.1.1 低并发场景 2.1.2 高并发场景 2.1.3 ...

  3. 高级UI-符合MD的常用控件

    在Google提供的控件中,在support-design及v4,v7包中,存在着很多符合MD标准的控件,这里罗列出一些常用的控件 TextInputLayout 这个控件在作为输入框的时候是极其方便 ...

  4. Mac10.14.6安装Python3

    换了台新电脑, 记录一下Python3的安装过程. 1.检查现有版本的python. 因为Mac的系统以来python2, 所以python肯定是有的, 因为依赖, 所以安装了python3, 也不可 ...

  5. NotePad++ 正则表达式 转

    https://gerardnico.com/ide/notepad/replace https://notepad-plus-plus.org/community/topic/16787/find- ...

  6. WIN10更换无线网卡后WIFI无法正常启用

    这里根据自己经历提供几个方案: 首先我们要确定这两个地方正常(表示网卡能识别.驱动安装好:有无线开关没打开的朋友请出门右转): 方案一:万能的重启,不觉得麻烦的就多重启几遍.大力出奇迹! 方案二:然后 ...

  7. malloc/free和new/delete详解与应用

    C++面试经常会问到关于malloc/free和new/delete的区别,网上有不同版本的解释,这里总结下并加上个人理解和使用. 两者相同点 1.都可以申请动态堆内存. 两者不同点 1.new/de ...

  8. LIUNX随堂学习-2 用户和组,增、删、改、查

    1.less的使用 less  /etc/group            #查看组的信息 less /etc/gshadow        #查看组密码 例如:less /tmp/aa        ...

  9. oddo

    看了这张图,或许你对odoo有了一些兴趣. https://www.cnblogs.com/wterp/p/9093616.html 这次就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者 ...

  10. Python复习笔记02

    语句表达式: 在Python中支持遍历循环的对象:可迭代器对象,支持迭代协议的对象 比如列表list没有迭代功能只是可迭代对象 迭代:迭代协议 --> 例:f.__next__() 属于f的迭代 ...