双协议栈技术范文

2024-06-30

双协议栈技术范文(精选6篇)

双协议栈技术 第1篇

1 Ipv4和Ipv6互通技术

1.1 BIS (Bump—In-the-Stack)

BIS机制允许在IPv4节点运行的不支持IPv6的应用程序能够与纯IPv6节点进行通信,要求在IPv4协议栈中插入三个特殊的扩展模块:域名解析模块、地址映射模块和报头翻译模块。其基本思想是当IPv4应用程序与纯IPv6节点通信时,将节点的IPv6地址映射成一个备用IPv4地址池中的IPv4地址。可以认为BIS是NAT-PT在主机节点IP协议栈的特例实现。

1.2 TR T (Transport R elay Translato) r

TRT机制和NAT-PT类似,但它是在传输层将一个IPv4的TCP或UDP连接与一个IPv6的TCP或UDP连接联系起来,也就是说是在传输层实现协议转换,而不是在网络层。TRT机制的每个连接都是真正的IPv4或IPv6连接,因此可以避免IP分组分片和ICMP报文转换带来的问题,但对一些存在内嵌地址信息的高层协议 (如FTP) ,同样需要和应用层的网关协作来完成协议转换。

1.3 DSTM (Dual Stack Transition Mechanism)

DSTM机制用于实现支持双协议栈但没有分配全球唯一IPv4地址的节点与纯IPv4节点的相互通信。其基本思想是当支持双协议栈的节点需要IPv4地址时,可以通过与DSTM服务器进行基于IPv6的通信(可采用扩展的DHCPv6)临时得到一个IPv4地址并反映到DNS中。对于没有IPv4内部路由体系的情况,支持双协议栈的节点使用IPv6路由体系,IPv4的数据报将会被封装到IPv6数据报中在节点内传输。

1.4 ALG (Application Level Gateway)

ALG机制是应用层网关,在IPv4中就已经广泛应用,典型的有HTTP协议的代理。显然,当一个ALG同时支持IPv4和IPv6协议栈时,就可以作为IPv4和IPv6的协议转换网关。ALG提供的每个服务都是单独的IPv4和IPv6连接,可以完全避免在IP层进行IP头标转换带来的一些问题,但ALG机制要求对每个应用编写单独的ALG代理,而且代理必须同时支持IPv4和IPv6两种协议,因此缺乏灵活性。

2 基本过渡技术分析

2.1 IPv4到IPv6过渡原则

1)现有的IPv4主机可以在任何时候升级,它本身的升级与其他主机和路由器的升级无关。2)仅使用IPv6协议的新主机可以在任何时候加入到网络中,并且不依赖于其他主机或路由器结构。3)现有的安装了IPv6协议的IPv4主机可以继续使用它们的IPv4地址,而不需要其他的地址。4)现有IPv4网络升级到IPv6,或部署新的IPv6节点,都只需要很少的设备改动。为了实现过渡,必须提供一些IPv4到IPv6的共存机制。

2.2 IPv4与IPv6共存机制

主要的IPv4与IPv6共存机制包括:双IP协议层、新DNS结构和IPv6穿越IPv4的隧道。

双IP层是TCP/IP协议集的一种实现方案,它既包括IPv4的IP层,又包括IPv6的IP层,用于IPv4/IPv6节点,使其既可以与IPv4节点通信,又可以与IPv6节点通信,或穿越IPv4的隧道进行通信。双IP层一般包含单一的传输层协议(TCP/UDP),即对于不同的网络层,只有一个传输层实现,但为了适应IP数据报头的变化,TCP也要做相应改变。

DNS结构的变化对于IPv4与IPv6成功共存是必须的。升级DNS结构包括为DNS服务器增加AAAA纪录和PTR纪录。IPv6穿越IPv4隧道,是指用IPv4报头来封装IPv6数据包,以使IPv6数据包可以穿越IPv4的网络结构。在IPv4报头中,IPv4协议字段的值为41,表示这是一个经过封装的IPv6数据包,同时源地址和目标地址字段的值为隧道端点IPv4地址。对于IPv6穿越IPv4的隧道,到目标的IPv6路经MTU通常比到目标的IPv4路径MTU小20。然而,如果IPv4路经MTU没有在每个隧道中保存,则IPv4数据包将要被中间路由器拆分,在这种情况下,经过IPv6穿越IPv4隧道的数据包,必须在发送时将IPv4报头中的不拆分标志设置为0。一些主要的IPv6穿越IPv4技术包括:6ove r4、6to4和ISATAP。

2.3 NAT———PT转换技术

NAT-PT是一种协议转换技术,用于解决IPv6与IPv4互通的问题。具体实现方法是在IPv6节点与IPv4节点通信时,借助NAT-PT协议转换服务器对网络层协议头进行IPv6-IPv4转换,以适应对端的协议类型。NAT-PT技术的原理与IPv4的NAT类似。差别在于,IPv4 NAT用于IPv4的公/私网地址转换,而NAT-PT则用于IPv6地址与IPv4地址的转换,但有一点两者极为相似,即NAT-PT与NAT都需针对不同业务的应用层网关 (ALG) 才能为特定的业务提供服务。通过部署NAT-PT,运营商可以建设一个对用户透明的网络,而业务则不论是IPv4还是IPv6,均可按照当前的规划发展,而不需特殊考虑IPv6业务的开展问题。这对于平滑地建设一个IPv6业务承载网来说,非常具有优势。

参考文献

[1]沙斐, 程莉译.IPv6详解, 北京:机械工业出版社, 2000.

[2]杜根远, 邱颖豫.基于隧道技术的IPv6迁移策略.中国有线电视, 2004.

双协议栈技术 第2篇

即使一些网络或联网世界的其余部分己升级为IPv6, 在很长时间内, IPv4仍将存在。到那时, 升级系统将需要保持与IPv4系统的互操作能力。随着时间的推移, 互操作的负担将由早期的实现者承担转为由传统系统的维护者来承担。任何情况下, 同时支持IPv4和IPv6的系统都是必要的。

2 双协议栈工作机理与应用模型

2.1 双协议栈工作机理

