协议双栈技术在网络通信系统开发中的设计与应用
2014-10-13牛晓妍
牛晓妍
(长治医学院 计算机系,山西 长治 046000)
1 引言
随着互联网的快速发展,传统的互联网协议IPv4存在路由选择效率低、IP地址匮乏、服务质量差等诸多问题。针对以上情况,下一代互联网协议IPv6做了较大改进,并新增加了一些特性,例如改进的路由结构、庞大的地址空间、完善的服务质量保证等等。
但是现有的网络结构都是以网际互联协议IPv4为基础构建的,所以IPv4向IPv6的转变将是一个漫长的过程,在这一过程中IPv4与IPv6两种协议将会长期共存。因此当前不仅要考虑Ipv4向Ipv6的过度,而且应研究如何在IPv4和IPv6两种协议共存的情况下,更好、更安全地保证网络可靠的通信传输。
2 IPv4向IPv6的过渡技术简介
目前已有的过渡技术[1]有三种:
(1)双协议栈(Dual Stack):这种技术就是在同一节点上同时支持IPv4协议栈和IPv6协议栈。
(2)隧道技术(手动隧道、自动隧道、6to4,6over4):基于IPv4隧道的IPv6是由路由器将IPv6的数据分组封装入IPv4数据包中,以此来实现在现有的IPv4网络中IPv6节点和IPv4节点之间的IP通信。这个过程比较复杂,分为打包?解包和隧道管理[2]75-783个步骤。
(3)NAT-PT(Network Address Translation-Protocol Translation):其核心是地址和协议的转换。
3 双协议栈的运行机制及工作过程
3.1 IPv4/IPv6双协议栈体系模型
双协议栈是指在同一个网络结点同时支持IPv4和IPv6两种协议栈。因为IPv4和IPv6在形式、功能等方面如出一辙,所以IPv6是IPv4的改进版本[3]101-111。IPv4和IPv6这两种网络层协议基于相同的物理平台,而且加载于其上的传输层协议(TCP/UDP)也极其相似,所以无论从理论上,还是实践上都可以实现支持双协议栈的结点既能与支持IPv4协议的结点通信,又能与支持IPv6协议的结点通信。双协议栈的概念模型如图1所示:
图1 双协议栈模型
在双协议栈体系模型中,大部分采用了节点技术完成IPv4向IPv6过度[4]。节点模型如图2所示。
图2 节点模型
4 IPv4/IPv6双栈的通信系统的设计
系统的主体结构采用socket技术,并提供client/server通信模式。采用socket函数来进行IPv4和IPv6下的网络编程存在很多弊端,如:IPv4协议下的网络软件系统在向支持IPv6协议的网络系统的升级[5]过程中存在一些问题。针对这个现实难题,本文提出了解决方案:首先设计和实现一组网络通信功能的接口;然后分别在IPv4和IPv6下使用socket函数设计和实现网络通信功能,最终屏蔽了IPv4和IPv6在网络编程方面的差异。系统的主体结构程序实现流程图如图3所示。
图3 主体结构程序实现流程图
4.1 客户端模块的设计
该模块使用类继承的思想实现网络通信中的客户端功能部分。设计如下:首先设计并实现通用的抽象接口父类;然后分别在IPv4和IPv6下使用socket函数继承此抽象接口父类并实现通信功能的具体接口类。
下面具体举例说明父类Client的实现代码。
4.2 服务器端模块的设计
该模块同样采用类继承的思想[6]来实现网络通信中的服务器端的功能部分。设计如下:首设计并实现通用的抽象接口父类;然后分别在IPv4和IPv6下使用socket函数继承此接口类,并且使用统一的接口格式实现支持IPv4和IPv6通信功能的接口类。
IPv4服务器端接口类的设计与CSrvL-stv4Thread继承自父类CSrvThread,它提供的接口方法StartUp()包含了父类CSrvThread所规定的主要接口方法。
IPv6服务器端接口类的设计与IPv4非常相似。IPv6服务器端通信功能的类CSrvLstv6Thread继承自父类CSrvThread,其提供了接口方法startUp(),依照IPv6下的socket函数,其具体实现为:初始化Winsock,绑定本地地址并开始侦听?实现原理与IPv4下的接口方法startUp()相同,只是socket函数在两种协议下的使用有所不同。具体流程为:首先调用WSAStartup()函数初始化Winsock,再调用getaddrinfo()解析服务器地址,接着创建socket准备侦听;然后调用bind()将该socket绑定到本地;最后调用listen()开始侦听并调用freeaddrinfo()释放解析服务器地址时获得的地址列表。具体流程与IPv4稍有区别。值得注意的是,还需要根据所开发软件的实际需求,设计与之相配套的接收线程类,该类也需要处理少量与IPv6协议相关的细节。
5 应用实例
使用本文提出的设计思想及设计方法,使面向双栈的应用编程变得相对简单,不必过多地考虑和处理涉及IPv6协议的细节,就能使用与IPv4协议下的类似方法来编制程序,提高了开发效率?应用实例代码如下:
通过实例分析可以得到如下结论:在已开发的网络软件的原有功能的基础上,添加IPv6通信功能模块并扩充顶层通信模块,就可以实现双栈通信。
6 结束语
随着基于IPv6的应用需求日益增大,IPv6取代IPv4是网络发展趋势,IPv6和IPv4共存是实际问题。本文结合具体实例分析和阐述了IPv4/IPv6双栈通信的优点,并在设计的模块中提出了实用性较强的方法。
[1]黄伟,刁海南等.一种嵌入式IPv4/IPv6双栈协议的实现[J].微计算机信息,2008,(24):30-32.
[2]杨涛等译,Steve Shah著,Linux管理员指南[M].机械工业出版社,2005.
[3]周逊著,IPv6—下一代互联网的核心[M].电子工业出版社,2003.
[4]安燕,方滨兴.基于SOCKET协议的IPv4/IPv6转换器[J].高通信技术,2002,(11):30-35.
[5]邹建峰.基于双栈的 IPv6翻译方案即实现[J].计算机工程与应用,2003,(2):23-24.
[6]张爱华等.IPv6协议下域名系统的扩展与实现[J].微机发展,2004,(7):79-81.