微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 详解:NAT原理及在VxWorks上的实现

详解:NAT原理及在VxWorks上的实现

时间:10-13 来源:21ic 点击:

构当中。该结构除保存数据内容外,还保存了管理数据内容的信息结构以及接口信息。

  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种情况,我们这里也简单地直接归还给协议栈进行处理。

  3.3 NAT 映射表及timer管理

  3.3.1 NAT 映射表

  对于每一个需要进行地址翻译的IP数据包,内核必须知道如何翻译它。NAT 映射表就是用来解决这个问题的。NAT 映射表中记录有足够标识一个连接的所有信息:协议类型、源地址、源端口、目的地址、目的端口、NAT地址、NAT端口等。通过IP数据包中携带的信息可以在NAT表中找到最匹配的一项。在实现当中,我们采用表1的结构来表示一个映射表项。

  3.3.2 为什么NAT 映射表项需要设置timer

  为了避免通过NAT进行通信的主机突然崩溃后,出现残留的映射表项占据系统资源的情况。在每个NAT映射表项中,我们使用了一个软件定时器来指示这个映射表项是否超时。如果在一段时间内这个表项没有被访问过,从而导致定时器超时,NAT将清除这个表项,以减少系统资源消耗。在这个NAT的实现过程中,为了使TCP/IP协议栈能够正常工作,针对不同的协议以及协议的不同阶段,我们使用了不同的默认超时值。如表2所示。

  3.4 NAT 映射表管理

  3.4.1 NAT 映射表的创建、查找及删除

  在NAT的实现过程当中,如何快速地寻找一个IP包在NAT中是否有对应的映射选项,需要一个高效的数据结构和快速的查找算法。

  在实现当中,我们选用采用索引查询的散列表来作为存储NAT映射表项的数据结构。使用协议类型值、内部网络地址和端口来计算散列值,并结合映射表项的标志来确定需要做地址翻译的IP数据包。

  如果当前的IP数据包是外出的IP数据包,但是没有匹配到一个合适的映射表项,那么NAT将建立一个新的映射表项,添加到散列表中。

  如果当前的IP数据包是来自于外部网络的,要么能够匹配到一项合适的映射表项,要么目的端口已经被配置为端口转发(在这种情况下,NAT将依据端口转发配置,在NAT映射表中静态添加一个入口),否则,将不会改变这个IP数据包。

  为了避免已经出现异常的连接继续占用系统资源,在每个映射表项的定时器超时后,其回掉函数将删除存储在散列表中的对应的NAT映射表项。

  3.4.2 如何互斥地访问NAT映射表

  在NAT映射表的处理和映射表项超时处理中,都需要对映射表进行查找、添加和删除操作。为了安全地访问映射表,我们必须同步对NAT映射表的访问。在实现当中,我们使用了VxWorks提供的二进制信号量来保护对NAT映射表的操作。

  3.5 TCP session state和TCP sequence number管理

  3.5.1 TCP SYN/FIN/RST 状态

  对于一个TCP连接,如果NAT收到一个带有RST标志的TCP数据包,我们将NAT映射表中对应表项的定时器超时值置1,那么这个映射表很快将被删除。如果收到一个FIN数据包,那么就重新设置对应表项的定时器超时值为120s。否则,我们设置对应映射表项的定时器超时值为5min。

  3.5.2 TCP sequence number 调整

NAT的原理就是通

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top