IPv4和IPv6协议是功能非常相同的处于网络层的协议, 对于两个协议来说, 其都是基于相同的平台。对比计算机网络中的TCP/IP体系结构来看。如果网络中一台计算机能支持IPv6协议又同时兼容IPv4协议, 那么该主机就可以既能与支持IPv4协议的主机通信, 又能与支持IPv6协议的主机进行通信, 双协议栈技术的工作机理就在于此。

2.2 双协议栈技术应用模型

2.2.1 Limited Dual Stack Model

在这种模型下, 服务器和路由器仍然是双栈的, 而不是服务器的主机只需要支持IPv6协议。

2.2.2 Dual Stack Model

Dual Stack Model模型下, 网络中的任意节点都必须是双栈的, 因此, 就不存在IPv6和IPv4之间的通信问题, 这种方法不能解决IPv4地址资源不足的问题。

对于目前的网络环境来说, 实现完全的双协议栈网络不需特殊配置, 业务开展非常方便, 对于IPv6的试验应用和业务也很有利, 是目前开展IPv6网络试验的重点之一。但是, 完全双协议栈的网络结构的投入很大, 特别是目前的接入网设备大部分仅仅支持IPv4协议栈, 而这些设备的升级很可能需要完全替换, 投资压力很大。为了顺利进行试验, 可考虑有限的双协议栈网络结构, 部分新增用户仅支持IPv6。在解决过渡问题时, 科学的选择双协议栈技术应用模型, 有利于保证IPv4/IPv6的平稳过渡。针对以上两种模型的特点, 以及综合考虑校园网的网络规模、应用特点, 我们最终选择了Limited Dual Stack Model作为解决过渡问题的基本模型, 实现了应用技术与实现代价的有效均衡。

3 Ipv4和Ipv6互通技术

3.1 BIS (Bump-In-the-Stack)

BIS机制允许在IPv4节点运行的不支持IPv6的应用程序能够与纯IPv6节点进行通信, 要求在IPv4协议栈中插入三个特殊的扩展模块:域名解析模块、地址映射模块和报头翻译模块。其基本思想是当IPv4应用程序与纯IPv6节点通信时, 将节点的IPv6地址映射成一个备用IPv4地址池中的IPv4地址。可以认为BIS是NAT-PT在主机节点IP协议栈的特例实现。

3.2 TRT (Transport Relay Translator)

TRT机制和NAT-PT类似, 但它是在传输层将一个IPv4的TCP或UDP连接与一个IPv6的TCP或UDP连接联系起来, 也就是说是在传输层实现协议转换, 而不是在网络层。TRT机制的每个连接都是真正的IPv4或IPv6连接, 因此可以避免IP分组分片和ICMP报文转换带来的问题, 但对一些存在内嵌地址信息的高层协议 (如FTP) , 同样需要和应用层的网关协作来完成协议转换。

3.3 DSTM (Dual Stack Transition Mecha-nism)

DSTM机制用于实现支持双协议栈但没有分配全球唯一IPv4地址的节点与纯IPv4节点的相互通信。其基本思想是当支持双协议栈的节点需要IPv4地址时, 可以通过与DSTM服务器进行基于IPv6的通信 (可采用扩展的DHCPv6) 临时得到一个IPv4地址并反映到DNS中。对于没有IPv4内部路由体系的情况, 支持双协议栈的节点使用IPv6路由体系, IPv4的数据报将会被封装到IPv6数据报中在节点内传输。

3.4 ALG (Application Level Gateway)

ALG机制是应用层网关, 在IPv4中就已经广泛应用, 典型的有HTTP协议的代理。显然, 当一个ALG同时支持IPv4和IPv6协议栈时, 就可以作为IPv4和IPv6的协议转换网关。ALG提供的每个服务都是单独的IPv4和IPv6连接, 可以完全避免在IP层进行IP头标转换带来的一些问题, 但ALG机制要求对每个应用编写单独的ALG代理, 而且代理必须同时支持IPv4和IPv6两种协议, 因此缺乏灵活性。

4 双协议栈工作方式分析

4.1 双协议栈节点

IPv6节点, 具备IPv6协议通信的同时, 具备完全的IPv4协议通信, 我们称之为“IPv4/IPv6节点”, 即双协议栈节点, 简称双栈节点。该节点既可以是主机节点也可以是路由器或其它通信节点。这里应该明确, 双栈节点是为解决IPv6节点在IPv4网络环境中通信 (或为保留IPv4协议功能) 的问题, 因而以节点具备IPv6协议通信作为先决条件。根据双栈节点是否用于隧道协议通信, 分为以下三类: (1) 纯双栈节点, 不具备隧道协议功能 (2) 双栈节点, 只具备配置隧道功能 (3) 双栈节点, 具有配置隧道、自动隧道功能。

当节点为纯双栈节点时, 对其分配的IPv4, IPv6地址没有特别的要求, 符合各自的网络规定即可;当节点具有自动隧道功能的时候, 应该为其分配IPv4兼容的IPv6地址。

4.2 接收数据包

双栈节点与其它类型的多栈节点的工作方式相同。链路层接收到数据段, 拆开并检查包头。如果IPv4/IPv6头中的第一个字段, 即IP数据包的版本代码是4, 则该数据包就由IPv4协议栈来进行相关操作;相应的, 版本代码如果是6, 则交给IPv6协议栈处理。如果建立了自动隧道机制, 则采用相应的技术将数据包重新整合为IPv6数据包, 由IPv6栈来处理。

4.3 发送数据包

由于双栈主机同时支持IPv4和IPv6两种协议, 所以当其在网络中通信的时候需要根据情况确定使用其中的一种协议栈进行通信, 这就需要制定双协议栈的工作方式。在网络通信过程中, 目的地址是作为路由选择的主要参数, 因而, 根据应用程序所使用的目的地址的协议类型对双协议栈的工作方式作出如下规定。

若应用程序使用的目的地址为IPv4地址, 则使用IPv4协议;假设节点A与节点B通信, A为双栈节点, 节点B支持IPv4协议。则双栈节点A工作方式, 使用IPv4协议与节点B通信。

若目的地址为IPv6地址, 且为本地在线网络, 则使用IPv6协议。IPv6使用邻居发现机制确定是否为本地在线网络。

