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

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

[复制链接]
发表于 2007-7-3 19:06:43 | 显示全部楼层 |阅读模式
摘要:介绍NAT、NAPT的基本概念和工作原理;结合VxWorks的网络协议栈,描述一种利用VxWorks操作系统提供的钩子函数来开发实现NAT和NAPT的方法。
. O* |0 Q  _! m; @+ \  o7 E1 e0 B, J7 h( d& K% N
关键词:钩子函数 网络协议栈 vxworks操作系统培训  vxworks调试教程  nat设置技术  napt实现
( k1 k" n. L% ]; ~5 q1 e. h; k3 _2 m& A) D9 R
近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持到新一代IP协议Ipv6的出台。在众多的解决方案中,网络地址转换NAT(Network Address Translation)技术提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。
" t* b- Z4 R: J5 f- g" u4 V% ^% j4 |) ]9 M4 R
图1 NAT工作原理示意图4 N& C/ t* G: K2 X. b6 _& A

3 |4 P5 d9 @8 e' V6 A6 H/ a7 S    一、NAT技术. {8 T* a& @; a! w6 h4 p+ l9 P
    NAT技术的基本功能就是,用1个或几个IP地址来实现1个私有网中的所有主机和公共网中主机的IP通信。NAT技术可为TCP、UDP以及ICMP数据包提供透明转发。
( Y7 U( f/ J  N+ |4 [/ I) J, }0 M$ E" }  F  Y
    1.1 NAT工作原理
; Z4 ?4 j  l6 s; \  u    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)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。
# E9 R/ |( l( |; ^& q
* k$ U& T& q- `* y" x. q- }    1.2 NAPT技术由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT的公共IP地址数量的限制。为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(Network Address Port Translation)技术。
; @. N: |6 a# Y& ]  G/ y
- O# s; e3 b5 U! N# r6 [* h7 o0 p: h2 v# x5 u
    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的转换是完全透明的。5 C: x/ _" k* k! A4 O% f+ z- n$ N7 T
8 G0 M+ [# d( G% O9 l* B4 q

9 ^9 C& y& f" X! Z
' s9 M# k, ?3 B$ w1 W    二、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。
: n1 U3 w- G2 x& Q% q4 k
" p, }* L; {1 X8 `! s论文在VxWorks下设置、实现NAT/NAPT的方法来自www.66wen.com免费论文网 : v/ [) ?2 M. f$ d, d

( j- j: X+ ]% B/ y+ J
. d& s4 a) D0 Q5 A    三、向VxWorks网络协议栈加入NAT为了向VxWorks网络协议栈中加入NAT,必须实现2个基本操作:IP包的截获得IP包的处理。
3 Q% {' K( Y' E6 A* Z0 H5 R0 t" v
# I' A0 m5 \% v6 w2 @7 U   3.1 VxWorks下IP包的截获VxWorks网络协议栈在物理驱动层和IP层上分别提供了两类钩子函数:EtherHook和IpFilterHook。利用这两类钩子函数,可以实现对IP包的截获。
: z/ P0 X* H- |9 x7 U. k. D    (1)EtherHookEtherHook提供对以太帧的截获功能。它包括2个钩子函数:以太帧接收钩子函数EtherInputHook和以太帧发送钩子函数EtherOutPutHook。它们分别用函数EtherInputHookAdd和EtherOutputHookAdd安装。安装了这些钩子函数后,每当有以太帧被接收到时,函数EtherInputHook就会在该以太帧被提交给上层处理前被自动调用;每当有以太帧被发送时,函数EtherOutputHook会在该以太帧被发送前被自动调用。通过截获以太帖,可以达到截获IP包的目的。
4 U& m* m7 n0 @, h; j: }    (2)IpFilterHookIpFilterHook提供对IP包的截获功能。它只对应1个钩子函数,用函数ipFilterHookAdd就可以完成IpFilterHook的安装。安装了IpFilterHook后,每当有IP包被接收到时,函数IpFilterHook就会被自动调用,从而实现对IP包的截获。
8 b8 u1 w" k9 t* R# C. a' H8 M1 g& o7 v$ p- \' M! }$ f+ p
    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所示。
3 G. ]* i* x/ P- L/ r! u0 b0 T! ^    (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包也都用这个表项来处理。, z5 z, Q! V0 U# }2 o4 z
    (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网络协议栈。
3 m, w7 S: n+ J+ ~$ L8 A$ ?
( H5 ^4 Z$ P* [( A( b$ L' K/ o2 f0 r3 V
    (3)nat映射表的配置6 f# }/ E8 T/ N* Y8 }# W9 C5 C- x
    作为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-8-9 01:39 , Processed in 0.036179 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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