您的位置 首页 汽车

详解:NAT原理及在VxWorks上的完成

Internet的最初设计,并没有考虑到需要支持目前这样庞大的互联网,因此在IPv4的设计当中,IP地址仅使用了32bit来标识网络中的一个节点设备,虽然这很

Internet的开始规划,并没有考虑到需求支撑现在这样巨大的互联网,因此在IPv4的规划傍边,IP地址仅运用了32bit来标识网络中的一个节点设备,尽管这很好地处理了IP数据报的对齐问题,但随着Internet的迅猛发展,加上一些不合理的地址分配办法,现在IP地址已严峻缺少,IP地址缺少已成为现在Internet所面对的最大问题之一。

为了节省IP地址资源,IETF扔掉了传统的地址分类办法(把IP地址空间人为地区分为A、B、C、D类地址的办法)。开始运用在RFC 1918中指定的CIDR(Classless Inter-Domain Routing)。一同为了处理IP地址耗费的问题,在RFC 1631中提出了运用NAT来处理共用IP地址拜访Internet的问题。

1 NAT 概略

NAT是把一个网络中运用的IP地址翻译成能被另一个网络辨认的IP地址。一个网络被指定为内部网络,另一个为外部网络。一般,一个公司把自己的本地内部网络地址映射到一个或多个大局外部IP地址,并把收到的包中的大局IP地址解说成本地IP地址。这也有助于安全,由于每个出去和进来的恳求都有必要经过一个翻译进程,这是一个认证恳求或把它与曾经恳求匹配的进程。

NAT包含在路由器中,一般也是防火墙的一部分。网络办理员创立一个NAT表,用它来完结大局到本地和本地到大局地址的映射。NAT也能够和战略运用路由一同运用。NAT能够静态界说,也能够依据IP地址池动态进行。

NAT的描绘详见RFC 1631。它评论了NAT与CIDR的联系,这是一个处理IP地址耗尽的办法。NAT经过差异公共IP地址和私有IP地址而减少了对公共IP地址的需求。CIDR把公共IP地址集合在一同,减少了IP地址的糟蹋。

2 NAT 原理

在传统的规范的TCP/IP通讯进程中,一切的路由器只是是充任一个中间人的人物,也便是一般所说的存储转发,路由器并不会对转发的数据包进行修正,比方关于以太网接口,路由器除了将源MAC 地址换成自己的MAC 地址以外,路由器不会对转发的数据包做任何修正。NAT(Network Address Translate,网络地址翻译)恰恰是出于某种特殊需求而对数据包的源IP地址、意图IP地址、源端口、意图端口进行改写的操作。

从原理的视点能够将NAT分成了两种类型,即源NAT(SNAT)和意图NAT(DNAT),望文生义,所谓SNAT便是改动转发数据包的源地址,所谓DNAT便是改动转发数据包的意图地址。

3 NAT 的VxWorks 完结

3.1 VxWorks的底层接口概略

3.1.1 VxWorks MUX 接口层

在VxWorks中,TCP/IP协议栈运用MUX接口去和数据链路层通讯,MUX接口的意图是阻隔数据链路层和网络层。MUX接口之上是网络协议层,比方TCP/IP、 MUX_PROTO_OUTPUT、 MUX_PROTO_SNARF等协议,在MUX之下为网络硬件的驱动程序。MUX接口层供给一套接口去完结协议和驱动注册,协议和驱动之间数据接纳、发送,Multicast地址拜访,MUX ioctl等作业。整个层次结构如图1所示。

3.1.2 VxWorks 中对IP数据包的截获

要在VxWorks中完结NAT,有必要完结两个根本操作:IP数据包的截获与IP数据包的假装处理。

关于VxWorks协议栈来讲,NAT的存在是通明的。所以,要完结NAT的功用,有必要在VxWorks网络协议栈处理数据包之前截获数据。要完结这一点,VxWorks为咱们供给了两类钩子函数,截获以太帧的EtherHook和截获IP数据包的IpFilterHook。

其间EtherHook又包含EtherInputHook和EtherOutputHook,别离用来截获接纳和发送的以太帧。用户能够经过EtherInputHookAdd和EtherOutputHookAdd来别离进行装置。

而IpFilterHook供给对IP数据包的截获,它只对应一个钩子函数,用IpFilterHookAdd来进行装置。当收到一个IP数据包的时分,IpFilterHook会被主动调用,然后到达对IP数据包截获的意图。

比照两种接口,EtherInputHookAdd将调用MuxBind去增加一个MUX_PROTO_SNARF协议,这样能够得到进入MUX接口层的一切数据包。而由IpFilterHookAdd装置的IpFilterHook,不属于MUX接口层,只是用来截获IP数据包,而不会接纳到非IP数据包。

鉴于以上的差异,咱们运用IpFilterHookAdd函数装置的IpFilterHook来截获IP数据包比较适宜,参见图2。

3.2 NAT假装战略

3.2.1 网络接口

网络接口是VxWorks的一个内核方针,它是由网络驱动程序注册的。它在内核中用于标识网络设备的驱动程序,包含着该网络设备特有的特点、装备及操作接口等。而这个驱动程序能够驱动一个特定类型的网络芯片,比方I82557,RTL 8139等,也能够驱动一些其他类型的设备,比方经过Serial Port、CompactPCI Bus、Loopback等。在VxWorks中,接纳到的IP数据被保存在一个mBlk的结构傍边。该结构除保存数据内容外,还保存了办理数据内容的信息结构以及接口信息。

3.2.2 哪些IP数据包需求假装

在做NAT地址映射时,咱们需求判别对哪些IP包进行假装(NAT改换)。咱们经过下面这个实例来进行解说(见图3)。

在这个实例中,网关经过网络接口If0连接到局域网中,并经过If1连接到Internet上,一同,网关启用NAT功用。此刻,坐落局域网中的主机A假如想拜访Internet上10.2.4.0/24网段的主机B,最好的办法是经过网关上的NAT。

那么,详细哪些包需求进行NAT改换呢?咱们先依据源地址和意图地址来区分网关或许收到的包的类型。

(1)接口If0收到的IP数据包,意图地址为网关If0接口的IP地址。

(2)接口If0收到的IP数据包,意图地址为网关If1接口的IP地址。

(3)接口If0收到的IP数据包,意图地址非网关任一接口的地址的私网IP地址。

(4)接口If0收到的IP数据包,意图地址非网关任一接口的地址的公网IP地址。

(5)接口If1收到的IP数据包,意图地址为If1接口的IP地址。

(6)接口If1收到的IP数据包,意图地址非If1接口的IP地址。

关于前面3种状况,NAT不进行任何处理,直接交给VxWorks网络协议栈,由协议栈来做进一步的处理。

关于第4种状况,契合NAT改换的需求,NAT将改动原IP包的源地址为网关的外出口地址,一同挑选网关该接口未分配的端口来修正原IP包中的源端口,并增加该记录到NAT映射表内。最终把IP包送到If1接口,然后发送到意图主机。

关于第5种状况,咱们将收到的IP数据包送到NAT处理。经过查找NAT映射表,决议是否将其方针地址转换为LAN中的某一个地址,仍是不做任何处理,直接归还给协议栈。关于第6种状况,咱们这儿也简略地直接归还给协议栈进行处理。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/322256.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部