若应用程序使用的目的地址为IPv4兼容的IPv6地址, 并且非本地在线网络, 则使用IPv4协议, 此时的IPv6将封装在IPv4中。

若应用程序使用域名作为目标地址, 则先从域名 (DNS) 服务器得到相应的IPv4/IPv6地址, 然后根据地址情况进行相应的处理。

随着IPv6网络规模的不断扩大, 这些工作方式必将不断相应的得到修改和有效补充。

参考文献

[1]张鸿.IPv6时代的域名系统.CNNIC研究开发部.2002.

双协议栈技术 第3篇

关键词:lwIP,μC/OS,TCP连接,应用层

0 引言

随着嵌入式系统设备的广泛应用,当设备需要与多个网络设备交互数据时,需要设备具有多网口、多连接功能,同时能够解析应用规约。目前嵌入式系统携带以太网通信功能,可采用商用操作系统的自带协议栈或者开发协议栈。前者对系统CPU的硬件性能要求较高[1],且一般为收费授权方式,使用成本较高。后者对开发人员的技术要求较高,开发周期较长。

lw IP协议栈作为一种开源、可稳定运行的网络协议栈,可移植于多种操作系统中。使用lw IP协议栈时,若采用新建任务方式管理新建TCP连接,存在两个弊端:新建TCP连接数目容易受操作系统任务数量上限限制;TCP连接关闭时需删除对应的任务,回收任务所占用的堆栈空间时,若处理不当,容易造成系统运行致命错误。

本文中提出一种基于lw IP协议栈双网口多连接的方案设计。方案中连接层以单任务循环遍历所有的TCP连接,规约层负责解析应用规约内容。

1 方案平台设计

1.1 硬件平台设计

如图1所示,方案硬件平台由四个部分组成:逻辑处理单元、外接网口单元、存储单元、时钟单元。逻辑处理单元中的CPU采用Atmel公司AT91RM9200芯片,操作系统选用抢占式的实时多任务操作系统μC/OS II系统[2],将lw IP协议栈移植入操作系统中。

外接网口单元共设计2个以太网口,其中一个(NET1)由AT91RM9200自带的以太网控制器外扩PHY芯片(LXT971)构成,另一个(NET2)由总线外扩的以太网控制器CS8900构成。当外部以太网通信帧发送至一以太网网口时,主CPU收到相应的中断信号并读取外部通信帧。

在存储单元中,平台外扩一片16位4 MB大小的FLASH(S29GL032M)存储程序,选用两片内存芯片组成32位16 MB大小的SDRAM作为内存,选用铁电存储芯片FM24CL64存放系统运行时的关键配置参数。时钟单元由RTC芯片向系统提供时钟信息。

图1 系统平台设计框图

1.2 μC/OS系统下的移植与实现

为了能够与不同操作系统或者无操作系统兼容,lw IP协议栈内部不使用特定的数据结构或者功能模块,而是通过模拟层接口函数实现协议栈与不同操作系统的兼容。在将lw IP协议栈移植入μC/OS操作系统时,利用μC/OS系统中的邮箱、信号量实现操作系统模拟层的功能[3]

图2 系统软件架构

图2显示了方案的软件架构,其中操作系统模拟层衔接μC/OS系统和lw IP协议栈。后者完成TCP/IP参考模型[4]中的运输层、网络层功能。为每个外部网络接口建立lw IP协议栈中的虚拟网络接口struct netif,构成链路层功能。

通信帧进入外接网口单元中的一个外部网络接口,经以太网控制器对通信帧处理,完成网口中断信号发出。逻辑处理单元接到中断信号后,调用网口中断处理函数对通信帧进行处理,将通信帧以消息发送至对应的消息处理任务。后者调用虚拟网络接口的通信帧输入函数处理通信帧,使通信帧进入lw IP协议栈内部处理流程。

方案在应用层中设计了连接层和规约层。连接层实现UDP报文的接收[5]、TCP连接的维护和TCP报文的收发,规约层完成接收报文的解析和回复报文的组帧功能。

1.3 协议栈内存管理

在系统运行过程中,系统与外部的TCP连接与断开将有lw IP协议栈内部邮箱、信号量不断的新建与回收。为了避免系统长时间运行后,出现内存碎片化,方案对协议栈中邮箱、信号量的内存管理使用专属内存块的方式。

以邮箱申请为例,首先申请内存块pc Queue Memory Pool,调用OSMem Create对pc Queue Memory Pool内存块进行初始化,返回数据块链表地址p Queue Mem。如图3所示,内存块被初始化成数量为MAX_QUEUES、大小为str Queu数据块链表。每个数据块头部为struct os_mem结构体,用于存储数据块链表当前可用数据块信息。当使用sys_mbox_new申请邮箱时,先从p Queue Mem中使用OSMem Get获取内存块。操作系统通过改变os_mem参数,使得可用数据块指针指向下一个数据块,可用数据块数量减1。sys_mbox_free释放邮箱时,调用OSMem Put函数将内存块放回内存池中,可用数据块指针指向当前数据块,可用数据块数量加1。信号量的申请和释放与邮箱方法类似。

图3 动态内存管理

2 应用层可靠性关键设计

方案中,应用层设计了连接层和规约层,连接层负责UDP广播报文的接收、TCP连接的维护和TCP报文的收发。规约层专注于具体规约处理,提高方案的扩展性,可用于不同的上层规约解析[6]

2.1 连接层可靠性关键技术设计

通常为了使每个TCP连接能够独立接收和发送数据,系统需为每个TCP连接申请独立的接收与发送内存区。当连接被关闭时,应对该连接的内存区进行回收。当各连接只需同步向外部上送相同信息时,每个连接的接收与发送内存区可采用代理线程设计模式[7],避免申请大量内存空间;当外部系统对系统通信数据需求差异较大,系统需为多个连接开独立的内存区用于接收和发送数据。以单次发送或者接收最多1500字节的数据为例,当TCP连接最大数目为10时,系统需约30 Kbyte的内存,内存消耗较大。本文提出一种基于单任务循环接收所有TCP连接的方法,此方法将节省内存开销。

