0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

同時支持IPv4和IPv6協(xié)議的應用程序編寫

電子設(shè)計 ? 來源:現(xiàn)代電子技術(shù) ? 作者:郭靜盈 ? 2021-06-24 15:14 ? 次閱讀

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

1 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)絡(luò)編程規(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)絡(luò)程序時要使用這個結(jié)構(gòu)表示網(wǎng)絡(luò)地址。

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()。可以在簡化程序的同時實現(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)絡(luò)上各終端設(shè)備能夠在一個物理網(wǎng)絡(luò)上共享IPv4和IPv6協(xié)議,并支持2種協(xié)議的數(shù)據(jù)傳輸,即:所謂的雙棧(DualStack)共享。

安裝IPv6協(xié)議和配置地址及默認網(wǎng)關(guān)的過程如下:

4 VC環(huán)境下Daytime協(xié)議的實現(xiàn)

根據(jù)以上所述,下面開發(fā)一個可同時應用于IPv4和IPv6的實現(xiàn)Daytime協(xié)議的程序。該程序基于c/s結(jié)構(gòu),客戶端使用TCP協(xié)議連接到服務器端,向服務器發(fā)送請求;服務器收到請求后,將當前的時間發(fā)回客戶端。

4.1 服務器端程序設(shè)計

服務器端首先啟動,通過調(diào)用socket()建立一個Socket,然后調(diào)用bind()將該Socket和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()使Socket做好偵聽的準備,并規(guī)定請求隊列的長度,之后就調(diào)用accept()接收連接。連接建立后,服務器端創(chuàng)建一個通信用的’Sock-et,把當前時間發(fā)回給客戶端。最后,在數(shù)據(jù)傳送結(jié)束后,調(diào)用close()關(guān)閉Socket。 pYYBAGDUMUuAU064AAAK7pbh3zQ984.png

4.2 客戶端程序設(shè)計

客戶端創(chuàng)建一個Socket,并調(diào)用connect()和服務器建立連接。連接建立后,客戶端等待服務器返回的當前時間。最后,待數(shù)據(jù)傳送結(jié)束后,調(diào)用close()關(guān)閉Socket。

客戶端設(shè)計過程如下。

(1)創(chuàng)建客戶端套接字

5 程序運行后的結(jié)果

當服務器運行后,可同時在IPv4和IPv6地址*,客戶端向服務器發(fā)送請求,服務器接到請求后,向客戶端返回一個當前時間。此實驗達到了預期效果。

6 結(jié) 語

雖然IPv6網(wǎng)絡(luò)已經(jīng)開始實驗性部署,但是IPv4網(wǎng)絡(luò)向IPv6網(wǎng)絡(luò)的過渡和互通仍有一定難度,IPv4和IPv6網(wǎng)絡(luò)還需共存一段時間,因此開發(fā)能夠同時支持IPv4和IPv6的網(wǎng)絡(luò)應用程序會變得越來越重要。

在此編寫了一個能夠同時支持IPv4和IPv6協(xié)議的程序,此程序可以方便地進行今后其他應用協(xié)議及軟件的移植,需在服務器端設(shè)計過程及客戶端設(shè)計過程中根據(jù)其具體協(xié)議及軟件進行相應改變。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    12

    文章

    9262

    瀏覽量

    85767
  • IPv6
    +關(guān)注

    關(guān)注

    6

    文章

    690

    瀏覽量

    59466
  • IPv4
    +關(guān)注

    關(guān)注

    0

    文章

    142

    瀏覽量

    19916
