找回密码
 注册
搜索
查看: 5242|回复: 0

在VxWorks下设置、实现NAT/NAPT的方法

[复制链接]
发表于 2007-7-3 19:06:43 | 显示全部楼层 |阅读模式
摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxWorks的网络协议栈,描述一种利用VxWorks操作系统提供的钩子函数来开发实现NAT和NAPT的方法。
; v6 C6 }4 K1 [+ ^( X6 _& s, m+ j% s3 C( T' u3 ?
关键词:钩子函数 网络协议栈 vxworks操作系统培训  vxworks调试教程  nat设置技术  napt实现
3 V, G" N: ]) a0 i/ i7 c, s# H5 e& B  @: b8 ~  v* F
近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持到新一代IP协议Ipv6的出台。在众多的解决方案中,网络地址转换NAT(Network Address Translation)技术提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。" X$ W+ |" v3 L$ S4 g* E4 h6 P

! b  v) A. ?9 @6 f* G( x4 e图1 NAT工作原理示意图
4 I& F+ C' A9 A# ]  o5 O; U4 O+ p, C4 b$ e
    一、NAT技术+ s$ h( _. ?+ Q- N. _9 k
    NAT技术的基本功能就是,用1个或几个IP地址来实现1个私有网中的所有主机和公共网中主机的IP通信。NAT技术可为TCP、UDP以及ICMP数据包提供透明转发。1 E# t  D- t7 B3 @/ j6 K

/ C9 W9 {6 n* T% L    1.1 NAT工作原理
/ M% o( k. |( L% t; z" `% O6 m    NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。如图1所示,NAT网关有2个网络端口,其中公共网络端口的IP地址是统一分配的公共IP,为202.204.65.2;私有网络端口的IP地址是保留地址,为192.168.1.1。私有网中的主机192.168.1.2向公共网中的主机166.111.80.200发送了1个IP包(Des=166.111.80.200,Src=192.168.1.2)。当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP并转发到公共网,此时IP包(Des=166.111.80.200,Src=202.204.65.2)中已经不含任何私有网IP的信息。由于IP包的源IP已经被转换成NAT的公共IP,响应的IP包(Des=202.204.65.2,Src=166.111.80.200)将被发送到NAT。这时,NAT会将IP包的目的IP转换成私有网中主机的IP,然后将IP包(Des=192.168.1.2,Src=166.111.80.200)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。7 f4 _1 c6 D  z8 @
" f, j! ~& n! F0 ]! i; C8 D
    1.2 NAPT技术由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT的公共IP地址数量的限制。为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(Network Address Port Translation)技术。
& K3 r# }3 L- m6 }' y2 \6 }& V4 J1 C
6 r5 M; m6 ]7 n  W! w; x; S: l
    NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台私有网主机利用1个NAT公共IP就可以同时和公共网进行通信。如图2所示,私有网主机192.168.1.2要访问公共网中的Http服务器166.111.80.200。首先,要建立TCP连接,假设分配的TCP Port是1010,发送了1个IP包(Des=166.111.80.200:80,Src=192.168.1.2:1010),当IP包经过NAT网关时,NAT会将IP包的源IP转换为NAT的公共IP,同时将源Port转换为NAT动态分配的1个Port。然后,转发到公共网,此时IP包(Des=166.111.80.200:80,Src=202.204.65.2:2010)已经不含任何私有网IP和Port的信息。由于IP包的源IP和Port已经被转换成NAT的公共IP和Port,响应的IP包(Des=202.204.65.2:,Src=2010166.111.80.200:80)将被发送到NAT。这时NAT会将IP包的目的IP转换成私有网主机的IP,同时将目的Port转换为私有网主机的Port,然后将IP包(Des=192.168.1.2:1010,Src=166.111.80.200:80)转发到私网。对于通信双方而言,这种IP地址和Port的转换是完全透明的。
+ Y' W: [' F- u9 N6 M% }# Q- Q& P8 S: X; d! q6 K& J# E* ^$ E; [5 \2 @
; J, R0 ?4 ~4 Q% _# Y
. P# O$ z8 Q9 s' c: e0 o" `
    二、VxWorks的网络协议栈与VxWorks操作系统捆绑发行的标准网络协议栈,是一个与BSD4.4兼容、功能齐全并针对嵌入式应用作了大量优化的TCP/IP协议栈。该网络协议栈与VxWorks操作系统、开发工具、设备管理工具以及上层协议和应用可以集成在一起,有完整的路由功能并可以根据需要进行剪裁。VxWorks的网络协议栈的分层结构如图3所示。VxWorks网络协议栈传输数据使用的内存,是在系统启动进行网络协议初始化的时候就申请下来的,并使用系统提供的netBufLib建立内存字点池来管理这些内存空间。网络协议栈传输数据所需的内存都是从这些内存节点池中申请,使用完毕后再释放。NetBufLib通过3种数据结构处理网络协议栈传输的数据:mBlk、clBlk和Cluster。其中,Cluster保存的是实际的数据,mBlk和clBlk中保存的信息是用来管理Cluster中保存的数据的。为了满足传输不同大小数据的需要,Cluster是一些大小不同的内存块;缺省情况下,VxWorks网络协议栈创建了大小从64~2048字节的6个不同的内存节点池。由于mBlk中保存的只是指向数据的指针,因此,网络协议栈不同层之间的数据传输可以避免数据拷贝。此外,对于分布在多个Cluster中的数据,可以通过mBlk把它们链在一起,并且只需要传递链首的mBlk就可以了。VxWorks网络协议栈的“零拷贝”技术就是建立在这种机制的基础之上的。图4描述了2个提交给网络协议栈TCP层的包的数据结构。在mBlk结构中,有2个指向其它mBlk的指针:1个指向同一个包的下一个mBlk;另一个指向下一个包的链首的mBlk。ClBlk指向的就是实际存储数据的Cluster。
1 l+ e% X6 ?& H" h  B# s
3 ?* \: w( w0 {论文在VxWorks下设置、实现NAT/NAPT的方法来自www.66wen.com免费论文网 5 _2 W; u4 S$ \& e3 p1 H

) Y4 {% A4 H* [/ a! F1 }
/ `/ W! ]9 E+ R- F1 a' J& T    三、向VxWorks网络协议栈加入NAT为了向VxWorks网络协议栈中加入NAT,必须实现2个基本操作:IP包的截获得IP包的处理。! ~0 ?8 k( {9 \- U5 c

6 r1 g1 K$ ~3 e; W   3.1 VxWorks下IP包的截获VxWorks网络协议栈在物理驱动层和IP层上分别提供了两类钩子函数:EtherHook和IpFilterHook。利用这两类钩子函数,可以实现对IP包的截获。# T6 a8 c$ m* W, a' F/ ]
    (1)EtherHookEtherHook提供对以太帧的截获功能。它包括2个钩子函数:以太帧接收钩子函数EtherInputHook和以太帧发送钩子函数EtherOutPutHook。它们分别用函数EtherInputHookAdd和EtherOutputHookAdd安装。安装了这些钩子函数后,每当有以太帧被接收到时,函数EtherInputHook就会在该以太帧被提交给上层处理前被自动调用;每当有以太帧被发送时,函数EtherOutputHook会在该以太帧被发送前被自动调用。通过截获以太帖,可以达到截获IP包的目的。
: [' D% a3 w8 b5 v' w" a    (2)IpFilterHookIpFilterHook提供对IP包的截获功能。它只对应1个钩子函数,用函数ipFilterHookAdd就可以完成IpFilterHook的安装。安装了IpFilterHook后,每当有IP包被接收到时,函数IpFilterHook就会被自动调用,从而实现对IP包的截获。
* n- E9 Y7 @5 [) F! D2 l4 s9 x+ [) R+ ]. ^3 u. }
    3.2 NAT过程中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、源Port进行转换。典型的NAT映射表如图5所示。# `! P. U# @7 i
    (1)处理由内到外的IP包由内到外的IP包指的是私有网主机通过NAT发送到公共网主机的IP包。它的源IP是私有IP,目的IP是公共IP。当截获到1个由内到外的IP包时,NAT首先以IP包的源IP和源Port作为Real Src DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\IP和Real Src DownloadFiles\content\2005-4-6\Port的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的NAT IP和NAT Port替换IP包的源IP和源Port,而保持IP包的目的IP和目的Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给VxWorks网络协议栈。如果在映射表中没有搜索到对应的表项,NAT就会向映射表中添加1个新的表现。该表项中的Real Src DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\IP和Real Src DownloadFiles\content\2005-4-6\Port用IP包的源IP和源Port来填充;NAT Port用NAT分配的1个空闲Port填充。然后,根据新增加的表项,按照上面相同的步骤完成对IP包的处理。后续相同的IP包也都用这个表项来处理。( b! A* I8 Y8 l& T6 o- m
    (2)处理由外到内的IP包由外到内的IP包指的是从公共网通过NAT发送到私有用的IP包。它的源IP是公共IP,目的IP是NAT的公共IP。当截获到1个由外到内的IP包时,NAT就以IP包的目的IP和目的Port作为NAT IP和NAT Port的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的Real Src DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\DownloadFiles\content\2005-4-6\IP和Real Src DownloadFiles\content\2005-4-6\Port来替换IP包的目的IP和目的Port,而保持IP包的源IP和源Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给VxWorks网络协议栈。
( H' ^: V: i8 x' E5 H1 h/ D
/ ?( }) [5 m/ E- B2 f; N/ k( q. @1 f2 x$ Z5 L* H6 Z
    (3)nat映射表的配置; {. _/ n0 V" S& `4 B0 B: R
    作为nat完成ip包中ip和port转换的依据,nat映射表的管理关系到nat的功能和性能。nat映射表的配置可以分为2部分:静态配置部分和动态配置部分。静态配置部分主要用于nat ip、nat port和私有ip、私有port的映射关系可以预见的应用,例如udp通信和tcp server运行在私网中某个主机等情况。nat映射表静态配置部分可以在nat运行前根据规划直接完成配置。动态配置部分主要用于nat ip、nat port和私有ip、私有port的映射关系不可预见的应用,例如在私有网中某个主机上运行tcp client来与公共网中某个主机上的tcp server建立连接进行通信。因这种情况下,私有网主机使用的port是动态分配的。为了实现需要nat ip、nat port和私有ip、私有port的转换,必须动态配置nat映射表。相对于静态配置部分而言,动态配置部分的数据结构、数据组织和搜索算法的设计和实现的难度要大得多,关键是要实现一个高效的搜索算法。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-6-19 12:28 , Processed in 0.018628 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表