刘生寒,卢有飞,肖建毅
(1.广东电网公司信息中心,广东 广州 510000;2.广州供电局有限公司,广东 广州 510000)
IPv6是针对目前普遍使用的Internet协议IPv4的不足而提出的。IPv4的地址空间匮乏和可扩展性差等问题严重制约了因特网的发展。与IPv4相比,IPv6在地址空间、安全性、移动性及服务质量等多方面都有较大的改进。随着互联网的发展,从IPv4过渡到IPv6已是大势所趋。IPv6对我国的工业化和信息化发展具有重要意义。我国是世界上的移动通信大国、电力大国,对IP地址有着巨大需求,但在现实发展中却面临IP地址匮乏的严重问题。为此,工信部在“十二五”规划中统筹考虑了资源、产业、应用、建设、安全等方面的因素,全面推动下一代互联网IPv6的部署。
从IPv4到IPv6的过渡包括两方面的工作,一方面是由IPv4网络逐步改造成IPv6的网络,这主要是网络基础设施的改造升级[1];另一方面就是互联网上的应用系统从IPv4到IPv6的改造和迁移[2]。在IPv6的发展和建设过程中,势必会面临现有应用系统从IPv4到IPv6的改造迁移工作,根据B/S架构应用系统(以下简称“应用系统”)的网络特性,迁移至IPv6下的关键技术主要涉及运行环境的配置升级、应用层协议相关代码改造以及Socket编程方法的重构。目前国内外已有大量关于IPv4到IPv6过渡迁移方案的研究,但多数只停留在网络层,而应用层中应用系统的改造与迁移研究则尚存空白。因此,本文从应用层角度出发,重点对IPv6条件下应用系统运行环境和Socket编程进行研究,探讨应用系统从IPv4到IPv6的改造方法及迁移流程,并对该迁移方案的可行性进行验证,为IPv6网络环境下应用系统的改造迁移提供科学的依据。
B/S架构下应用系统从IPv4到IPv6的迁移过程中所涉及的关键技术主要包括运行环境的配置及Socket编程方法改造。
一个典型B/S架构应用系统运行环境,包括底层操作系统、数据库、中间件(应用服务器)及应用系统本身。因此对IPv6网络条件下的应用系统进行改造、迁移,需要从操作系统、数据库、中间件等对IPv6的支持上进行研究,确定B/S架构下应用系统改造、迁移及开发思路,为后面制定可行的、通用的及具有前瞻性的技术指引提供理论支持。
1.1.1 操作系统
通过分析和研究,发现目前主流操作系统均已支持 IPv6,包括 Windows、Linux、Unix 等,具体版本支持情况如表1所示。
表1 支持IPv6的操作系统版本
虽然各种操作系统间支持IPv6的实现方式不尽相同,程度也存在差异,但这已充分表明了在操作系统产业已充分意识到IPv6是大势所趋,并着手为未来的IPv6网络应用进行准备。值得提出的是,微软对IPv6的支持虽然在业界并不处于领先位置,但却具有至关重要的意义,它将IPv6技术在真正意义上带到了商用化的程度。
以IBM AIX 5L V5300-006和Red Hat Enterprise Linux(RHEL)5.5为例,分析研究其配置支持IPv6的方法。
(1)IBM AIX 5L V5300-006。
首先,通过root授权,运行autconf6-i en1命令来启用IPv6。若在系统启动时自动启用IPv6,需要编辑/etc/rc.tcpip并取消以下两行的注释:
接着,运行startsrc-s ndpd-host,开启网络发现协议(Network Discovery Protocal)。然后通过添加-A到start/usr/sbin/autoconf6""来编辑/etc/rc.tcpip,如下所示:
此时,AIX系统上的IPv6无状态自动配置或DHCP配置已完成。如果要设置静态IPv6地址,需要发送smit tcpip命令。在以太网接口上配置完IPv6后,运行ifconfig命令来验证IP地址分配是否成功。
(2)Red Hat Enterprise Linux(RHEL)5.5。
首先,配置RHEL支持IPv6需要人工编辑配置文件。系统本身没有提供除启用或禁用IPv6外其他可用于管理设置的图形界面。所有编辑必须通过命令行界面(Command-Line Interface,CLI)完成。如要启用IPv6协议,需编辑/etc/sysconfig/network文件,加入以下的行:
然后,在桌面点击System(系统)—Administration(管理)—Network(网络),为指定的接口启用 IPv6。还可以通过编辑接口的配置文件来完成这些设置,加入以下的行:
最后,设置完成以上内容后发送“service network restart”命令重启网络,系统将根据所处网络中是否存在DHCP服务器提供IPv6地址或其他相关信息来进行无状态自动配置或DHCP配置。如要配置静态地址,需编辑/etc/sysconfig/network-scripts/ifcfg-eth1文件。更改了配置文件后,同样需要运行“service network restart”命令重启网络设备。运行route-A inet命令从路由表可以查看到成功配置后的路由信息。
1.1.2 数据库
通过分析和研究,发现目前常用的数据库均已支持IPv6,包括对IPv6地址链接和访问的支持以及对IPv6数据存储的支持,如表2所示。
表2 支持IPv6的数据库版本
以Oracle 11g Release2为例,分析研究其配置支持IPv6的方法。
Oracle 11g Release2提供对纯IPv6环境的支持。当默认主机名与TCP协议同时在listener.ora中配置时,Oracle Net Listener将监听所有网络接口上的传入连接请求。当使用主机名时,可以在listener.ora中将IP参数指定为ADDRESS的一部分,以决定需要监听哪些IP地址,支持的值包括FIRST、V4-ONLY、V6-ONLY。如果使用了默认主机名而未指定IP参数,此时就可以监听对应于该主机名的所有IP地址。
客户端和中间层应用程序使用11g Release 2版Oracle Client Stack(客户端堆栈),IPv6地址和解析成IPv6地址的主机名可以作为TNS Connect Address的HOST参数使用。TNS Connect Address可以通过使用任意受支持的Oracle Net命名方法来获得。客户端将试图连接DNS返回的所有IP地址,直到成功建立了连接或试遍了所有地址。
1.1.3 中间件
通过分析与研究,目前主流中间件(应用服务器)均已支持IPv6,具体支持版本信息如表3所示。
表3 支持IPv6的中间件版本
以Apache Tomcat为例,分析研究其配置支持IPv6的方法。
使用Listen指令更新httpd.conf文件,该指令指示Apache监听特定的IPv4和IPv6地址或端口。默认下它将响应所有 IP接口的请求,包括 IPv4和IPv6。为主机分配 IP 地址:74.86.48.99(IPv4)和2607:f0d0:1002:11::4(IPv6)。
首先,输入以下代码来打开 httpd.conf配置文件:
#vi httpd.conf
接着,使服务器接受 74.86.48.99、2607:f0d0:1002:11::4和端口80上的连接:
然后,保存并关闭文件,并重启/重载Apache,这时Apache配置已完成并生效。
还可以使用如下netstat命令来验证Apache是否能在双栈模式下正常工作:
1.2.1 Socket通信
Socket(套接字)是TCP/IP网络环境下进行通信的重要工具[3]。Socket在计算机中提供通信端口,可以通过该端口与任何一个具有Socket接口的计算机通信。应用程序通常通过Socket向网络发出请求或者应答网络请求。使用Socket进行通信的方式有3种类型:(1)流式Socket(SOCK_STREAM):提供可靠的、面向连接的通信流,针对面向连接的TCP服务应用;(2)数据报Socket(SOCK_DGRAM):定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的且不保证可靠、无差错,对应于无连接的UDP服务应用;(3)原始Socket(Raw_Socket):protocol赋值为零,允许程序使用底层协议如IP或ICMP,它功能强大但使用较为不便,主要应用于一些协议的开发[4]。
Socket开发原理为:在服务器,使用ServerSocket监听指定的端口,端口可以随意指定(建议使用大于1024的端口,因为1024以下的端口通常属于保留端口,在一些操作系统中不能随意使用),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。在客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常会临时地、动态地分配一个大于1024的端口[5]。
1.2.2 IPv4 和 IPv6 下 Socket编程的对比
IPv4网络环境下,网络编程主要依靠Socket连接。在客户端,其基本步骤为:创建一个Socket,使用Socket连接服务器,然后通过TCP或UDP协议进行数据读写。如果把这套方法移植到IPv6网络环境下,则需要在原有基础上引入新的协议族、数据结构以及地址域名转换函数等,具体差异包括:
(1)地址结构。
(2)创建方法。
差别在于IPv4中,第一个参数为AF_INET,而IPv6中,第一个参数为AF_INET6。
(3)字符串地址和网络序IP地址的相互转换。
IPv4中字符串地址转换为网络序IP地址使用函数 inet_aton,而 IPv6使用 inet_pton。
(4)主机名和地址的转换。
IPv4使用gethostbyname()和gethostbyaddr(),而IPv6通用采用的是getaddrinfo()和getnameinfo()。
1.2.3 基于IPv6的Socket编程实现
网络应用系统基本上都是利用Socket套接字处理数据通信,需要分别为服务器端和客户端建立套接字。下面以一简单的通信程序为例说明如何创建服务器端套接字和客户端套接字,关键代码如下:
(1)服务器端。
①创建服务器端套接字。
(2)客户端。
①创建客户端套接字。
图1 IPv6网络环境下的应用系统迁移流程图
根据应用系统在网络环境方面的基本特性,IPv6网络环境下的应用系统迁移改造流程如图1所示,其相关工作步骤具体如下:
(1)应用系统所处的运行环境配置及部署。运行环境主要有:操作系统、数据库和中间件(应用服务器)3个。不同的网络环境下,对于每个应用系统都离不开3个运行环境的配置,否则就不能正常运行。
(2)对应用系统本身的改造。该部分主要包括Socket编程和应用层协议相关代码改造[6]。Socket是TCP/IP网络环境下进行通信的重要工具,应用程序需要通过Socket向网络发出请求或者应答网络请求。另外,应用系统迁移到IPv6下,需要对其应用层网络协议的相关代码进行改造。
(3)对应用系统进行测试及修正。应用系统测试方法主要包括业务功能测试、协议联通测试(FTP、SNMP、SMTP/POP3、Telnet、RIP、NFS 和 DNS 等协议)和数据处理测试(增、删、改、查询)3种。通过测试找出IPv6网络环境下应用系统的Bug,并根据日志管理文件,对迁移流程中出现缺陷的具体位置进行修改。
为了验证迁移方案的可行性,本文在IPv4网络环境下开发一个B/S架构下的测试改造用例系统,测试改造用例的相关详细信息如表4所示。
表4 测试改造用例的详细信息表
通过对上述测试用例系统进行改造,并迁移到IPv6网络环境下进行测试。首先,在业务功能测试方面,用户管理、登录系统、Email、日志管理等功能均可以正常实现;其次,在网络协议互通测试方面,FTP、SNMP、SMTP/POP3、Telnet、RIP、NFS 和 DNS 等协议均能够互通,而联通速度会稍小于IPv4网络环境下;然后,在数据处理测试方面,对系统中的数据进行增、删、改、查询操作,没有发现缺陷;最后,查看日志管理文件,对迁移流程中不易通过测试发现的报错小问题进行调试与修正。总体来看,迁移改造流程在逻辑上具有一定的合理性,可以适用于IPv6下一般应用系统的迁移改造。
本文从应用层角度来探讨从IPv4迁移到IPv6下的应用系统改造的关键技术及其具体实施流程,并对测试改造用例进行多次调试,实现网络协议互通,同时保证业务功能和数据的完整性及可操作性,并通过了实例验证。这就表明了该迁移改造方法及流程具有较强的可行性,可以为目前实际迁移工作提供科学的参考依据。但随着IPv6发展的不断深入,现有的迁移方法及改造流程可能将不能满足未来IPv6网络环境下应用系统的迁移,应该会加入更多的考虑因素,应用系统的迁移改造技术也需要得到进一步的修正。
[1] Garyfalos A,Almeroth K,Finney J.A comparison of network and application layer multicast for mobile IPv6 networks[C]//Proceedings of the 6th ACM International Workshop on Modeling Analysis and Simulation of Wireless and Mobile Systems.2003:58-65.
[2] Blanchet M.Migrating to IPv6:A Practical Guide to Implementing IPv6 in Mobile and Fixed Networks[M].John Wiley& Sons,2006.
[3] Chen W E,Su C Y,Lin Y B.NCTU SLT:A socket-layer translator for IPv4-IPv6 translation[J].IEEE Communications Letters,2005,9(10):865-867.
[4] RFC 5014,IPv6 Socket API for Source Address Selection[S].
[5] RFC 2133,Basic Socket Interface Extensions for IPv6[S].
[6] RFC6384,An FTP Application Layer Gateway(ALG)for IPv6-to-IPv4 Translation[S].
[7] 覃德泽.IPv6的特性及应用前景研究[J].计算机科学,2004,31(2):55-58.
[8] 梁剑.应用程序向IPv6的迁移技术[J].电脑知识与技术,2010,6(18):4929-4930.
[9] 王浩.IPv4与IPv6相互转换技术研究[J].计算机与数字工程,2010,38(1):114-117.
[10] 哈渭涛.IPv6下协同入侵检测系统的设计与实现[J].河南科学,2010,28(11):1466-1468.
[11] 李彦,陈卓,付敏.混合底层拓扑网络中的P2P流媒体模型研究[J].计算机应用研究,2012,29(9):3437-3440.
[12] 陈旭生.信息系统的质量管理研究[J].中国新通信,2012,14(15):18.
[13] 刘海峰.安全操作系统若干关键技术的研究[D].北京:中国科学院,2002.
[14] 孙伟强,蒋磊,王大玲.基于IP协议的透明网络信息安全系统的研究与实现[J].价值工程,2011,30(23):14.