收藏 人收藏

    評論

    相關(guān)推薦

    IPv6地址是什么,IPv6的意思

    |   +---------------------------- +--------+----------------------- |   IPv4兼容地址已經(jīng)被舍棄了,所以今后的設(shè)備和程序中可能不會支持這種地址格式。  
    發(fā)表于 01-25 16:39

    IPv6相對于IPv4 WinSock的改變是什么?

    IPv6相對于IPv4 WinSock的改變是什么?兼容IPv4IPv6的WinSock網(wǎng)絡(luò)編程規(guī)則是什么?IPv4
    發(fā)表于 05-31 07:09

    跨越IPv4 IPv6轉(zhuǎn)換網(wǎng)關(guān)的研究與實現(xiàn)

    互聯(lián)網(wǎng)的飛速發(fā)展使IPV4 協(xié)議暴露出了很多問題, 下一代IP 協(xié)議IPV6 取代IPV4 是發(fā)展的必然,如何解決
    發(fā)表于 01-07 16:04 ?9次下載

    IPv4IPv6的介紹和IPv6將成為5G和物聯(lián)網(wǎng)基礎(chǔ)協(xié)議

    相比 IPv4,IPv6 除了具有更大的地址空間,還擁有更快的路由機制、更好的業(yè)務性能以及更高的安全性等一系列優(yōu)點。去年 11 月在韓國召開的 IETF 大會上發(fā)布了一個聲明,希望未來的互聯(lián)網(wǎng)協(xié)議
    發(fā)表于 09-22 17:49 ?11次下載

    ipv4ipv6有什么區(qū)別

    IPV6IPV4協(xié)議早已為人所共知。IPv4,是互聯(lián)網(wǎng)協(xié)議(Internet Protocol,IP)的第四版,也是第一個被廣泛使用,構(gòu)成
    發(fā)表于 12-26 16:36 ?1.7w次閱讀
    <b class='flag-5'>ipv4</b>和<b class='flag-5'>ipv6</b>有什么區(qū)別

    IPv4IPv6無狀態(tài)的雙向通信機制

    IPv4/IPv6過渡進程中,針對一些尚未升級到IPv6IPv4網(wǎng)絡(luò)仍需要與IPv6互聯(lián)網(wǎng)互聯(lián)互通的問題,提出了一種無狀態(tài)的雙向通信機制
    發(fā)表于 01-04 14:40 ?0次下載
    <b class='flag-5'>IPv4</b>與<b class='flag-5'>IPv6</b>無狀態(tài)的雙向通信機制

    什么是ipv6 ipv4ipv6的區(qū)別

    ipv6的英文全稱是Internet Protocol Version 6,中文為互聯(lián)網(wǎng)協(xié)議6版。ipv6是互聯(lián)網(wǎng)工程任務組設(shè)計的用于替代
    的頭像 發(fā)表于 09-03 16:03 ?2.3w次閱讀

    ipv4中ip分為幾類 ipv4ipv6的過渡技術(shù)有哪些

    協(xié)議棧:即在IPv4IPv6之間同時部署一個雙協(xié)議棧,使得IPv4
    發(fā)表于 05-15 18:15 ?7467次閱讀

    什么是ipv4什么是ipv6 ipv6技術(shù)的優(yōu)缺點

    IPv4IPv6的地址格式不同,它們之間沒有直接的換算方法。但是,可以使用IPv4IPv6的雙棧機制,實現(xiàn)IPv4地址到
    發(fā)表于 05-17 18:12 ?5635次閱讀

    ipv6ipv4有什么區(qū)別 ipv4ipv6哪個網(wǎng)速快

    IPv6可以和IPv4兼容,支持IPv4地址的傳輸和訪問,同時支持
    發(fā)表于 05-17 18:13 ?2.2w次閱讀

    IP地址:IPV4IPV6的區(qū)別

    IPV4互聯(lián)協(xié)議版本4,有版本V4之前就有IPV1 IPV2IPV3,同樣有
    發(fā)表于 10-26 10:41 ?2896次閱讀
    IP地址:<b class='flag-5'>IPV4</b>和<b class='flag-5'>IPV6</b>的區(qū)別

    恒訊科技分析:IPv4IPv6的網(wǎng)絡(luò)速度與配置如何選擇?

    IPv6時,需要考慮網(wǎng)絡(luò)速度和配置等因素。 一、網(wǎng)絡(luò)速度: IPv4IPv4是互聯(lián)網(wǎng)上廣泛使用的傳統(tǒng)協(xié)議,大多數(shù)網(wǎng)絡(luò)設(shè)備和服務都支持
    的頭像 發(fā)表于 04-03 17:03 ?1369次閱讀

    明陽 IPv4/IPv6 協(xié)議交換平臺產(chǎn)品白皮書

    一、業(yè)務需求隨著互聯(lián)網(wǎng)的不斷發(fā)展,IPv4地址資源逐漸枯竭,為了解決IPv4地址不足的問題,IPv6協(xié)議逐漸被廣泛應用。國家政策對IPv6
    的頭像 發(fā)表于 05-11 08:36 ?1144次閱讀
    明陽 <b class='flag-5'>IPv4</b>/<b class='flag-5'>IPv6</b> <b class='flag-5'>協(xié)議</b>交換平臺產(chǎn)品白皮書

    IPv4IPv6的定義和主要區(qū)別

    IPv4IPv6的定義 IPv4,即互聯(lián)網(wǎng)協(xié)議版本4(InternetProtocolversion4
    的頭像 發(fā)表于 07-11 13:48 ?554次閱讀

    IPv6IPv4的區(qū)別

    IPv6(互聯(lián)網(wǎng)協(xié)議第六版)和IPv4(互聯(lián)網(wǎng)協(xié)議第四版)是用于互聯(lián)網(wǎng)上設(shè)備之間通信的兩種主要協(xié)議。以下是它們之間的一些主要區(qū)別: 地址空間
    的頭像 發(fā)表于 10-29 17:11 ?962次閱讀