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. 01.轮播图之五 :一个 imageView也能 作 轮播

    这个是最近才写的,本以为实现起来很有难度,需要更高深的理论, 写完之后,才发现自己错误的离谱: 之所以能用一个imageview 实现轮播 基于两点::: 使用 imageview 的layer 层设 ...

  2. Qt598x64vs2017.Kit(构建套件)(安装Qt598x86vs2015)

    1.Qt598-->工具-->选项 1.1. 1.2. 2.20191120 想起 上面第一张图的配置编译器的地方,就想着 Qt598x64vs2017 配置成编译x86,于是将 上面图中 ...

  3. 软件测试开发人员需要掌握的一些基本数据结构算法(php编写)

    一:冒泡排序算法    冒泡排序(Bubble Sort)算法是一种典型的交换排序算法,通过两两数据交换进行排序.如果有n个数,则要进行n-1趟比较,在第1趟比较中要进行n-1次两两比较,在第j趟比较 ...

  4. Java 文件下载工具类

    Java 文件下载工具类 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static Logger logger = ...

  5. Centos7安装vim8.0 + YouCompleteMe

    更新yum sudo yum upgrade sduo yum update 下载git sudo yum install git 升级vim以及gcc 升级gcc sudo yum install ...

  6. Word F1~F12 功能快捷键用法大全

    F1:帮助 在Word中使用F1功能键,可以获取帮助. F2:移动文字或图形 F2按键可以移动文字和图形.选中文本,按下F2,然后将光标定位到你想移动到的地方,按下回车,即可移动. F3 :自动图文集 ...

  7. logstash grok nginx log

    #cat logstash.conf input { file { path => "/alidata/logs/nginx/appapi.dayutang.cn.access*.lo ...

  8. c++博客转载

    C++ 中文件流(fstream)的使用方法及示例 http://blog.jobbole.com/108649/ qt中文乱码问题: https://blog.csdn.net/brave_hear ...

  9. js 监听键盘的enter键

    // js 版本 window.onload=function(){ document.onkeydown=function(ev){ var event=ev ||event if(event.ke ...

  10. 【转载】在使用JDBC连接MySql时报错:You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support

    在使用JDBC连接MySql时报错:You must configure either the server or JDBC driver (via the serverTimezone config ...