捷克200套UR51出货新版本FTP问题(FTP主动模式无法正常传输数据问题)
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主动模式无法正常传输数据问题)的更多相关文章
- FTP服务器访问主动模式、被动模式
在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...
- FTP协议的主动模式和被动模式的区别
最近准备做一个<FtpCopy系列教程>,主要讲解Ftp协议主动模式和被动模式的区别.以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份. ...
- FTP的主动模式与被动模式
FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...
- FTP 传输中的主动模式和被动模式
最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...
- FTP之主动模式vs被动模式
背景说明 最近有个项目涉及到FTP的上传下载问题.在本地开发好的程序测试的时候能正常获取FTP内容,但一放到生产上却显示connection timeout,无法连接.经过一些研究,发现是防火墙造成的 ...
- FTP的主动模式和被动模式
摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...
- ftp主动模式与被动模式交互过程分析
1.相关介绍 1.1主动模式和被动模式 主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据. 被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的 ...
- FTP 两种连接模式
简介 FTP协议要用到两个TCP连接, 一个是命令连接,用来在FTP客户端与服务器之间传递命令:另一个是数据连接,用来上传或下载数据.通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的 ...
- FTP的PORT(主动模式)和PASV(被动模式)
最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同.在此重温一下FTP的 ...
随机推荐
- iOS-iphone网络编程总结
iphone网络编程总结 一:确认网络环境3G/WIFI 1. 添加源文件和framework 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会 ...
- Android核心程序之SystemUI - (一)开篇
UI是实现用户交互的重要途径之一,而Android中一个重要的UI元素就是SystemUI,本文分析基于Android 5.1,分析SystemUI的启动及运行过程. SystemUI源代码所在路径为 ...
- tab页签
<div class="fl" id="newsBox"> <div class="tab1 grayBar"> & ...
- eNSP——OSPF的基础配置
原理: 模拟实验: 拓扑图: 实验编址: 1.基本配置 根据实验编址和拓扑图进行基本配置,并测试连通性. 2.部署OSPF网络 首先使用ospf命令创建并运行OSPF,1代表进程号 接着使用area命 ...
- wxPython之BoxSizer
1 函数原型 sizer = wx.BoxSizer( integer orient ) 其中的方向(orient)可以是 wx.VERTICAL(垂直) 或 wx.HORIZONTAL(水平). 将 ...
- GitLab基本使用
一.引言 在微服务架构中,由于我们对系统的划分粒度足够小,服务会很多,而且也存在经常迭代的情况.如果还按照以前的部署方式显得非常吃力和复杂,并且很容易出现错误.而随着容器技术的发展,这个时候持续集成( ...
- (十)EL表达式和JSTL标签快速入门
目录 什么是 el 表达式 示例:使用EL表达式获取pageContext .request.session.application域中的数据: 示例:使用EL表达式获取Bean属性 获取当前WEB应 ...
- FishingMaster(HDU-6709)【贪心】
题目链接:https://vjudge.net/problem/HDU-6709 题意:一个人要抓n条鱼,每抓一条鱼用时K,每烹饪一条鱼用时a[i],抓鱼的过程不能被打断,烹饪鱼的时候可以抓鱼,也可以 ...
- python 正则 re模块(详细版)
正则表达式 什么是正则表达式? 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合 ...
- element-ui 时间设置 获取固定的时间格式
<el-date-picker v-model="time1" type="daterange" start-placeholder="开始日期 ...