0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于VxWorks操作系统的网络协议栈实现NAT/NAPT威廉希尔官方网站 应用

电子设计 来源:单片机与嵌入式系统应用 作者:刘燕华,林立志 2020-09-10 17:29 次阅读

引言

近年来,随着Internet的迅猛发展,连入Internet的主机数量成倍增长。由于最初设计Internet的时候并没有考虑到需要支持这么大的规模,因而Internet使用的Ipv4协议中IP地址的长度选择了32位,它可以使IP包的格式很好地对齐;但是,目前IP地址的短缺已经成为Internet面临的最大问题之一。

为了解决IP地址短缺的问题,人们提出了许多解决方案,nternet能够支持到新一代IP协议Ipv6的出台。在众多的解决方案中,网络地址转换NAT(Network Address Translation)威廉希尔官方网站 提供了一种完全将私有网和公共网隔离的方法,从而得到了广泛的应用。

1 NAT威廉希尔官方网站

NAT威廉希尔官方网站 的基本功能就是,用1个或几个IP地址来实现1个私有网中的所有主机和公共网中主机的IP通信。NAT威廉希尔官方网站 可为TCP、UDP以及ICMP数据包提供透明转发。

1.1 NAT工作原理

NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。

基于VxWorks操作系统的网络协议栈实现NAT/NAPT威廉希尔官方网站
应用

图1 NAT工作原理示意图

如图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)转发到私有网。对于通信双方而言,这种地址的转换过程是完全透明的。

1.2 NAPT威廉希尔官方网站

由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT的公共IP地址数量的限制。为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(Network Address Port Translation)威廉希尔官方网站 。

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的转换是完全透明的。

2 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。

3 向VxWorks网络协议栈加入NAT

为了向VxWorks网络协议栈中加入NAT,必须实现2个基本操作:IP包的截获得IP包的处理。

3.1 VxWorks下IP包的截获

VxWorks网络协议栈在物理驱动层和IP层上分别提供了两类钩子函数:EtherHook和IpFilterHook。利用这两类钩子函数,可以实现对IP包的截获。

(1)EtherHook

EtherHook提供对以太帧的截获功能。它包括2个钩子函数:以太帧接收钩子函数EtherInputHook和以太帧发送钩子函数 EtherOutPutHook。它们分别用函数EtherInputHookAdd和EtherOutputHookAdd安装。安装了这些钩子函数后,每当有以太帧被接收到时,函数EtherInputHook就会在该以太帧被提交给上层处理前被自动调用;每当有以太帧被发送时,函数 EtherOutputHook会在该以太帧被发送前被自动调用。通过截获以太帖,可以达到截获IP包的目的。

(2)IpFilterHook

IpFilterHook提供对IP包的截获功能。它只对应1个钩子函数,用函数ipFilterHookAdd就可以完成 IpFilterHook的安装。安装了IpFilterHook后,每当有IP包被接收到时,函数IpFilterHook就会被自动调用,从而实现对 IP包的截获。

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所示。

(1)处理由内到外的IP包

由内到外的IP包指的是私有网主机通过NAT发送到公共网主机的IP包。它的源IP是私有IP,目的IP是公共IP。

当截获到1个由内到外的IP包时,NAT首先以IP包的源IP和源Port作为Real Src IP和Real Src Port的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的NAT IP和NAT Port替换IP包的源IP和源Port,而保持IP包的目的IP和目的Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给 VxWorks网络协议栈。

如果在映射表中没有搜索到对应的表项,NAT就会向映射表中添加1个新的表现。该表项中的Real Src IP和Real Src Port用IP包的源IP和源Port来填充;NAT Port用NAT分配的1个空闲Port填充。然后,根据新增加的表项,按照上面相同的步骤完成对IP包的处理。后续相同的IP包也都用这个表项来处理。

(2)处理由外到内的IP包

由外到内的IP包指的是从公共网通过NAT发送到私有用的IP包。它的源IP是公共IP,目的IP是NAT的公共IP。

当截获到1个由外到内的IP包时,NAT就以IP包的目的IP和目的Port作为NAT IP和NAT Port的匹配条件,在映射表中进行搜索。如果找到1个对应的表项,就用表项的Real Src IP和Real Src Port来替换IP包的目的IP和目的Port,而保持IP包的源IP和源Port不变。然后,重新计算TCP或UDP的校验和,就可把IP包归还给 VxWorks网络协议栈。

