详解:NAT原理及在VxWorks上的实现
过修改过往IP数据包的内容,来达到伪装IP数据包的目的。
在对部分基于TCP的应用协议(如FTP)的数据包进行NAT变换时,如果由于应用程序支持模块改变了TCP数据包的内容,导致数据包的长度发生变化,那么,为了使当前的TCP连接能够继续正常连接,就必须重新调整TCP的序列号(见图4)。
TCP连接的序列号是在两个方向上进行调整的。调整的原则如下:
如果外出的数据包长度减小,那么当前外出的TCP数据包的序列号将减小,反之则增加。
对于收到的来自于外部网络的ACK 序列号,就要相应地增加和减小了。
这里我们需要注意,由于VxWorks没有使用Real Time来初始化TCP连接的初始序列号,而是使用一个固定的值来初始化它,导致每次重启之后VxWorks的第一次TCP连接都会以相同的序列号开始递增。由于VxWorks的TCP/IP协议栈的这种特征,我们在接收到TCP连接的第一个TCP数据包(带有SYN标志,没有ACK标志)时,要重新初始化已经匹配的NAT映射表项,避免因为TCP连接序列号调整出错。
3.6 端口转发功能
3.6.1 为什么需要端口转发功能
如果有某个处在Internet上的主机想访问NAT服务器后的某个主机,这个连接必须已经被记录在NAT映射表中,但由于某些安全原因,NAT仅仅对由内部网络发起的网络连接有效。当外部IP数据包进入允许NAT功能的接口时,如果NAT找不到合适的映射表项,IP数据包将交给VxWorks协议栈来处理。
为了使NAT能够处理这种由外部网络首先发起的网络连接,NAT允许手工配置一些NAT的映射表项。这项功能就叫端口转发。
3.6.2 端口转发实现过程
由外到内的IP包指的是从公网通过NAT发送到私有网络的IP包。它的源IP是公共IP,目的IP是NAT的公共IP。当截获到一个由外到内的IP包时,NAT就以IP包的目的IP和目的Port加上包的协议类型作为NAT映射表项的匹配查询条件进行搜索。如果找到一个对应的表项,就用表项的Real Src IP和Real Src Port来替换IP包的目的IP和目的Port,而保持IP包的源IP和源Port不变。然后,重新计算TCP或UDP的校验和,再计算IP头的校验和,最后把IP包重新归还给VxWorks的网络协议栈。如果在映射表中没有搜索到对应的表项,则对IP包不作任何处理,直接归还给VxWorks网络协议栈。
3.7 NAT配置接口
为了使NAT能够适应某些变化,我们在实现过程当中加入了对NAT的配置接口,主要对以下两方面需要进行配置。
NAT接口配置:配置在那个允许NAT功能的网络接口上。这个接口是和外部网络相连的,有唯一的全局IP地址。
端口转发映射表配置:配置NAT可以对那些由外部网络发起的网络连接进行地址转换,以及如何进行地址转换。
3.8 NAT如何处理IP分片
NAT本身还应该考虑IP数据包的分片。但是在分片的IP数据包中,除了第一个IP数据包带有源、目的端口信息以外,后续的IP分片都没有端口信息。
这样,IP数据包分片的这个特征给我们的NAT处理带来了很多不便。因此,在这次的实现过程中,我们的NAT实现暂时不支持分片的IP数据包。
3.9 NAT的测试
如图3所示,主机A通过NAT访问主机B上的HTTP服务器,主机B通过手工配置在NAT上的映射表项访问主机A上的TFTP服务器。
整个过程非常良好,TCP包和UDP包以及Port-Forward功能也成功得到了验证。
4 NAT的未来
NAT这项技术主要是为了解决IP地址空间不足。在NAT功能的支持下,内部网络可以使用一个公共的IP地址访问外部网络,因此,它很好地隐藏内部网络的网络拓扑结构,也使网络更安全。由于这些特点,NAT也常常是作为Firewall的重要部分一起提供的,但是它并不是Firewall。由于NAT可以带来一定的安全性,相信即使在IPv6的时代,它还是能够继续应用。
- 人机界面技术有哪些?(08-10)
- Imagination的智能家居关键模块及解决方案(02-03)
- 人机界面技术大盘点(02-21)
- Imagination拆卖MIPS,究竟是什么原因?(08-29)
- SafeNet与风河创献VxWorks嵌入式系统货币化方案(04-23)
- 基于ARM和VxWorks实现自动彩信发送的嵌入式系统(04-29)