最近在做基于iptable的报文转发,先记录一下iptable的一些概念,后面再将开发实录写出来。
iptable有很多很强悍的功能,譬如可以用来做防火墙、上网代理等,大多我都没有去研究,因为项目的需要,专门研究了一下用于做报文转发的NAT;从目前测试的情况来看,相比基于TCP的报文转发,资源的开销还是有很大的优势的。
那么什么是NAT呢,NAT的英文全称是Network Address Translation,顾名思义,就是网络地址转换的意思,简单来讲就是,A要访问C,但是由于安全性等等其他的一些考虑,A不能直接访问C,必须经过B的验证;B在收到A的请求并且验证通过后,就讲请求发向C,C再将应答经过B返回给A。
那么如何体现出资源开销的优势呢?原因就在于TCP的报文转发是在用户态和内核态之间来回切换来实现报文的传送的,这种用户态内核态的切换资源消耗非常高,据我当前的测试估算,单路TCP报文的转发要比NAT的报文转发资源消耗大2-3倍;而NAT的转发只在内核态实现,节省了大量的开销,优势非常明显。
但基于NAT的转发也不是说就没有缺点,缺点就是接入的路数不可控,尤其是对于单路资源消耗很大的访问,因为无限制的接入访问必然导致CPU超负荷,而TCP是可以实现控制的。关于这个问题是否有解决的方法,还需要好好研究一下看是否能将NAT的优越性充分得发挥出来。
后面将补充NAT的具体实现。
