如果在映射表中没有搜索到对应的表项,则对IP包不作任何处理,直接归还给VxWorks网络协议栈。

(3)NAT映射表的配置

作为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映射表。相对于静态配置部分而言,动态配置部分的数据结构、数据组织和搜索算法的设计和实现的难度要大得多,关键是要实现一个高效的搜索算法。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IP
    IP
    +关注

    关注

    5

    文章

    1708

    浏览量

    149558
  • 服务器
    +关注

    关注

    12

    文章

    9164

    浏览量

    85431
  • 操作系统
    +关注

    关注

    37

    文章

    6827

    浏览量

    123334
收藏 人收藏

    评论

    相关推荐

    VxWorks操作系统使用指南

    1. VxWorks操作系统概述1.1.VxWorks 操作系统简介1.2.VxWorks操作系统
    发表于 07-20 13:10

    VxWorks嵌入式实时操作系统的采样数据怎么发送?

    随着科学威廉希尔官方网站 的不断发展,人们已经无法满足传统的网络通信方式,对于一种高性能的网络通信的呼声愈来愈高。VxWorks 是美国 Wind River SySTem 公司在1983年推出的一
    发表于 08-16 06:20

    如何向VxWorks网络协议加入NAT

    NAT的工作原理是什么如何向VxWorks网络协议加入NAT?在
    发表于 04-28 06:11

    如何在VxWorks实现NAT/NAPT的方法

    如何在VxWorks实现NAT/NAPT的方法
    发表于 03-29 12:25 19次下载

    实时操作系统VxWorks下的并口通信威廉希尔官方网站

    实时操作系统VxWorks下的并口通信威廉希尔官方网站
    发表于 03-29 12:26 11次下载

    实时操作系统VxWorks下PCI总线配置威廉希尔官方网站

    实时操作系统VxWorks下PCI总线配置威廉希尔官方网站
    发表于 03-29 12:26 19次下载

    基于网络处理器的VxWorks高层协议开发

    基于网络处理器的VxWorks高层协议开发
    发表于 03-29 12:27 21次下载

    基于VxWorks系统的简单网络管理协议实现

    基于VxWorks系统的简单网络管理协议实现
    发表于 03-29 12:28 21次下载

    嵌入式VxWorks网络协议的Mutiplexer接口及其使用方法

    嵌入式系统网络协议的灵活性在应用上是一个重要指标。介绍嵌入式实时操作系统VxWorks
    发表于 04-09 10:00 10次下载

    VxWorks实现NAT NAPT的方法

    介绍NATNAPT的基本概念和工作原理;结合VxWorks网络协议,描述一种利用
    发表于 05-15 14:35 12次下载

    VxWorks实现NAT NAPT的方法

    为了解决IP地址短缺的问题,人们提出了许多解决方案, 以使Internet能够支撑到新一代IP协议IPv6的出台。在众多的解决方案中, 网络地址转换NAT (Network Address Translation)
    发表于 11-06 14:35 17次下载

    VxWorks操作系统指南

    1.VxWorks操作系统概述 4 1.1.VxWorks 操作系统简介 4 1.2.VxWorks操作
    发表于 05-27 16:45 73次下载

    关于实时操作系统VxWorks下的并口通信威廉希尔官方网站

    关于实时操作系统VxWorks下的并口通信威廉希尔官方网站
    发表于 08-31 15:21 4次下载
    关于实时<b class='flag-5'>操作系统</b><b class='flag-5'>VxWorks</b>下的并口通信<b class='flag-5'>威廉希尔官方网站
</b>

    基于VxWorks操作系统下光纤通道通信软件的实现

    基于VxWorks操作系统下光纤通道通信软件的实现
    发表于 08-31 17:08 4次下载
    基于<b class='flag-5'>VxWorks</b><b class='flag-5'>操作系统</b>下光纤通道通信软件的<b class='flag-5'>实现</b>

    Linux网络协议实现

    网络协议操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统
    的头像 发表于 09-10 09:51 315次阅读
    Linux<b class='flag-5'>网络</b><b class='flag-5'>协议</b><b class='flag-5'>栈</b>的<b class='flag-5'>实现</b>