浅谈FTP ALG

转载 2012年03月26日 16:19:52




浅谈FTP ALG

分享

分类: 网络技术2009-03-09 17:50
最近遇到了FTP的问题,牵扯到了ALG,在这里写一下,为了以后的学习参考.
先来认识一下ALG的概念,
It allows customized NAT traversal filters to be plugged into the gateway to support address andport translation for certain application layer "control/data" protocols such as FTPBitTorrentSIP,RTSP, file transfer in IM applications etc.
对于那种控制和数据会话的应用,比如FTP,BT,SIP,NAT处理的时候就会有问题,因为它们会把ip address 和port放在payload里面,这个时候就需要ALG来做处理,现在一般的网关(router)在默认情况下都会打开FTP ALG.
如果你的FTP 客户端在一个NAT router后面 ,客户端会和FTP服务器端首先建立一个控制连接,对于控制连接,一般服务器端的端口21,但是传递文件的时候,要先通过控制连接协商出一个数据连接来,也就是协商出一个ip address 和port,通过这个IP address和port,对方才可以连接过来做数据传输.
但是问题在于协商的ip address和port在payload里面,经过NAT router 的时候,不会改变,因为NAT router 只会改IP 层的,不会动TCP/UDP里面的数据,服务器最后得到的payload里面的是私有IP地址,这样就无法建立数据会话.
所以在应用ALG,ALG就是在发现IP报文头做了NAT,在这个时候出现port request,就需要同时改变PORT命令,我做试验抓包发现有的时候port不一定会变.

因为FTP是一个TCP的连接,如果更改payload,那么就涉及到整个TCP连接的一些参数的更改,比如sequence number,ack number,TCP报文的checksum等等。
这里有必有来说一下TCP checksum的计算,tcp checksum需要下列值,pseudo header,TCP header,data(payload) 
对于pseudo header,解释如下,在这里,就需要你对TCP/IP比较了解了,TCP/IP是基础,一定要精通.
The pseudo header conceptually prefixed to the UDP header contains the source address, the destination address, the protocol, and the UDP length. This information gives protection against misrouted datagrams.

我贴了两张抓包的截图,
topo,pc(192.168.10.33)---NAT router(wan:172.25.27.78)---FTP server(172.25.5.8)
before ALG



after ALG



从两幅截图就可以看出,payload的ip地址变了,并且ip address 大小比之前小(192.168.10.33-->172.25.27.78),这样的话会导致next sequence number也会变化,带不管怎么样tcp checksum都会重新计算,因为payload变了.
在这样的TOPO里面(client在lan,server在wan),这种问题只会出现在PORT mode里面,在pass mode里面就没有问题,即使把FTP ALG关掉都没问题。
具体原因,去看一下port mode和pass mode的定义就能懂了.
具体如下,In active mode, the FTP client opens a dynamic port, sends the FTP server the dynamic port number on which it is listening over the control stream and waits for a connection from the FTP server. When the FTP server initiates the data connection to the FTP client it binds the source port to port 20 on the FTP server.

In passive mode, the FTP server opens a dynamic port, sends the FTP client the server's IP address to connect to and the port on which it is listening (a 16-bit value broken into a high and low byte, as explained above) over the control stream and waits for a connection from the FTP client. In this case, the FTP client binds the source port of the connection to a dynamic port.


对于FTP ALG的概念吧,下一段粘自RFC 2623 ,解释的很好,可以参考下,
   "PORT" command and "PASV" response in FTP control session payload
   identify the IP address and TCP port that must be used for the data
   session it supports. The arguments to the PORT command and PASV
   response are an IP address and a TCP port in ASCII. An FTP ALG is
   required to monitor and update the FTP control session payload so
   that information contained in the payload is relevant to end nodes.
   The ALG must also update NAT with appropriate data session tuples and
   session orientation so that NAT could set up state information for
   the FTP data sessions.

   Because the address and TCP port are encoded in ASCII, this may
   result in a change in the size of packet.  For instance,
   10,18,177,42,64,87 is 18 ASCII characters, whereas
   193,45,228,137,64,87 is 20 ASCII characters. If the new size is same
   as the previous, only the TCP checksum needs adjustment as a result
   of change of data. If the new size is less than or greater than the
   previous, TCP sequence numbers must also be changed to reflect the
   change in length of FTP control data portion.  A special table may be
   used by the ALG to correct the TCP sequence and acknowledge numbers.
   The sequence number and acknowledgement correction will need to be
   performed on all future packet of the connection.