首先,新建任务Newecho_thread()用于建立TCP连接,当任务接收到外部系统广播报文后,如果系统没有与此外部系统建立TCP连接,则调用lw IP内部函数新建TCP连接;其次,新建Tcpecho_thread()任务,循环遍历协议栈中tcp_active_pcbs链表,实现循环接收系统中所有处于稳定状态的TCP连接数据。

由于方案中是单任务接收所有TCP连接数据,将不必申请多个接收、发送数据内存区,节省了内存开销。此方案的弊端是多个TCP连接不能并行接收TCP连接数据,可以通过设置固定超时时间recv_timeout,减少每个TCP连接的阻塞时间。为了实现长连接功能,方案中采用两种策略维护活跃状态TCP连接,及时删除已失效TCP连接。

(1)设置lw IP Keepalive功能选项

从Ver1.3.0开始,lw IP协议栈提供Keepalive保活功能[8]。在lwipopts.h文件中将Keepalive宏开关LWIP_TCP_KEEP-ALIVE置为1。针对每个TCP连接,可以设置允许持续空闲时间keep_idle、保活探测消息的发送频率keep_intvl、保活探测消息判断连接断开的次数keep_cnt选项。

(2)检测TCP状态

lw IP协议栈以往版本内部函数返回值直接为指向相应数据的指针,此方法的弊端是运行过程中一旦出现错误,无法区分错误类型,不能对不同类型错误做出分类处理。lw IP从1.4.0版本开始修改内部函数、操作系统模拟层函数的返回值与形参结构。将返回值更改为函数执行错误类型,原先的函数返回值以函数形参方式输出。

图4为连接层TCP报文接收任务Tcpecho_thread接收数据结构示意图。任务运行过程中,通过对tcp_active_pcbs链表循环遍历,使用lw IP协议栈内部函数循环接收所有处于活跃状态的TCP连接。判断函数返回值,确定当前连接的运行状态,如果发现连接异常,则进入异常处理环节。如果接收连接正常,则将报文交予规约层解析。

图4 Tcpecho_thread任务接收数据流程图

2.2 规约层报文解析

在单任务接收所有TCP连接中,当规约层在处理外部通信帧时,连接层将处于阻塞状态,造成系统不能接收其他TCP连接。为了避免系统丢失其他TCP连接数据,方案中对规约层处理流程进行改进。

以电力行业继电保护设备信息接口配套标准DL/T667[9]为例,主站与从站之间一般处于非平衡传输工作模式。主站发出帧长较小,从站依主站命令类型回复自身系统运行中产生的大量有效信息数据。利用主站发出帧帧长较短特点,规约层可以以较小内存空间建立数据队列存储主站的多条通信帧和TCP连接信息。在系统运行过程中,规约解析函数依据先入先回原则对数据队列中通信帧解析并回复。规约层将待发送报文数据和TCP连接信息一并交予连接层,由连接层完成最终数据的发送。规约层处理完一帧数据后,将当前数据块标志Isused置为未用状态,开始处理下一个通信帧。

3 方案通信测试

3.1 ICMP协议返回时间测试

图5 Net1网口Ping命令返回时间

图6 Net2网口Ping命令返回时间

表1 ICMP协议返回时间

作为TCP/IP协议的一部分,ICMP(Internet Control Messages Protocol)即因特网信报控制协议主要用于测试网络连接量。使用该协议对系统进行测试可以反映方案的响应性能。在实际操作上,使用Ping命令测试系统与后台系统的端对端连通。图5和图6分别显示了依据本方案所设计的通信系统两个网口在测试过程中,Ping命令不同大小字节数据响应返回时间。表1显示了最大、最小和平均返回时间。

Net1网口在不同数据负载下,返回时间相对稳定,Net2网口对Ping命令的响应时间,随着负载通信帧大小的增加而增加。这主要因为系统从外部接收通信帧时,需要先存储在CS8900芯片片上内存,然后通过总线传递至主CPU。当系统往外部发送通信帧时,同样需经CS8900芯片片上暂存。随着搬移数据大小的增加,搬移时间也会随之增大。作为Net1的ARM芯片内部的太网媒体访问控制器,因为与内核关联度较高,在传输速度上,基本不受字节大小影响。

3.2 TCP连接稳定性测试

TCP作为一种面向连接的协议,可以从三个角度测试TCP连接的稳定性:

(1)TCP短连接测试

TCP短连接方式通常为client端向server端发起连接,server端接到请求后建立连接。双方交互数据后,则断开连接。本测试中服务器端为一台PC电脑,客户端为本方案系统。为了能够快速验证短连接建立的有效性,测试程序中省去双方交互应用层数据这一步。每当TCP连接建立成功后,PC电脑端自动断开连接并重新发起TCP连接。4小时不间断建立、断开TCP连接测试结果显示,系统能够满足TCP短连接要求,不存在系统运行一段时间后出现不能新建连接现象。这主要由于本系统lw IP协议栈邮箱、信号量的建立采用了专属内存块管理方法,每一次TCP连接的断开,该连接对应的邮箱、信号量所占用的内存块都得以及时回收。相反,如果采用从系统中直接申请内存用于建立邮箱和信号,经过半小时短连接测试,通过打开协议栈断言开关,显示sys_sem_new或者sys_mbox_new失败。

(2)TCP长连接测试

在长连接测试中,后台侧使用数字化变电站自动化系统PS6000+系统,测试时间设定为24小时,结果显示系统完全满足长连接可靠性要求。通过调整lw IP协议栈中Keepalive参数,可以实现快速识别网线断开或者后台侧崩溃现象。当网线重新插上或者后台重启后,系统又能快速实现与后台的重连。

(3)TCP瞬时多条报文测试

为了检验系统瞬时接收多条报文功能,利用以太网测试工具瞬时发送多条TCP命令。结果显示系统能够缓冲多条TCP命令,命令存储数目的大小与系统设定的TCP数据队列区大小相关。

4 结语

