0 引 言
隨著通信技術(shù)和網(wǎng)絡技術(shù)的飛速發(fā)展,特別是近年來,IPv4協(xié)議面臨著一些難以解決的問題,如地址短缺、缺乏服務質(zhì)量控制Qos和安全性差等。為了應對這一挑戰(zhàn),IETF(Internet Engineer Task Force)組織提出了為適應未來對于網(wǎng)絡基礎(chǔ)設(shè)施數(shù)量和質(zhì)量需求而設(shè)計的下一代互聯(lián)網(wǎng)協(xié)議IPv6。IPv6繼承了IPv4的優(yōu)點,并根據(jù)IPv4多年來運行的經(jīng)驗進行了大幅度的修改和功能擴充,其擴展性、路由、安全性、配置和可靠性都有明顯改進。
l IPv6相對于IPv4 WinSock的改變
1.1 IPv6中新增加的常量
為了支持IPv6,需要定義一個新的地址族名,以便正確地識別和解析IPv6的地址結(jié)構(gòu)。同樣,還需要定義一個新的協(xié)議簇名(與地址族名具有相同的值),這樣就可以使用合適的協(xié)議創(chuàng)建一個套接字。新定義的IPv6地址簇名和協(xié)議簇名常量為:AF_INET6和PF_INET6。
1.2 IPV6中新增加的地址結(jié)構(gòu)
IPv6的地址結(jié)構(gòu)通過struct in6_addr和structockaddr_in6定義,結(jié)構(gòu)定義分別如下:
1.3 IPV6中新增加的域名解析函數(shù)
IPv6引入了名為getaddrinfo()和getnameinfo()的新的API。這兩個API是與協(xié)議無關(guān)的,且既可用于IPv4,也可用于IPv6的名稱解析。getaddrinfo()函數(shù)的返回值是addrinfo的結(jié)構(gòu)指針。
getaddrinfo()函數(shù)可以把主機名或服務名轉(zhuǎn)換成一組socket地址。hints相當于一個過濾器,只有符合hints結(jié)構(gòu)的內(nèi)容才會返回到res指針中。執(zhí)行成功后,參數(shù)res以鏈表的形式返回解析出來的地址,可以將這些地址直接傳遞給bind(),connect(),sendto()等函數(shù)。
地址到名稱的轉(zhuǎn)換可以通過另一個新的套接字函數(shù)getnamein{o()進行。getnameinfo()函數(shù)的功能與getaddrinfo()函數(shù)相反,該函數(shù)接受已經(jīng)初始化的套接字結(jié)構(gòu),并返回與地址及端口信息對應的主機和服務.
2 兼容IPv4與IPv6的WinSock網(wǎng)絡編程規(guī)則
2.1 使用sockaddr_storage結(jié)構(gòu)
sockaddr_storage結(jié)構(gòu)是新的套接字結(jié)構(gòu),它與協(xié)議無關(guān),并擁有充分的地址空間容納IPv4或者IPv6地址信息,且可以很方便地轉(zhuǎn)換成sockaddr_in結(jié)構(gòu)和sockaddr_in6結(jié)構(gòu)。同時,這個結(jié)構(gòu)還具有針對64位對齊問題的填充項,使用這個結(jié)構(gòu)可以很容易地寫出與地址協(xié)議簇無關(guān)和跨平臺的程序代碼,因此編寫兼容IPv4與IPv6的網(wǎng)絡程序時要使用這個結(jié)構(gòu)表示網(wǎng)絡地址。
2.2 使用新的名稱解析函數(shù)getaddrinfo()和getnam-einfo()
這兩個函數(shù)是隨IPv6引進的新的名稱解析函數(shù),與地址協(xié)議簇無關(guān),隱藏了名字到地址轉(zhuǎn)換和地址到名字轉(zhuǎn)換的大量細節(jié),既能夠處理IPv6地址,也能處理IPv4地址。它們也替代性地實現(xiàn)了下列函數(shù)接口的功能:gethostbyname(),gethostbyaddr(),inet_ntoa(),inet_aton(),getservbyname(),getservbyport()?梢栽诤喕绦虻耐瑫r實現(xiàn)與地址協(xié)議簇無關(guān)的編程,還可以提高程序的可移植性。
3 IPv4與IPv6雙協(xié)議試驗平臺的搭建
由于大部分用戶的操作系統(tǒng)都是Windows XP,所以在此僅介紹Windows XP下IPv6的安裝與配置。
Windows XP操作系統(tǒng)內(nèi)置了IPv6協(xié)議棧,提供了一組命令行方式的IPv6檢測配置工具。在XP下安裝IPv6協(xié)議后,對原IPv4協(xié)議的使用不產(chǎn)生任何影響,整個網(wǎng)絡上各終端設(shè)備能夠在一個物理網(wǎng)絡上共享IPv4和IPv6協(xié)議,并支持2種協(xié)議的數(shù)據(jù)傳輸,即:所謂的雙棧(DualStack)共享。
安裝IPv6協(xié)議和配置地址及默認網(wǎng)關(guān)的過程如下:
來源:維庫開發(fā)網(wǎng)