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