本文介绍了一种基于μC/OS-II系统的lw IP协议栈双网口多连接的设计方案。在介绍了软件系统的架构基础上,本文还介绍了邮箱、信号量的内存管理方法、单任务循环接收所有TCP连接的方法以及规约层的响应机制。实验结果表明,该方案稳定性高,可以使用较小的系统时间和内存空间实现嵌入式系统与外部的多连接通信。该方案已经应用于电力系统二次侧保护设备的对外通信模块中,满足了装置对低成本以太网通信的需求。

参考文献

[1]李劲君,张爱民,张杭.一种应用于数字化变电站的嵌入式TCP/IP协议栈[J].电力系统自动化,2010,34(10):97-100.

[2]Jean J Labrosse.嵌入式实时操作系统μC/OS-II[M].邵贝贝,译.北京:北京航空航天大学出版社,2007.

[3]马涛,白瑞林,石坚.Cortex-A8平台的μC/OS-II及lw IP协议栈的移植与实现[J].计算机应用与软件,2014,31(1):242-245.

[4]W Richard Stevens.TCP/IP详解[M].范建华,译.北京:机械工业出版社,2000.

[5]徐鑫,曹奇英.基于Lw IP协议栈的UDP协议分析与优化[J].计算机应用与软件,2011,28(3):246-249.

[6]周绍文.一种基于u IP协议栈的多应用层协议支持方案的设计[J].电力系统保护与控制,2010,38(9):109-112.

[7]蒋俊,钟伟胜.μC/OS-II和LWIP的并发服务器与代理线程设计模式[J].单片机与嵌入式系统应用,2014,14(12):42-44.

[8]胡俐蕊,王则林,胡传志.基于Lw IP的μC/OS-II网络应用程序设计方法[J].计算机应用与软件,2010,27(4):271-273.

双协议栈技术 第4篇

关键词:IPv4,IPv6,HSRP,双协议栈,平滑过渡

1 IPv4/IPv6双协议栈热备冗余网络在企业的应用前景

随着1998年IETF正式公布了RFC2460标准, IPv6协议就正式诞生了。IPv6具有2的128次方个IP地址, 是IPv4地址的2的96次方倍, 解决了IPv4地址空间的枯竭的问题。

IPv6具有极强的安全性和可靠性, 在扩展头中增加了身份验证头AH和封装安全性数据头 (ESP) , 大大降低了数据被篡改的可能;IPv6增强了对流的支持, 流标签的引入为整合、优化语音、视频和数据网络提供了更好的条件, 同时高QoS特性使得数据传输质量更加高效;IPv6还增强了对移动性主机的内在支持等功能。

将IPv6协议优秀的新特性和功能及早应用于企业, 同时又能很好地兼容IPv4应用, 增强企业核心网络性能, 采用IPv4/IPv6双协议栈热冗余模式建设企业核心网络对企业计算机应用就有着非常重要的意义。

2 IPv6的新特性

2.1 全新的地址管理方案

地址管理方案中, 首先改变了地址拥有方式, IPv4中, 地址是用户拥有, IPv6成了ISP拥有。其次IPv6还包括IPv4中没有统一解决方案的地址解析协议 (ABP) 和可达性检测等等。

IPv6还提供了地址自动配置机制, 实现了主机的即插即用功能。为了保证主机地址的唯一性, IPv6定义了重复地址检测过程, 每当生成地址时, 均反复执行生成和检测过程, 直到得到唯一的地址。

2.2 报文的安全传送

IPv6继承了IPv4的报文传送技术, 在IPv6地址设计中增强了接口ID设置, 这种ID设置提供了确认对方物理终端的技术条件, 同时在其扩展头中增加了身份验证头AH和封装安全性数据头 (ESP) 。

身份验证头AH首先为IP数据报提供强大的完整性服务和身份验证, 为IP数据报承载内容验证数据和将实体与数据报内容相链接;其次在完整性服务中使用公共密钥数字签名算法, AH还可以为IP数据报提供不可抵赖服务以及通过使用顺序号字段来防止重放攻击。再有, AH还可以在隧道模式或透明模式下使用, 既可用于为两个节点间的简单直接的数据报传送提供身份验证和保护, 也可用于对发给安全性网关或由安全性网关发出的整个数据报流进行封装。

封装安全性数据头通过加密提供数据报的机密性, 通过使用公共密钥加密对数据来源进行身份验证, 通过由AH提供的序列号机制提供对抗重放服务, 以及通过使用安全性网关来提供有限的业务流机密性。

2.3 对流的支持

IPv6在设计时就充分考虑了对流的支持, 改变了IPv4对流的处理即需要路由器判断源和目的IP地址, 又需要判断传输控制协议或用户数据报协议的端口号的复杂操作过程。在IP6的IP头的格式里, 有专门的20bit流标签域。主机发送报文时, 流标签里填入相应的流编号, 路由器收到流的第一个报文时, 以流编号为索引建立处理上下文, 流中的后续报文都按上下文处理, 因此IPv6对流的处理方式要高效得多。

同时IPv6定义了流的优先级, 分别支持不同的业务需求。通过对语音、视频、数据等不同类型的数据流进行合理、有效的优先级设置, 为企业建设和优化语音、视频、数据三网合一网络平台提供了远优于IPv4网络的解决方案。

3 IPv6采用的关键技术

3.1 应用支持IPv6的技术

IPv6继承了IPv4网络中大量应用协议, 比如:FTP、Telnet、SMTP、HTTP、NFS、DNS等, 它们会在IPv6中继续使用。只有少部分如:IPv4 socket接口需要改为IPv6 socket接口, 而协议本身机制可以基本不做改动。

3.2 IPv6过度技术

为了保护在IPv4上的大量投资, IPv6应该能与IPv4的主机和路由器共存。逐步演进、逐步部署、地址兼容、降低费用等内容便成了IPv6设计时的指导思想。为了实现这一目标, IPv6主要过度技术有十多种, 而基本的过度技术就是双协议栈和隧道。

1) 双协议栈技术

IPv4/IPv6双协议栈技术, 就是使IPv6网络节点具有一个IPv4栈和一个IPv6栈, 同时支持IPv4和IPv6协议。两者都应用于相同的物理平台, 以及承载相同的传输层协议TCP或UDP。

2) 隧道技术

