牛曉妍
(長治醫(yī)學(xué)院 計算機系,山西 長治 046000)
隨著互聯(lián)網(wǎng)的快速發(fā)展,傳統(tǒng)的互聯(lián)網(wǎng)協(xié)議IPv4存在路由選擇效率低、IP地址匱乏、服務(wù)質(zhì)量差等諸多問題。針對以上情況,下一代互聯(lián)網(wǎng)協(xié)議IPv6做了較大改進,并新增加了一些特性,例如改進的路由結(jié)構(gòu)、龐大的地址空間、完善的服務(wù)質(zhì)量保證等等。
但是現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)都是以網(wǎng)際互聯(lián)協(xié)議IPv4為基礎(chǔ)構(gòu)建的,所以IPv4向IPv6的轉(zhuǎn)變將是一個漫長的過程,在這一過程中IPv4與IPv6兩種協(xié)議將會長期共存。因此當前不僅要考慮Ipv4向Ipv6的過度,而且應(yīng)研究如何在IPv4和IPv6兩種協(xié)議共存的情況下,更好、更安全地保證網(wǎng)絡(luò)可靠的通信傳輸。
目前已有的過渡技術(shù)[1]有三種:
(1)雙協(xié)議棧(Dual Stack):這種技術(shù)就是在同一節(jié)點上同時支持IPv4協(xié)議棧和IPv6協(xié)議棧。
(2)隧道技術(shù)(手動隧道、自動隧道、6to4,6over4):基于IPv4隧道的IPv6是由路由器將IPv6的數(shù)據(jù)分組封裝入IPv4數(shù)據(jù)包中,以此來實現(xiàn)在現(xiàn)有的IPv4網(wǎng)絡(luò)中IPv6節(jié)點和IPv4節(jié)點之間的IP通信。這個過程比較復(fù)雜,分為打包?解包和隧道管理[2]75-783個步驟。
(3)NAT-PT(Network Address Translation-Protocol Translation):其核心是地址和協(xié)議的轉(zhuǎn)換。
雙協(xié)議棧是指在同一個網(wǎng)絡(luò)結(jié)點同時支持IPv4和IPv6兩種協(xié)議棧。因為IPv4和IPv6在形式、功能等方面如出一轍,所以IPv6是IPv4的改進版本[3]101-111。IPv4和IPv6這兩種網(wǎng)絡(luò)層協(xié)議基于相同的物理平臺,而且加載于其上的傳輸層協(xié)議(TCP/UDP)也極其相似,所以無論從理論上,還是實踐上都可以實現(xiàn)支持雙協(xié)議棧的結(jié)點既能與支持IPv4協(xié)議的結(jié)點通信,又能與支持IPv6協(xié)議的結(jié)點通信。雙協(xié)議棧的概念模型如圖1所示:
圖1 雙協(xié)議棧模型
在雙協(xié)議棧體系模型中,大部分采用了節(jié)點技術(shù)完成IPv4向IPv6過度[4]。節(jié)點模型如圖2所示。
圖2 節(jié)點模型
系統(tǒng)的主體結(jié)構(gòu)采用socket技術(shù),并提供client/server通信模式。采用socket函數(shù)來進行IPv4和IPv6下的網(wǎng)絡(luò)編程存在很多弊端,如:IPv4協(xié)議下的網(wǎng)絡(luò)軟件系統(tǒng)在向支持IPv6協(xié)議的網(wǎng)絡(luò)系統(tǒng)的升級[5]過程中存在一些問題。針對這個現(xiàn)實難題,本文提出了解決方案:首先設(shè)計和實現(xiàn)一組網(wǎng)絡(luò)通信功能的接口;然后分別在IPv4和IPv6下使用socket函數(shù)設(shè)計和實現(xiàn)網(wǎng)絡(luò)通信功能,最終屏蔽了IPv4和IPv6在網(wǎng)絡(luò)編程方面的差異。系統(tǒng)的主體結(jié)構(gòu)程序?qū)崿F(xiàn)流程圖如圖3所示。
圖3 主體結(jié)構(gòu)程序?qū)崿F(xiàn)流程圖
該模塊使用類繼承的思想實現(xiàn)網(wǎng)絡(luò)通信中的客戶端功能部分。設(shè)計如下:首先設(shè)計并實現(xiàn)通用的抽象接口父類;然后分別在IPv4和IPv6下使用socket函數(shù)繼承此抽象接口父類并實現(xiàn)通信功能的具體接口類。
下面具體舉例說明父類Client的實現(xiàn)代碼。
該模塊同樣采用類繼承的思想[6]來實現(xiàn)網(wǎng)絡(luò)通信中的服務(wù)器端的功能部分。設(shè)計如下:首設(shè)計并實現(xiàn)通用的抽象接口父類;然后分別在IPv4和IPv6下使用socket函數(shù)繼承此接口類,并且使用統(tǒng)一的接口格式實現(xiàn)支持IPv4和IPv6通信功能的接口類。
IPv4服務(wù)器端接口類的設(shè)計與CSrvL-stv4Thread繼承自父類CSrvThread,它提供的接口方法StartUp()包含了父類CSrvThread所規(guī)定的主要接口方法。
IPv6服務(wù)器端接口類的設(shè)計與IPv4非常相似。IPv6服務(wù)器端通信功能的類CSrvLstv6Thread繼承自父類CSrvThread,其提供了接口方法startUp(),依照IPv6下的socket函數(shù),其具體實現(xiàn)為:初始化Winsock,綁定本地地址并開始偵聽?實現(xiàn)原理與IPv4下的接口方法startUp()相同,只是socket函數(shù)在兩種協(xié)議下的使用有所不同。具體流程為:首先調(diào)用WSAStartup()函數(shù)初始化Winsock,再調(diào)用getaddrinfo()解析服務(wù)器地址,接著創(chuàng)建socket準備偵聽;然后調(diào)用bind()將該socket綁定到本地;最后調(diào)用listen()開始偵聽并調(diào)用freeaddrinfo()釋放解析服務(wù)器地址時獲得的地址列表。具體流程與IPv4稍有區(qū)別。值得注意的是,還需要根據(jù)所開發(fā)軟件的實際需求,設(shè)計與之相配套的接收線程類,該類也需要處理少量與IPv6協(xié)議相關(guān)的細節(jié)。
使用本文提出的設(shè)計思想及設(shè)計方法,使面向雙棧的應(yīng)用編程變得相對簡單,不必過多地考慮和處理涉及IPv6協(xié)議的細節(jié),就能使用與IPv4協(xié)議下的類似方法來編制程序,提高了開發(fā)效率?應(yīng)用實例代碼如下:
通過實例分析可以得到如下結(jié)論:在已開發(fā)的網(wǎng)絡(luò)軟件的原有功能的基礎(chǔ)上,添加IPv6通信功能模塊并擴充頂層通信模塊,就可以實現(xiàn)雙棧通信。
隨著基于IPv6的應(yīng)用需求日益增大,IPv6取代IPv4是網(wǎng)絡(luò)發(fā)展趨勢,IPv6和IPv4共存是實際問題。本文結(jié)合具體實例分析和闡述了IPv4/IPv6雙棧通信的優(yōu)點,并在設(shè)計的模塊中提出了實用性較強的方法。
[1]黃偉,刁海南等.一種嵌入式IPv4/IPv6雙棧協(xié)議的實現(xiàn)[J].微計算機信息,2008,(24):30-32.
[2]楊濤等譯,Steve Shah著,Linux管理員指南[M].機械工業(yè)出版社,2005.
[3]周遜著,IPv6—下一代互聯(lián)網(wǎng)的核心[M].電子工業(yè)出版社,2003.
[4]安燕,方濱興.基于SOCKET協(xié)議的IPv4/IPv6轉(zhuǎn)換器[J].高通信技術(shù),2002,(11):30-35.
[5]鄒建峰.基于雙棧的 IPv6翻譯方案即實現(xiàn)[J].計算機工程與應(yīng)用,2003,(2):23-24.
[6]張愛華等.IPv6協(xié)議下域名系統(tǒng)的擴展與實現(xiàn)[J].微機發(fā)展,2004,(7):79-81.