劉生寒,盧有飛,肖建毅
(1.廣東電網(wǎng)公司信息中心,廣東 廣州 510000;2.廣州供電局有限公司,廣東 廣州 510000)
IPv6是針對(duì)目前普遍使用的Internet協(xié)議IPv4的不足而提出的。IPv4的地址空間匱乏和可擴(kuò)展性差等問(wèn)題嚴(yán)重制約了因特網(wǎng)的發(fā)展。與IPv4相比,IPv6在地址空間、安全性、移動(dòng)性及服務(wù)質(zhì)量等多方面都有較大的改進(jìn)。隨著互聯(lián)網(wǎng)的發(fā)展,從IPv4過(guò)渡到IPv6已是大勢(shì)所趨。IPv6對(duì)我國(guó)的工業(yè)化和信息化發(fā)展具有重要意義。我國(guó)是世界上的移動(dòng)通信大國(guó)、電力大國(guó),對(duì)IP地址有著巨大需求,但在現(xiàn)實(shí)發(fā)展中卻面臨IP地址匱乏的嚴(yán)重問(wèn)題。為此,工信部在“十二五”規(guī)劃中統(tǒng)籌考慮了資源、產(chǎn)業(yè)、應(yīng)用、建設(shè)、安全等方面的因素,全面推動(dòng)下一代互聯(lián)網(wǎng)IPv6的部署。
從IPv4到IPv6的過(guò)渡包括兩方面的工作,一方面是由IPv4網(wǎng)絡(luò)逐步改造成IPv6的網(wǎng)絡(luò),這主要是網(wǎng)絡(luò)基礎(chǔ)設(shè)施的改造升級(jí)[1];另一方面就是互聯(lián)網(wǎng)上的應(yīng)用系統(tǒng)從IPv4到IPv6的改造和遷移[2]。在IPv6的發(fā)展和建設(shè)過(guò)程中,勢(shì)必會(huì)面臨現(xiàn)有應(yīng)用系統(tǒng)從IPv4到IPv6的改造遷移工作,根據(jù)B/S架構(gòu)應(yīng)用系統(tǒng)(以下簡(jiǎn)稱“應(yīng)用系統(tǒng)”)的網(wǎng)絡(luò)特性,遷移至IPv6下的關(guān)鍵技術(shù)主要涉及運(yùn)行環(huán)境的配置升級(jí)、應(yīng)用層協(xié)議相關(guān)代碼改造以及Socket編程方法的重構(gòu)。目前國(guó)內(nèi)外已有大量關(guān)于IPv4到IPv6過(guò)渡遷移方案的研究,但多數(shù)只停留在網(wǎng)絡(luò)層,而應(yīng)用層中應(yīng)用系統(tǒng)的改造與遷移研究則尚存空白。因此,本文從應(yīng)用層角度出發(fā),重點(diǎn)對(duì)IPv6條件下應(yīng)用系統(tǒng)運(yùn)行環(huán)境和Socket編程進(jìn)行研究,探討應(yīng)用系統(tǒng)從IPv4到IPv6的改造方法及遷移流程,并對(duì)該遷移方案的可行性進(jìn)行驗(yàn)證,為IPv6網(wǎng)絡(luò)環(huán)境下應(yīng)用系統(tǒng)的改造遷移提供科學(xué)的依據(jù)。
B/S架構(gòu)下應(yīng)用系統(tǒng)從IPv4到IPv6的遷移過(guò)程中所涉及的關(guān)鍵技術(shù)主要包括運(yùn)行環(huán)境的配置及Socket編程方法改造。
一個(gè)典型B/S架構(gòu)應(yīng)用系統(tǒng)運(yùn)行環(huán)境,包括底層操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件(應(yīng)用服務(wù)器)及應(yīng)用系統(tǒng)本身。因此對(duì)IPv6網(wǎng)絡(luò)條件下的應(yīng)用系統(tǒng)進(jìn)行改造、遷移,需要從操作系統(tǒng)、數(shù)據(jù)庫(kù)、中間件等對(duì)IPv6的支持上進(jìn)行研究,確定B/S架構(gòu)下應(yīng)用系統(tǒng)改造、遷移及開(kāi)發(fā)思路,為后面制定可行的、通用的及具有前瞻性的技術(shù)指引提供理論支持。
1.1.1 操作系統(tǒng)
通過(guò)分析和研究,發(fā)現(xiàn)目前主流操作系統(tǒng)均已支持 IPv6,包括 Windows、Linux、Unix 等,具體版本支持情況如表1所示。
表1 支持IPv6的操作系統(tǒng)版本
雖然各種操作系統(tǒng)間支持IPv6的實(shí)現(xiàn)方式不盡相同,程度也存在差異,但這已充分表明了在操作系統(tǒng)產(chǎn)業(yè)已充分意識(shí)到IPv6是大勢(shì)所趨,并著手為未來(lái)的IPv6網(wǎng)絡(luò)應(yīng)用進(jìn)行準(zhǔn)備。值得提出的是,微軟對(duì)IPv6的支持雖然在業(yè)界并不處于領(lǐng)先位置,但卻具有至關(guān)重要的意義,它將IPv6技術(shù)在真正意義上帶到了商用化的程度。
以IBM AIX 5L V5300-006和Red Hat Enterprise Linux(RHEL)5.5為例,分析研究其配置支持IPv6的方法。
(1)IBM AIX 5L V5300-006。
首先,通過(guò)root授權(quán),運(yùn)行autconf6-i en1命令來(lái)啟用IPv6。若在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟用IPv6,需要編輯/etc/rc.tcpip并取消以下兩行的注釋:
接著,運(yùn)行startsrc-s ndpd-host,開(kāi)啟網(wǎng)絡(luò)發(fā)現(xiàn)協(xié)議(Network Discovery Protocal)。然后通過(guò)添加-A到start/usr/sbin/autoconf6""來(lái)編輯/etc/rc.tcpip,如下所示:
此時(shí),AIX系統(tǒng)上的IPv6無(wú)狀態(tài)自動(dòng)配置或DHCP配置已完成。如果要設(shè)置靜態(tài)IPv6地址,需要發(fā)送smit tcpip命令。在以太網(wǎng)接口上配置完IPv6后,運(yùn)行ifconfig命令來(lái)驗(yàn)證IP地址分配是否成功。
(2)Red Hat Enterprise Linux(RHEL)5.5。
首先,配置RHEL支持IPv6需要人工編輯配置文件。系統(tǒng)本身沒(méi)有提供除啟用或禁用IPv6外其他可用于管理設(shè)置的圖形界面。所有編輯必須通過(guò)命令行界面(Command-Line Interface,CLI)完成。如要啟用IPv6協(xié)議,需編輯/etc/sysconfig/network文件,加入以下的行:
然后,在桌面點(diǎn)擊System(系統(tǒng))—Administration(管理)—Network(網(wǎng)絡(luò)),為指定的接口啟用 IPv6。還可以通過(guò)編輯接口的配置文件來(lái)完成這些設(shè)置,加入以下的行:
最后,設(shè)置完成以上內(nèi)容后發(fā)送“service network restart”命令重啟網(wǎng)絡(luò),系統(tǒng)將根據(jù)所處網(wǎng)絡(luò)中是否存在DHCP服務(wù)器提供IPv6地址或其他相關(guān)信息來(lái)進(jìn)行無(wú)狀態(tài)自動(dòng)配置或DHCP配置。如要配置靜態(tài)地址,需編輯/etc/sysconfig/network-scripts/ifcfg-eth1文件。更改了配置文件后,同樣需要運(yùn)行“service network restart”命令重啟網(wǎng)絡(luò)設(shè)備。運(yùn)行route-A inet命令從路由表可以查看到成功配置后的路由信息。
1.1.2 數(shù)據(jù)庫(kù)
通過(guò)分析和研究,發(fā)現(xiàn)目前常用的數(shù)據(jù)庫(kù)均已支持IPv6,包括對(duì)IPv6地址鏈接和訪問(wèn)的支持以及對(duì)IPv6數(shù)據(jù)存儲(chǔ)的支持,如表2所示。
表2 支持IPv6的數(shù)據(jù)庫(kù)版本
以O(shè)racle 11g Release2為例,分析研究其配置支持IPv6的方法。
Oracle 11g Release2提供對(duì)純IPv6環(huán)境的支持。當(dāng)默認(rèn)主機(jī)名與TCP協(xié)議同時(shí)在listener.ora中配置時(shí),Oracle Net Listener將監(jiān)聽(tīng)所有網(wǎng)絡(luò)接口上的傳入連接請(qǐng)求。當(dāng)使用主機(jī)名時(shí),可以在listener.ora中將IP參數(shù)指定為ADDRESS的一部分,以決定需要監(jiān)聽(tīng)哪些IP地址,支持的值包括FIRST、V4-ONLY、V6-ONLY。如果使用了默認(rèn)主機(jī)名而未指定IP參數(shù),此時(shí)就可以監(jiān)聽(tīng)對(duì)應(yīng)于該主機(jī)名的所有IP地址。
客戶端和中間層應(yīng)用程序使用11g Release 2版Oracle Client Stack(客戶端堆棧),IPv6地址和解析成IPv6地址的主機(jī)名可以作為T(mén)NS Connect Address的HOST參數(shù)使用。TNS Connect Address可以通過(guò)使用任意受支持的Oracle Net命名方法來(lái)獲得。客戶端將試圖連接DNS返回的所有IP地址,直到成功建立了連接或試遍了所有地址。
1.1.3 中間件
通過(guò)分析與研究,目前主流中間件(應(yīng)用服務(wù)器)均已支持IPv6,具體支持版本信息如表3所示。
表3 支持IPv6的中間件版本
以Apache Tomcat為例,分析研究其配置支持IPv6的方法。
使用Listen指令更新httpd.conf文件,該指令指示Apache監(jiān)聽(tīng)特定的IPv4和IPv6地址或端口。默認(rèn)下它將響應(yīng)所有 IP接口的請(qǐng)求,包括 IPv4和IPv6。為主機(jī)分配 IP 地址:74.86.48.99(IPv4)和2607:f0d0:1002:11::4(IPv6)。
首先,輸入以下代碼來(lái)打開(kāi) httpd.conf配置文件:
#vi httpd.conf
接著,使服務(wù)器接受 74.86.48.99、2607:f0d0:1002:11::4和端口80上的連接:
然后,保存并關(guān)閉文件,并重啟/重載Apache,這時(shí)Apache配置已完成并生效。
還可以使用如下netstat命令來(lái)驗(yàn)證Apache是否能在雙棧模式下正常工作:
1.2.1 Socket通信
Socket(套接字)是TCP/IP網(wǎng)絡(luò)環(huán)境下進(jìn)行通信的重要工具[3]。Socket在計(jì)算機(jī)中提供通信端口,可以通過(guò)該端口與任何一個(gè)具有Socket接口的計(jì)算機(jī)通信。應(yīng)用程序通常通過(guò)Socket向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。使用Socket進(jìn)行通信的方式有3種類型:(1)流式Socket(SOCK_STREAM):提供可靠的、面向連接的通信流,針對(duì)面向連接的TCP服務(wù)應(yīng)用;(2)數(shù)據(jù)報(bào)Socket(SOCK_DGRAM):定義了一種無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的且不保證可靠、無(wú)差錯(cuò),對(duì)應(yīng)于無(wú)連接的UDP服務(wù)應(yīng)用;(3)原始Socket(Raw_Socket):protocol賦值為零,允許程序使用底層協(xié)議如IP或ICMP,它功能強(qiáng)大但使用較為不便,主要應(yīng)用于一些協(xié)議的開(kāi)發(fā)[4]。
Socket開(kāi)發(fā)原理為:在服務(wù)器,使用ServerSocket監(jiān)聽(tīng)指定的端口,端口可以隨意指定(建議使用大于1024的端口,因?yàn)?024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不能隨意使用),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。在客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉Socket。客戶端不需要指定打開(kāi)的端口,通常會(huì)臨時(shí)地、動(dòng)態(tài)地分配一個(gè)大于1024的端口[5]。
1.2.2 IPv4 和 IPv6 下 Socket編程的對(duì)比
IPv4網(wǎng)絡(luò)環(huán)境下,網(wǎng)絡(luò)編程主要依靠Socket連接。在客戶端,其基本步驟為:創(chuàng)建一個(gè)Socket,使用Socket連接服務(wù)器,然后通過(guò)TCP或UDP協(xié)議進(jìn)行數(shù)據(jù)讀寫(xiě)。如果把這套方法移植到IPv6網(wǎng)絡(luò)環(huán)境下,則需要在原有基礎(chǔ)上引入新的協(xié)議族、數(shù)據(jù)結(jié)構(gòu)以及地址域名轉(zhuǎn)換函數(shù)等,具體差異包括:
(1)地址結(jié)構(gòu)。
(2)創(chuàng)建方法。
差別在于IPv4中,第一個(gè)參數(shù)為AF_INET,而IPv6中,第一個(gè)參數(shù)為AF_INET6。
(3)字符串地址和網(wǎng)絡(luò)序IP地址的相互轉(zhuǎn)換。
IPv4中字符串地址轉(zhuǎn)換為網(wǎng)絡(luò)序IP地址使用函數(shù) inet_aton,而 IPv6使用 inet_pton。
(4)主機(jī)名和地址的轉(zhuǎn)換。
IPv4使用gethostbyname()和gethostbyaddr(),而IPv6通用采用的是getaddrinfo()和getnameinfo()。
1.2.3 基于IPv6的Socket編程實(shí)現(xiàn)
網(wǎng)絡(luò)應(yīng)用系統(tǒng)基本上都是利用Socket套接字處理數(shù)據(jù)通信,需要分別為服務(wù)器端和客戶端建立套接字。下面以一簡(jiǎn)單的通信程序?yàn)槔f(shuō)明如何創(chuàng)建服務(wù)器端套接字和客戶端套接字,關(guān)鍵代碼如下:
(1)服務(wù)器端。
①創(chuàng)建服務(wù)器端套接字。
(2)客戶端。
①創(chuàng)建客戶端套接字。
圖1 IPv6網(wǎng)絡(luò)環(huán)境下的應(yīng)用系統(tǒng)遷移流程圖
根據(jù)應(yīng)用系統(tǒng)在網(wǎng)絡(luò)環(huán)境方面的基本特性,IPv6網(wǎng)絡(luò)環(huán)境下的應(yīng)用系統(tǒng)遷移改造流程如圖1所示,其相關(guān)工作步驟具體如下:
(1)應(yīng)用系統(tǒng)所處的運(yùn)行環(huán)境配置及部署。運(yùn)行環(huán)境主要有:操作系統(tǒng)、數(shù)據(jù)庫(kù)和中間件(應(yīng)用服務(wù)器)3個(gè)。不同的網(wǎng)絡(luò)環(huán)境下,對(duì)于每個(gè)應(yīng)用系統(tǒng)都離不開(kāi)3個(gè)運(yùn)行環(huán)境的配置,否則就不能正常運(yùn)行。
(2)對(duì)應(yīng)用系統(tǒng)本身的改造。該部分主要包括Socket編程和應(yīng)用層協(xié)議相關(guān)代碼改造[6]。Socket是TCP/IP網(wǎng)絡(luò)環(huán)境下進(jìn)行通信的重要工具,應(yīng)用程序需要通過(guò)Socket向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。另外,應(yīng)用系統(tǒng)遷移到IPv6下,需要對(duì)其應(yīng)用層網(wǎng)絡(luò)協(xié)議的相關(guān)代碼進(jìn)行改造。
(3)對(duì)應(yīng)用系統(tǒng)進(jìn)行測(cè)試及修正。應(yīng)用系統(tǒng)測(cè)試方法主要包括業(yè)務(wù)功能測(cè)試、協(xié)議聯(lián)通測(cè)試(FTP、SNMP、SMTP/POP3、Telnet、RIP、NFS 和 DNS 等協(xié)議)和數(shù)據(jù)處理測(cè)試(增、刪、改、查詢)3種。通過(guò)測(cè)試找出IPv6網(wǎng)絡(luò)環(huán)境下應(yīng)用系統(tǒng)的Bug,并根據(jù)日志管理文件,對(duì)遷移流程中出現(xiàn)缺陷的具體位置進(jìn)行修改。
為了驗(yàn)證遷移方案的可行性,本文在IPv4網(wǎng)絡(luò)環(huán)境下開(kāi)發(fā)一個(gè)B/S架構(gòu)下的測(cè)試改造用例系統(tǒng),測(cè)試改造用例的相關(guān)詳細(xì)信息如表4所示。
表4 測(cè)試改造用例的詳細(xì)信息表
通過(guò)對(duì)上述測(cè)試用例系統(tǒng)進(jìn)行改造,并遷移到IPv6網(wǎng)絡(luò)環(huán)境下進(jìn)行測(cè)試。首先,在業(yè)務(wù)功能測(cè)試方面,用戶管理、登錄系統(tǒng)、Email、日志管理等功能均可以正常實(shí)現(xiàn);其次,在網(wǎng)絡(luò)協(xié)議互通測(cè)試方面,F(xiàn)TP、SNMP、SMTP/POP3、Telnet、RIP、NFS 和 DNS 等協(xié)議均能夠互通,而聯(lián)通速度會(huì)稍小于IPv4網(wǎng)絡(luò)環(huán)境下;然后,在數(shù)據(jù)處理測(cè)試方面,對(duì)系統(tǒng)中的數(shù)據(jù)進(jìn)行增、刪、改、查詢操作,沒(méi)有發(fā)現(xiàn)缺陷;最后,查看日志管理文件,對(duì)遷移流程中不易通過(guò)測(cè)試發(fā)現(xiàn)的報(bào)錯(cuò)小問(wèn)題進(jìn)行調(diào)試與修正??傮w來(lái)看,遷移改造流程在邏輯上具有一定的合理性,可以適用于IPv6下一般應(yīng)用系統(tǒng)的遷移改造。
本文從應(yīng)用層角度來(lái)探討從IPv4遷移到IPv6下的應(yīng)用系統(tǒng)改造的關(guān)鍵技術(shù)及其具體實(shí)施流程,并對(duì)測(cè)試改造用例進(jìn)行多次調(diào)試,實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議互通,同時(shí)保證業(yè)務(wù)功能和數(shù)據(jù)的完整性及可操作性,并通過(guò)了實(shí)例驗(yàn)證。這就表明了該遷移改造方法及流程具有較強(qiáng)的可行性,可以為目前實(shí)際遷移工作提供科學(xué)的參考依據(jù)。但隨著IPv6發(fā)展的不斷深入,現(xiàn)有的遷移方法及改造流程可能將不能滿足未來(lái)IPv6網(wǎng)絡(luò)環(huán)境下應(yīng)用系統(tǒng)的遷移,應(yīng)該會(huì)加入更多的考慮因素,應(yīng)用系統(tǒng)的遷移改造技術(shù)也需要得到進(jìn)一步的修正。
[1] Garyfalos A,Almeroth K,F(xiàn)inney 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的特性及應(yīng)用前景研究[J].計(jì)算機(jī)科學(xué),2004,31(2):55-58.
[8] 梁劍.應(yīng)用程序向IPv6的遷移技術(shù)[J].電腦知識(shí)與技術(shù),2010,6(18):4929-4930.
[9] 王浩.IPv4與IPv6相互轉(zhuǎn)換技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2010,38(1):114-117.
[10] 哈渭濤.IPv6下協(xié)同入侵檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].河南科學(xué),2010,28(11):1466-1468.
[11] 李彥,陳卓,付敏.混合底層拓?fù)渚W(wǎng)絡(luò)中的P2P流媒體模型研究[J].計(jì)算機(jī)應(yīng)用研究,2012,29(9):3437-3440.
[12] 陳旭生.信息系統(tǒng)的質(zhì)量管理研究[J].中國(guó)新通信,2012,14(15):18.
[13] 劉海峰.安全操作系統(tǒng)若干關(guān)鍵技術(shù)的研究[D].北京:中國(guó)科學(xué)院,2002.
[14] 孫偉強(qiáng),蔣磊,王大玲.基于IP協(xié)議的透明網(wǎng)絡(luò)信息安全系統(tǒng)的研究與實(shí)現(xiàn)[J].價(jià)值工程,2011,30(23):14.