隧道 (Tunnel) 是指将一种协议报头封装在另一种协议报头中, 这样一种协议就可以通过另一种协议的封装进行通信。IPv6隧道是将IPv6报头封装在IPv4报头中, 这样IPv6协议包就可以穿越IPv4网络进行通信。

4 组建具有热备冗余功能的IPv4/IPv6双协议栈网络

4.1 IPv6网络建设策略

IPv4到IPv6的升级切换不可能一蹴而就, 必须循序渐进。因此在基于IPv6的特点以及公司目前IPv4网络的应用情况, 在建设IPv6网络时做了以下几点:不影响现有基于IPv4协议的所有网络应用;保持现有网络的层次结构;确保计算机终端同时对IPv4和IPv6网络的访问能力;满足今后平滑实现IPv4网络到IPv6网络的过渡;通过IPv6网络的建设, 进一步提高企业核心网络的性能。因此, IPv6网络建设中采用了热备冗余功能和IPv4/IPv6双协议栈技术。

4.2 网络拓扑

IPv6网络核心建设完成后形成图1所示的结构示意图, 核心交换机A与核心交换机B用两对光纤连接实现热备份互联基础, 两台交换机与下一层交换机分别互联, 形成双链路, 在启用HSRP及相关配置后实现双机热备路由功能。

配置IPv4/IPv6网络需要完成如图2所示步骤。

4.3 双协议栈的启用

为了实现IPv4/IPv6双协议栈功能, 在网络接口设置中必须同时启用两种协议。现有交换机IPv4已经启用, 启用IPv6协议及配置节点地址步骤如下:

4.4 路由实现

全局模式下IPv4使用IP routing启用路由功能, IPv6则使用IPv6 unicast-routing启用路由功能。IPv6是对IPv4的革新, 尽管大多数IPv6的路由协议都需要重新设计或者开发, 但IPv6路由协议相对IPv4只有很小的变化。在静态路由方面与IPv4也基本相同, 只需为节点配置地址并作为客户机网关, 即可实现网段间的路由。

全局模式下启用IPv6路由及相关配置

4.5 Windows2003中IPv6 DNS配置

(1) 安装DNS服务及IPv6 DNS插件;

(2) 配置IPv6 DNS

a、打开了DNS配置向导;

b、在导航窗格中, 单击用于你的服务器在DNS服务器对象, 用鼠标右键单击服务器对象, 然后单击配置DNS服务器以启动配置DNS服务器向导, 步骤见图3。

4.6 IPv6客户机配置

通常情况下IPv6客户机在启用IPv6协议后, 地址会从最近的网络节点自动获取, 无需用户手动配置, 但是对于像服务器这类需固定IP地址的则需手动配置, 以便于访问。以Windows Server 2003为例, 步骤如下:

1) IPv6协议栈的安装

在“开始”—>“运行”处执行IPv6 install命令

2) IPv6地址设置

在“开始”—>“运行”处执行netsh命令, 进入系统网络参数设置环境netsh>, 执行interface ipv6 add address“本地连接”2001d0a8:3207::e002命令设置地址;或者在开始-->“运行”处执行ipv6 adu 4/2001:d0a8:3207::e002。

3) IPv6默认网关设置, 在netsh>标识后输入

interface ipv6 add route::/0“本地连接”2001:d0a8:3207::e001 publish=yes命令即可;或者在在“开始”-->“运行”处执行IPv6 rtu::/0 4/2001:d0a8:3207::e001。

4.7 IPv6网站的访问

用户在实际使用中, IPv4和IPv6同样使用域名网址http://www.yunnan-copper.com进行访问, 使用IP地址访问时有所不同, IPv6协议需要使用带中括弧方式来访问, 例如:http://[2001:d0a8:3207::e001]。

4.8 热备份路由器协议配置

网络核心采用热备份路由器协议技术 (HSRP:Hot Standby Router Protocol) , 系统中使用两台路由交换机满足HSRP多台路由器的条件, 组成一个“热备份组”, 这个组形成一个虚拟路由器。在任一时刻, 一个组内只有一个路由器是活动的, 并由它来转发数据包, 如果活动路由器发生了故障, 将选择备份路由器来替代活动路由器, 但是在本网络内的主机看来, 虚拟路由器没有改变。所以主机仍然保持连接, 没有受到故障的影响, 这样就较好地解决了路由器切换的问题。配置步骤如图4。

1) 热备份交换机通道配置

在交换机B中进行同理配置。

2) VLAN冗余组配置

在交换机B中进行同理配置。

5 结束语

1) 通过双机热备份路由器协议的使用, 公司网络稳定性能得到很大提高, 更好地满足了目前公司数十套业务系统全天候不间断的运行要求, 很好地支持了公司的发展;

2) 为公司正进行的全面信息化及电子商务的建设提供了高效、安全、可靠和无阻塞的信息处理网络平台;

3) 通过对IPv6技术的应用, 它拥有的全新网络安全架构技术使企业业务数据的传输安全得到了进一步保证;

4) IPv6对流的充分支持, 加快了企业对流业务应用系统的开发, 为建设高效的企业语音、视频、数据三网合一网络平台起到了重要作用;

5) 该系统的成功实施为公司业务系统今后及早融入IPv6网络环境打下了基础, 为公司ERP及电子商务系统更快、更好地融入新的网络信息平台做好了充分准备。

6) IPv6网站的建成, 已成为国家IPv6应用试验典范。

参考文献

[1]张宠科, 苏伟.IPv6路由协议栈原理与技术[M].北京:北京邮电大学出版社, 2006 (7) .

[2]高发桂, 郭学理, 王路群.IPv6安全特性的分析与应用研究[J].计算机应用与软件, 2002 (11) .

[3]杜治国, 肖德琴, 徐东风.基于双栈技术的IPv6校园网络设计[J].计算机工程与设计, 2007 (11) .

双协议栈技术 第5篇

1 状态机简介

状态机(有限状态机)是一种具有离散输入输出系统的模型。任何时刻他都处于一个特定的状态,状态的转换依赖于系统所接受的事件。当在某状态下有事件发生时,系统会根据输入的事件和当前的状态做出反映,从而决定如何处理该事件以及是否转换到下一状态[1]。

