浅谈FTP ALG




浅谈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 and port 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的区别了。
呵呵.
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: allegro alg是一个计算机科学领域中的算法,它用于解决最优化问题。最优化问题是在给定一组约束条件下,寻找某个目标函数的最小值或最大值。 allegro alg算法的主要思想是通过不断迭代的方式,逐渐接近目标函数的最优解。算法通过不断地调整解的参数值,来改进当前的解,并在每一次迭代中更新解的值。这种迭代的过程会持续进行,直到找到一个满足特定停止条件的解。 allegro alg算法的设计中,一个重要的概念是损失函数,它用于衡量当前解的质量。算法会通过计算损失函数的值来评估当前解的优劣,并根据优化目标的要求,将解的值调整为更接近最优解。 除了损失函数,allegro alg算法还考虑了约束条件。约束条件是对解的取值范围或解中元素之间的关系的限制,它们需要被满足才能得到合理的解。 总的来说,allegro alg算法是一种用于解决最优化问题的迭代算法。它通过不断调整解的参数值,来改进当前解的质量,并在满足约束条件的前提下寻找最优解。这个算法在很多实际问题中都可以应用,例如机器学习、运筹学和金融领域等。 ### 回答2: Allegro ALG 是一个图形处理器的产品系列,由英特尔公司推出。它是专为游戏和多媒体应用而设计的高性能图形处理单元(GPU)。Allegro ALG 系列采用了先进的制程工艺和架构,提供强大的图形处理能力,可以支持高清晰度图像、逼真的3D效果和流畅的动画显示。 Allegro ALG 在游戏行业中得到了广泛的应用。游戏开发者可以利用 Allegro ALG 的强大功能和易于使用的开发工具,快速创建令人印象深刻的游戏效果。通过使用 Allegro ALG,游戏可以呈现出令人惊叹的高品质视觉效果,增加游戏的乐趣和吸引力。 除了游戏应用外,Allegro ALG 也广泛应用于多媒体领域。它可以加速视频和图像的处理,提供高质量的图像显示效果。同时,Allegro ALG 还支持硬件加速的视频编码和解码,以提供更流畅的视频播放体验。 Allegro ALG 的出现,不仅提升了图形处理的性能和效率,也为游戏和多媒体行业带来了更多的创新和发展机遇。它的强大功能和稳定性,使得它成为许多公司和开发者的首选,成为推动游戏和多媒体技术进步的重要因素之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值