虽然这只是个ALG的应用,但还是牵扯到很多理论,同样,对于SIP ALG,H323 ALG,RTSP,道理也是一样,只不过是TCP和UDP的区别了。
呵呵.

ftp ALG 功能实现的概要说明

     近阶段了解了一下ALG(应用层网关Application Layer Gateway),有些体会做一个记录,以供以后查阅。     ALG,Application Layer Gateway...
  • jiahehao
  • jiahehao
  • 2010年08月24日 20:00
  • 6702

FTP ALG 功能实现的概要说明

近阶段了解了一下ALG,有些体会做一个记录,以供以后查阅。 ALG,Application Layer Gateway的缩写,这是一般网络设备或者主机都必备的一个小模块,那ALG是为了完成一个什么功...
  • magod
  • magod
  • 2011年04月07日 22:08
  • 5174

防火墙技术之---ALG技术

NAT网络地址转换是以救世主的身份 出现缓解IPv4地址枯竭,实践证明NAT的很多的优点使其迅速被广泛应用,但是在实际操作中也出现了一些问题。NAT关注五元组信息,进行转换的五元组也仅限于IP报头之中...
  • haijiaoqihao20160106
  • haijiaoqihao20160106
  • 2017年02月27日 17:46
  • 822

内核SIP ALG学习指引和基本实现原理(分析BCM方案实现)

总结一下内核ALG的学习方法和基本原理,方便以后需要了解这方面的朋友少走弯路。该文档分析基于broadcom5358方案。...
  • liujianfeng1984
  • liujianfeng1984
  • 2013年09月25日 01:14
  • 9130

浅谈人工智能:现状、任务、构架与统一 | 正本清源

朱松纯   加州大学洛杉矶分校UCLA 统计学和计算机科学教授 视觉、认知、学习与自主机器人中心主任 VCLA@UCLA   2017年11月02日 刊登于 《视觉求索》微信公众号 目...
  • x32sky
  • x32sky
  • 2017年11月03日 17:37
  • 1393

浅谈人工智能:现状、任务、构架与统一 | 正本清源(看完有新认知)

https://mp.weixin.qq.com/s/-wSYLu-XvOrsST8_KEUa-Q 浅谈人工智能:现状、任务、构架与统一 | 正本清源 原创 2017-11-02 朱松纯 视觉求索...
  • dingyahui123
  • dingyahui123
  • 2017年11月04日 21:50
  • 2296

【转】ftp ALG 功能实现的概要说明

【转】ftp ALG 功能实现的概要说明   2009-09-16 10:21:56|  分类: LINUX|字号 订阅 近阶段了解了一下ALG,有些体会做...
  • chengfangang
  • chengfangang
  • 2012年03月26日 14:44
  • 815

FTP ALG 功能实现的概要说明

近阶段了解了一下ALG,有些体会做一个记录,以供以后查阅。 ALG,Application Layer Gateway的缩写,这是一般网络设备或者主机都必备的一个小模块,那ALG是为了完成一个什么功...
  • magod
  • magod
  • 2011年04月07日 22:08
  • 5174

当两次NAT碰到FTP ALG

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://virtualadc.blog.51cto.com/3027116/755315 ...
  • chengfangang
  • chengfangang
  • 2012年03月26日 15:26
  • 1297

浅谈防火墙对FTP的影响及故障排除

FTP是常见的基于TCP的网络服务,它使用了两个TCP连接来建立逻辑通信信道,即控制连接和数据连接。当客户端与服务器建立一个FTP会话时,使用TCP创建一个持久的控制连接以传递命令和应答。当发送文件和...
  • RandyLeonard
  • RandyLeonard
  • 2013年08月09日 13:06
  • 765
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈FTP ALG
举报原因:
原因补充:

(最多只允许输入30个字)