新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 兼容IPv4與IPv6的Winsock網絡編程研究

        兼容IPv4與IPv6的Winsock網絡編程研究

        作者: 時間:2009-07-15 來源:網絡 收藏

        0 引 言
        隨著通信技術和網絡技術的飛速發展,特別是近年來,協議面臨著一些難以解決的問題,如地址短缺、缺乏服務質量控制Qos和安全性差等。為了應對這一挑戰,IETF(Internet Engineer Task Force)組織提出了為適應未來對于網絡基礎設施數量和質量需求而設計的下一代互聯網協議繼承了的優點,并根據多年來運行的經驗進行了大幅度的修改和功能擴充,其擴展性、路由、安全性、配置和可靠性都有明顯改進。

        本文引用地址:http://www.104case.com/article/157984.htm

        l 相對于IPv4 WinSock的改變
        1.1 IPv6中新增加的常量

        為了支持IPv6,需要定義一個新的地址族名,以便正確地識別和解析IPv6的地址結構。同樣,還需要定義一個新的協議簇名(與地址族名具有相同的值),這樣就可以使用合適的協議創建一個套接字。新定義的IPv6地址簇名和協議簇名常量為:AF_INET6和PF_INET6。
        1.2 IPV6中新增加的地址結構
        IPv6的地址結構通過struct in6_addr和structockaddr_in6定義,結構定義分別如下:


        1.3 IPV6中新增加的域名解析函數
        IPv6引入了名為getaddrinfo()和getnameinfo()的新的API。這兩個API是與協議無關的,且既可用于IPv4,也可用于IPv6的名稱解析。getaddrinfo()函數的返回值是addrinfo的結構指針。


        getaddrinfo()函數可以把主機名或服務名轉換成一組socket地址。hints相當于一個過濾器,只有符合hints結構的內容才會返回到res指針中。執行成功后,參數res以鏈表的形式返回解析出來的地址,可以將這些地址直接傳遞給bind(),connect(),sendto()等函數。
        地址到名稱的轉換可以通過另一個新的套接字函數getnamein{o()進行。getnameinfo()函數的功能與getaddrinfo()函數相反,該函數接受已經初始化的套接字結構,并返回與地址及端口信息對應的主機和服務.

        2 IPv4與IPv6的WinSock規則
        2.1 使用sockaddr_storage結構
        sockaddr_storage結構是新的套接字結構,它與協議無關,并擁有充分的地址空間容納IPv4或者IPv6地址信息,且可以很方便地轉換成sockaddr_in結構和sockaddr_in6結構。同時,這個結構還具有針對64位對齊問題的填充項,使用這個結構可以很容易地寫出與地址協議簇無關和跨平臺的程序代碼,因此編寫IPv4與IPv6的網絡程序時要使用這個結構表示網絡地址。

        2.2 使用新的名稱解析函數getaddrinfo()和getnam-einfo()
        這兩個函數是隨IPv6引進的新的名稱解析函數,與地址協議簇無關,隱藏了名字到地址轉換和地址到名字轉換的大量細節,既能夠處理IPv6地址,也能處理IPv4地址。它們也替代性地實現了下列函數接口的功能:gethostbyname(),gethostbyaddr(),inet_ntoa(),inet_aton(),getservbyname(),getservbyport()。可以在簡化程序的同時實現與地址協議簇無關的編程,還可以提高程序的可移植性。

        3 IPv4與IPv6雙協議試驗平臺的搭建
        由于大部分用戶的操作系統都是Windows XP,所以在此僅介紹Windows XP下IPv6的安裝與配置。
        Windows XP操作系統內置了IPv6協議棧,提供了一組命令行方式的IPv6檢測配置工具。在XP下安裝IPv6協議后,對原IPv4協議的使用不產生任何影響,整個網絡上各終端設備能夠在一個物理網絡上共享IPv4和IPv6協議,并支持2種協議的數據傳輸,即:所謂的雙棧(DualStack)共享。
        安裝IPv6協議和配置地址及默認網關的過程如下:




        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万州区| 辰溪县| 增城市| 黄骅市| 双城市| 黄陵县| 连云港市| 梁河县| 内丘县| 方正县| 资源县| 宁陕县| 图片| 哈巴河县| 正镶白旗| 天峨县| 潼南县| 冷水江市| 商水县| 嵊泗县| 朝阳市| 阿巴嘎旗| 泊头市| 延川县| 渝北区| 朝阳县| 同仁县| 六安市| 峨山| 汶上县| 临洮县| 青州市| 大安市| 旅游| 三明市| 张家界市| 阿克苏市| 灌云县| 黄冈市| 凭祥市| 肇庆市|