状态的触发事件通常由外部信号来完成,当有效的触发事件发生时,便进入下一状态(当然也可以不发生状态转移),同时完成本状态的具体任务,直到所有状态完成,再回到初始状态。当某一状态出现异常时,也返回初始状态,等待下一触发事件的出现,如此反复循环。

状态机通常有两种表达方式:状态表和状态图。

在图1所示简单状态图中,当状态机处于状态1时,完成动作1;事件1可以触发状态机跳转到状态2,以执行动作2;同样,事件2也可以触发状态2的转移,从而又回到状态1。图1所示状态和转移都很简单,真正的状态机比他要复杂的多。

对应图1的状态表如表1所示。其中,括号内为当前状态动作和下一状态,空网格表示在此状态下,此事件无效,即不能触发状态的转移,当然也不执行任何动作。

2 状态机的实现

在高级编程语言(如C,C++)中状态机的典型实现主要有:嵌套的Switch语句;状态表;面向对象状态设计模式。其他技术几乎是前面3种方式的组合[2]。

Switch/Case语句是一种内联性很强、病态耦合的编程技术,是一种简单初级的逻辑表达式,因此不易做到模块化、灵活的可扩充性和可移植性,至于鲁棒性就更差了。现代软件技术讲究松耦合、可移植、可快速扩充,并要求安全可靠,而状态表的实现正是基于这一思想而发展的。当要在状态机中增加新的状态与控制逻辑,只需在状态表中修改即可,甚至可以动态修改,C++的指针完美地支持这一点。在状态变化不是很复杂的情况下,这是一种非常可取的方法。

3 数据采集系统PC端数据通讯协议栈的状态机实现

在笔者所编写的土壤渗流实验数据采集系统PC端软件中,很好的利用了状态机技术来完成数据通讯协议栈的处理。此实验数据的采集由下位机(单片机)和上位机(PC机)共同来完成。对于PC端软件来说,正确的数据接收是后续工作的前提和保障。因此,有必要对接收到的每一帧消息进行检测和校验,即进行数据的预处理。只有符合通讯协议的数据才进行后续处理,不符合通讯协议的数据将丢弃掉,并且通知下位机数据出错。下面将结合笔者参与开发的数据采集系统,论述状态机技术在PC端软件中的编程应用:

3.1 上下位机软件的串行通讯协议

3.1.1 PDU协议

PDU数据单元分为两类:指令类PDU和数据类PDU。指令PDU用于在通讯设备之间传输控制信息和状态信息;数据PDU用于在通讯设备之间传输采集数据。本协议PDU格式如下:

3.1.2 物理层(PHY)

物理层接口的连接部件为D型9针连接器,其电平定义为标准RS 232电平标准,上下位机通过RS 232串口实现通讯。

3.1.3 逻辑链路子层(LLC)

逻辑链路子层的主要工作就是提供帧处理服务与差错控制服务。

帧处理服务分为两种级别——数据帧服务和消息帧服务。数据帧服务控制数据帧的比特数,停止位数;消息帧服务提供消息帧头和消息帧尾来封装消息帧,以实现发送与接收的消息同步,正确界定消息帧。在本通讯协议中采用消息帧,用ASCII字符“:”标记消息帧头,以连续的ASCII字符CR+LR标记消息帧尾。

LLC层还提供消息帧差错控制服务:在本协议中采用LRC校验算法。通讯时,发送方按LRC算法生成LRC校验码,按照高位在前低位在后的顺序附加在原始的消息帧尾部,最后以“:”和CR+LF对消息进行封装。接收方按LRC算法将接收到的LRC校验码与在本地运算得到的校验码进行对比,从而判断接收到的数据的正确性。

3.1.4 ADU格式

上位机(PC机)与下位机通讯协议的ADU格式如下:

3.2 状态表的制定

按照本协议,上位机对接收到的每一帧消息进行校验。其中功能代码,数据,LRC码在一帧消息中处于一定的先后位置,有相应的动作(如保存,校核等)与之对应,可以视为不同的状态,另外,消息帧头、帧尾等也视为不同的状态。而对于每一个接收的字符,可以视其为触发信号。如当接收的数据帧中出现数字时,视其为DATASIG信号,当接收的数据帧中出现回车(CR)字符时,视其为CRSIG信号等,从而通过不断接收字符来触发状态的行为和转移,使状态机循环工作下去。在分析数据通讯协议的基础上,通过抽象,可将每帧消息分为如表2所示几个状态及触发信号。

在表2中顶行列出了信号(触发或事件),最左边一列是状态。各网格的内容是转换,他表示为{动作,下一状态}。例如,在BEGIN状态中,当接收到COLONSIG信号时,将会调用DoClear()这一函数,从而完成一些数据复位工作,同时,也触发状态到下一状态——MAINCODE状态。而对于其他触发信号,状态机状态不变,仍在BEGIN状态,且什么动作也不做。COLONSIG信号对应数据帧的“:”字符,即当接收到“:”字符后,就向状态机发出一COLONSIG信号,使状态机开始运行。而对接收的其他字符,在没有收到“:”字符之前,协议要求不做处理。表中的其他动作解释如下:

3.3 状态表的实现

上位机软件用Visual C++ 6.0 编写,C++语言基于面向对象编程(OOP)思想,而状态机的核心机制是行为继承,这与OOP模式很相似,超状态的行为能很容易地被子状态所继承。鉴于此,可以利用C++的类来表现状态行为,即将状态行为嵌入到C++类中,从而在Visual C++平台上可以很好地运行状态机。本状态表的实现就是利用这一机制,父类封装了抽象的状态转换和当前状态行为,子类实现具体的状态行为和状态转换。详见如下核心代码。

父类StatusClass类核心代码如下:

3.4 状态类的调用

笔者已经将状态行为封装至C++类当中,所以在程序中调用时只须定义一个StatusClass类的对象即可运行状态机了。同样,随着对象的销毁,状态机的生命周期也就结束。在本软件中,数据的通讯协议栈处理是在单独一个线程(预处理线程)中完成的,而此线程的触发依赖于数据的接收。故当有数据帧接收时便会使预处理线程恢复,从而启动状态机,实现对数据帧的校验。状态类调用核心代码如下:

