欢迎来到天天文库
浏览记录
ID:21418830
大小:51.50 KB
页数:3页
时间:2018-10-21
《在vxworks下实现nat-napt的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、在VxWorks下实现NAT/NAPT的方法
2、第1摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxsoNormal>关键词:NATNAPT钩子函数网络协议栈截获转换校验和引言近年来,随着Inter的迅猛发展,连入Inter的主机数量成倍增长。由于最初设计Inter的时候并没有考虑到需要支持这么大的规模,因而Inter使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Inter面临的最大问题之一。为了解决IP地址短缺的问题,人们提出了许多解决方案,nter能够支持到新一代IP协议Ipv6的出台。在众多的解决
3、方案中,网络地址转换NAT(NetBlk、clBlk和Cluster。其中,Cluster保存的是实际的数据,mBlk和clBlk中保存的信息是用来管理Cluster中保存的数据的。为了满足传输不同大小数据的需要,Cluster是一些大小不同的内存块;缺省情况下,VxBlk中保存的只是指向数据的指针,因此,网络协议栈不同层之间的数据传输可以避免数据拷贝。此外,对于分布在多个Cluster中的数据,可以通过mBlk把它们链在一起,并且只需要传递链首的mBlk就可以了。VxBlk结构中,有2个指向其它mBlk的指针:1个指向同一个包的下一个mBlk;另一个指向下一个包的链首的m
4、Blk。ClBlk指向的就是实际存储数据的Cluster。3向VxWorks网络协议栈加入NAT为了向VxWorks网络协议栈中加入NAT,必须实现2个基本操作:IP包的截获得IP包的处理。3.1VxWorks下IP包的截获VxWorks网络协议栈在物理驱动层和IP层上分别提供了两类钩子函数:EtherHook和IpFilterHook。利用这两类钩子函数,可以实现对IP包的截获。(1)EtherHookEtherHook提供对以太帧的截获功能。它包括2个钩子函数:以太帧接收钩子函数EtherInputHook和以太帧发送钩子函数EtherOutPutHook。它们分别用函
5、数EtherInputHookAdd和EtherOutputHookAdd安装。安装了这些钩子函数后,每当有以太帧被接收到时,函数EtherInputHook就会在该以太帧被提交给上层处理前被自动调用;每当有以太帧被发送时,函数EtherOutputHook会在该以太帧被发送前被自动调用。通过截获以太帖,可以达到截获IP包的目的。(2)IpFilterHookIpFilterHook提供对IP包的截获功能。它只对应1个钩子函数,用函数ipFilterHookAdd就可以完成IpFilterHook的安装。安装了IpFilterHook后,每当有IP包被接收到时,函数IpFi
6、lterHook就会被自动调用,从而实现对IP包的截获。3.2NAT过程中IP包的处理利用钩子函数完成IP包的截获后,就可以根据需要对IP包进行处理。首先,可以从IP包中剥离出IP头,根据IP头中的“协议”域可以判断出是UDP包还是TCP包。然后,从IP包中剥离出UDP头或TCP头,利用IP头和UDP头或者TCP头中的相关信息,就可以根据需要进行IP地址和Port的转换处理。NAT一般采用1个映射表来实现IP地址和Port的转换。对于截获到的IP包,通过比较IP包的目的IP、目的Port、源IP、源Port和NAT映射表中的相应表现,对IP包的目的IP、目的Port、源IP
7、、源Port进行转换。典型的NAT映射表如图5所示。(1)处理由内到外的IP包由内到外的IP包指的是私有网主机通过NAT发送到公共网主机的IP包。它的源IP是私有IP,目的IP是公共IP。当截获到1个由内到外的IP包时,NAT首先以IP包的源IP和源Port作为RealSrcIP和RealSrcPort的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的NATIP和NATPort替换IP包的源IP和源Port,而保持IP包的目的IP和目的Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给VxWorks网络协议栈。如果在映射表中没有搜索到对应
8、的表项,NAT就会向映射表中添加1个新的表现。该表项中的RealSrcIP和RealSrcPort用IP包的源IP和源Port来填充;NATPort用NAT分配的1个空闲Port填充。然后,根据新增加的表项,按照上面相同的步骤完成对IP包的处理。后续相同的IP包也都用这个表项来处理。(2)处理由外到内的IP包由外到内的IP包指的是从公共网通过NAT发送到私有用的IP包。它的源IP是公共IP,目的IP是NAT的公共IP。当截获到1个由外到内的IP包时,NAT就以IP包的目的IP和目的Port作为NATIP和NATPo
此文档下载收益归作者所有