4 结 语

实践证明,将状态机技术巧妙地运用于数据通讯协议栈处理程序中,收到了很好的效果,不但可以避免大量的Switch/Case语句,使程序简洁,而且提高了程序的扩展性能,便于维护和修改。同时,由于状态机的行为嵌入到了C++的类当中,可以视其为一个类,因而具有类的所有特征,可以被继承,移植性能好,具有实用价值。

摘要:在数据通讯软件中,上位机(PC机)数据通讯协议栈的编写工作通常由Switch/Case分支语句来完成。分支语句是一种简单初级的逻辑表达式,因此不易做到模块化,扩充性能和可移植性能都不理想,因而引入了状态机技术。通过将通讯协议栈抽象为有序的不同状态和行为,再嵌入到C++类中,可模拟状态机实现此通讯处理,在Visual C++6.0平台上运行可靠,稳定性好,并且状态行为具有可继承性。

关键词:FSM,数据采集,协议栈,分支语句

参考文献

[1]魏先民.有限状态机在嵌入式软件中的应用[J].潍坊学报,2007,6(4):24-25.

lwip协议栈的移植 第6篇

lwip协议栈是由瑞士的计算机科学家Adam Dunkels带头及一众科学家共同费时费力悉心研发的免费的, 容易移植的, 源代码公开的简化的TCP/IP协议栈。该协议栈在有无操作系统的设备上都可以运行。

该协议栈的优点是极大的保存了TCP/IP协议的主要功能, 但是又不像TCP/IP协议栈那样对系统资源的占用比较大。而是只需要极小的RAM和ROM的内存就可以使Lwip运行起来。而低端的嵌入式平台正是需要这样的协议栈, 所以Lw IP就广泛的应用在了嵌入式设备上。

虽然lwip协议栈占用的内存很小, 但是它还是照旧实现了TCP/IP的主要功能和协议, 而且调用接口的回调方式也相当高效。

二、Lw IP系统适配层

lwip把与操作系统有关联的主要函数及其数据类型打包封装, 使得lwip的移植变的简单且容易操作, 具体的步骤则是Lw IP直接调用系统适配层的接口和数据结构, 舍弃掉特定的操作系统函数。操作系统中的定时器, 消息机制, 进程的操作这些频繁使用的服务都会借由操作系统适配层, 被Lw IP统一调用。所以想要把Lw IP协议移植与别的操作系统, 说白了就是把该操作系统与Lw IP的操作系统适配层匹配的一个过程。操作系统适配层主要如下:

1) 定时时钟协议是操作系统适配层提供的一个最主要的协议, 触发函数得的调用由时钟协议控制, 时间不能少于200ms, 时间一到函数马上被调用。

2) 操作系统适配层的进程同步机制只提供了信号量方式。所以要想解决某一个操作系统不支持信号量的问题, 就得需要模拟信号量, 这就用到了临界区或互斥锁机制

3) 消息的传递是由Lw IP中的操作系统适配层中的“邮箱”机制来实现传递的。邮箱机制中的邮寄操作, 提取操作是两个最主要的操作.邮寄操作最大特点是进程不阻塞, 操作系统适配层把邮寄到邮箱中的消息一一排入消息队列中, 直到另外一个进程提取这个消息并且处理它。

三、Lw IP应用接口

原始接口、序列接口和Socket接口是lwip提供的三种应用程序接口供上层的应用程序适用。

1. 原始接口。

函数回调接口是原始接口的另外一种叫法, 协议栈内部的回调函数是用来实现整个通讯的流程的, 并且任务间的互相切换在该流程中不会出现, 所以同一个任务过程中应用程序和lwip协议栈时钟会同时运行, 所以原始接口这种高效的接口使用方式将应用程序和lwip协议栈能够紧紧的结合在一起。

原始接口由于其代码简单, 运行时间短, 占用系统资源是三种接口中最少的, 所以应用也是相对比较广泛。但是由于简单所以对开发者的要求比较高, 开发者必须相当熟悉Lw IP的内部处理流程和机制, 对初接触的人来说难度很大, 而且回调接口中的应用程序的代码也不太容易看懂, 所以一般不选用该接口.但是如果嵌入式系统可用资源特别紧张, 那也就只能选择原始接口才能达到要求。

2. 序列接口。

“Sequential API”是序列接口的另一种叫法, 该接口调用lwip服务的方式是按序来调用。它比起原始接口则是多了对消息的转发, 存储, 处理等一系列操作,

消息机制主要是用来传递应用程序和lwip协议栈之间的数据传递。所以一般为了适合多个网络应用, 在设计应用程序的序列接口时, 都是用多任务的思想来设计的。这样设计的好处是当其中一个程序的服务任务中断的时候就不会影响其他服务程序, 因为网络应用都很复杂, 多任务的思想应该贯穿始终。这样在一些需要同时处理多个连接或者并发的服务程序时候、序列接口常常被作为首选。

3. Soeket接口。

当想要为应用程序提供标准的操作接口时, socket接口就会成为首选接口。该接口又是序列接口的进一步打包封装, 与序列接口功能类似。

该接口在三个接口中是占用和运行开销系统内存最大的一个接口, 又因为嵌入式系统本身内存空间就小, 而能使用lwip协议栈的嵌入式系统更加不会有剩余的可供随意使用的内存空间, 因此若不是为了方便移植或者快速开发, 一般不会选用该接口。

综上所述, 这三种接口所需要的代码空间和运行时间各不相同, 原始接口效率最高, 但使用起来比较麻烦;Socket接口使用最方便, 但运行效率最低;序列接口在使用方便性和执行效率上介于原始接口和SOCKET接口之间。如果序列接口与Socket接口被应用确认为不需要时, 就可以进一步释放资源空间。

四、本章小结

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【双协议栈技术】相关文章:

μIP协议栈07-19

协议技术08-02

技术保密协议08-28

技术三方协议09-06

技术分包合作协议07-27

制氮技术协议08-19

技术三方协议范文06-02

技术总监协议范文06-02

协议还原技术范文06-09

布袋除尘技术协议07-02

上一篇:青少年的健康成长下一篇:啤酒企业