亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        兼容IPv4與IPv6 的Winsock網(wǎng)絡(luò)編程研究

        2009-03-02 09:33:12郭靜盈
        現(xiàn)代電子技術(shù) 2009年4期

        摘 要:在分析IPv4和IPv6編程接口基礎(chǔ)上,給出了一組兼容IPv4與IPv6的Winsock網(wǎng)絡(luò)編程規(guī)則, 并敘述IPv6在WindowsXP系統(tǒng)下的安裝和配置過程, 最后給出了一個(gè)可同時(shí)應(yīng)用于IPv4和IPv6的實(shí)現(xiàn)Daytime協(xié)議的程序,此程序今后可以方便地進(jìn)行其他應(yīng)用協(xié)議及軟件的移植,以適應(yīng)IPv6的快速發(fā)展。

        關(guān)鍵詞:IPv6;Winsock;TCP;API;Daytime協(xié)議;網(wǎng)絡(luò)編程

        中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004-373X(2009)04-105-03

        Research of Winsock Network Programming Compatible with IPv4&IPv6;

        GUO Jingying

        (Institute of Information and Control Engineering,Xi′an University of Architecture and Technology,Xi′an,710055,China)

        Abstract:This article analyses the differences between IPv4 APIs and IPv6 APIs.On this basis,a set of Winsock programming rules with the IP version-compatible are given.Then it introduces how to install and configure IPv6 in Windows XP OS.Finally it gives a program to achieve Daytime protocol with the IP version-compatible.This process can transplant other application agreements and softwares easily in future to accommodate the rapid development of IPv6.

        Keywords:IPv6;Winsock;TCP;API;Daytime protocol;network programming

        0 引 言

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

        1 IPv6相對(duì)于IPv4 WinSock的改變

        1.1 IPv6中新增加的常量

        為了支持IPv6,需要定義一個(gè)新的地址族名,以便正確地識(shí)別和解析IPv6的地址結(jié)構(gòu)。同樣,還需要定義一個(gè)新的協(xié)議簇名(與地址族名具有相同的值),這樣就可以使用合適的協(xié)議創(chuàng)建一個(gè)套接字。新定義的IPv6地址簇名和協(xié)議簇名常量為: AF_ INET6和PF_ INET6。

        1.2 IPV6中新增加的地址結(jié)構(gòu)

        IPv6的地址結(jié)構(gòu)通過struct in6_addr和struct sockaddr_in6定義,結(jié)構(gòu)定義分別如下:

        struct in6_addr {

        u_chars6_addr[16];//IPv6地址

        };

        struct sockaddr_in6

        {

        u_char sin6_len; //地址長(zhǎng)度

        u_char sin6_family; // IP地址族,必須為AF_INET6

        u_short sin6_port;//端口號(hào),和IPv4中意義相同

        u_long sin6_flowinfo; //標(biāo)記連接通信量

        struct in6_addr sin6_addr;//128位的IPv6網(wǎng)絡(luò)地址

        u_long sin6_scope_id;//地址接口識(shí)別號(hào)

        };

        1.3 IPV6中新增加的域名解析函數(shù)

        IPv6引入了名為getaddrinfo()和getnameinfo()的新的API。這兩個(gè)API是與協(xié)議無關(guān)的,且既可用于IPv4,也可用于IPv6的名稱解析。getaddrinfo()函數(shù)的返回值是addrinfo的結(jié)構(gòu)指針。

        addrinfo結(jié)構(gòu)如下所示:

        struct addrinfo {

        int ai_flags;//地址信息標(biāo)志

        int ai_family; //地址簇,對(duì)于IPv6地址必須是AF_INET6

        int ai_socktype; //sodket類型,字節(jié)流用SOCK-STREAM,數(shù)據(jù)報(bào)用SOCK-DGRAM

        int ai_protocol;//TCP協(xié)議用IPPROTO-TCP,UDP協(xié)議用IPPROTO-UDP

        size-t ai_addrlen; //ai-addr地址長(zhǎng)度

        char *ai_canonname;//規(guī)范名

        struct sockaddr *ai_addr; //地址

        struct addrinfo *ai_next;//指向下一個(gè)結(jié)構(gòu)信息指針

        };

        getaddrinfo()函數(shù)原型如下:

        getaddrinfo(

        IN const char FAR *nodename, //主機(jī)名地址或者是IP地址

        IN const char FAR *servname,//服務(wù)名或十進(jìn)制端口號(hào)

        IN const struct addrinfo FAR *hints,// 指向addrinfo結(jié)構(gòu)的指針

        Out struct addrinfo FAR *FAR *res

        );

        getaddrinfo()函數(shù)可以把主機(jī)名或服務(wù)名轉(zhuǎn)換成一組socket地址。 hints相當(dāng)于一個(gè)過濾器,只有符合hints結(jié)構(gòu)的內(nèi)容才會(huì)返回到res指針中。執(zhí)行成功后,參數(shù)res以鏈表的形式返回解析出來的地址,可以將這些地址直接傳遞給bind(),connect(),sendto()等函數(shù)。

        地址到名稱的轉(zhuǎn)換可以通過另一個(gè)新的套接字函數(shù)getnameinfo()進(jìn)行。getnameinfo()函數(shù)的功能與getaddrinfo()函數(shù)相反,該函數(shù)接受已經(jīng)初始化的套接字結(jié)構(gòu),并返回與地址及端口信息對(duì)應(yīng)的主機(jī)和服務(wù).

        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)。同時(shí),這個(gè)結(jié)構(gòu)還具有針對(duì)64位對(duì)齊問題的填充項(xiàng),使用這個(gè)結(jié)構(gòu)可以很容易地寫出與地址協(xié)議簇?zé)o關(guān)和跨平臺(tái)的程序代碼,因此編寫兼容IPv4與IPv6的網(wǎng)絡(luò)程序時(shí)要使用這個(gè)結(jié)構(gòu)表示網(wǎng)絡(luò)地址。

        sockaddr_storage結(jié)構(gòu)定義如下:

        struct sockaddr_storage{

        u_char ss_len;

        u_char ss_family;

        u_char padding[128-2];

        };

        2.2 使用新的名稱解析函數(shù)getaddrinfo()和getnameinfo()

        這兩個(gè)函數(shù)是隨IPv6引進(jìn)的新的名稱解析函數(shù),與地址協(xié)議簇?zé)o關(guān),隱藏了名字到地址轉(zhuǎn)換和地址到名字轉(zhuǎn)換的大量細(xì)節(jié),既能夠處理IPv6地址,也能處理IPv4地址。它們也替代性地實(shí)現(xiàn)了下列函數(shù)接口的功能:gethostbyname(),gethostbyaddr(),inet_ntoa(),inet_aton(),getservbyname(),getservbyport()??梢栽诤?jiǎn)化程序的同時(shí)實(shí)現(xiàn)與地址協(xié)議簇?zé)o關(guān)的編程,還可以提高程序的可移植性。

        3 IPv4與IPv6雙協(xié)議試驗(yàn)平臺(tái)的搭建

        由于大部分用戶的操作系統(tǒng)都是Windows XP,所以在此僅介紹Windows XP下IPv6的安裝與配置。

        Windows XP操作系統(tǒng)內(nèi)置了IPv6協(xié)議棧,提供了一組命令行方式的IPv6檢測(cè)配置工具。在XP下安裝IPv6協(xié)議后,對(duì)原IPv4協(xié)議的使用不產(chǎn)生任何影響,整個(gè)網(wǎng)絡(luò)上各終端設(shè)備能夠在一個(gè)物理網(wǎng)絡(luò)上共享IPv4和IPv6協(xié)議,并支持2種協(xié)議的數(shù)據(jù)傳輸,即:所謂的雙棧(DualStack)共享。

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

        D:\>ipv6 install

        Installing….

        Succeeded.

        D:\>netsh

        netsh>interface ipv6 add address "本地連接" 2008::a:20

        確定

        netsh>interface ipv6 add route::/0 "本地連接" 2008::a:20 publish=yes

        確定

        netsh>quit

        D:\>

        在安裝和配置完成后,可使用ping6和tracert6命令檢測(cè)網(wǎng)絡(luò)連通和路由狀態(tài)。

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

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

        4.1 服務(wù)器端程序設(shè)計(jì)

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

        服務(wù)器端設(shè)計(jì)過程如下:

        (1) 創(chuàng)建服務(wù)器端套接字

        memset (&hints;,0,sizeof (hints));

        hints.ai_family = PF_UNSPEC; //兼容IPv4與IPv6協(xié)議

        hints.ai_socktype = SOCK_STREAM; //指定用字節(jié)流

        hints.ai_protocol = IPPROTO_TCP; //指定用TCP協(xié)議

        hints.ai_flags = AI_NUMERICHOST; //IP用數(shù)字表示

        rc = getaddrinfo (NULL,"5001",&hints;,&res;); //解析本機(jī)地址

        s_send= socket (res->ai_family,res->ai_socktype,res->ai_protocol); //創(chuàng)建用于連接的Socket

        (2) 綁定本機(jī)監(jiān)聽端口

        rc=bind(s_send,res->ai_addr,res->ai_addrlen);

        (3) 監(jiān)聽并接收連接

        listen(s_send,5);//創(chuàng)建連接隊(duì)列,開始監(jiān)聽

        new_fd=accept(s_send,(struct sockaddr*)&sin;,&sin;_len);//接受一個(gè)連接

        (4) 處理連接,發(fā)回一個(gè)當(dāng)前時(shí)間給客戶端

        while (1) {

        time(&now;);

        pts = ctime(&now;);

        send(new_fd,pts,strlen(pts),0);

        closesocket(new_fd);

        }

        (5) 關(guān)閉套接字

        close(s-send );

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

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

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

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

        memset (&hints;,0,sizeof (hints));

        hints.ai_family = PF_UNSPEC; //兼容IPv4與IPv6協(xié)議

        hints.ai_socktype=SOCK_STREAM;//指定用字節(jié)流

        hints.ai_protocol = IPPROTO_TCP; //指定用TCP協(xié)議

        hints.ai_flags = AI_NUMERICHOST; //IP用數(shù)字表示

        rc = getaddrinfo (NULL,“5001”,&hints;,&res;); //解析本機(jī)地址

        s_send= socket (res->ai_family,res->ai_socktype,res->ai_protocol); //創(chuàng)建用于連接的socket

        (2) 連接服務(wù)器

        connect(s_send,res->ai_addr,res->ai_addrlen);

        (3) 接收當(dāng)前時(shí)間

        cc = recv(s_send,buf,LINELEN,0);

        (4) 關(guān)閉套接字

        close (s-send);

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

        當(dāng)服務(wù)器運(yùn)行后,可同時(shí)在IPv4和IPv6地址監(jiān)聽,客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接到請(qǐng)求后,向客戶端返回一個(gè)當(dāng)前時(shí)間。此實(shí)驗(yàn)達(dá)到了預(yù)期效果。

        服務(wù)器端運(yùn)行結(jié)果如圖1所示。

        6 結(jié) 語

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

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

        參 考 文 獻(xiàn)

        [1]RFC2292.Advanced Sockets API for IPv6[S].1998.

        [2]RFC3493.Basic Socket Interface Extensions for IPv6[S].2003.

        [3]COMER.TCP/IP網(wǎng)絡(luò)互連技術(shù)(卷3)[M].張衛(wèi),王能,譯.北京:清華大學(xué)出版社,2000.

        [4]Stevens W R.TCP/IP詳解(卷3)[M].胡谷雨,譯.北京:機(jī)械工業(yè)出版社,2000.

        [5]馬仝芬,付曉玲.IPv4與 IPv6兼容網(wǎng)絡(luò)編程模式[J].北方工業(yè)大學(xué)學(xué)報(bào),2005(3):25-29.

        [6]劉利強(qiáng),吳永英,王勇智.IPv6下Socket網(wǎng)絡(luò)編程的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(6):201-203,206.

        [7]朱坤華,朱國(guó)超.基于IPv6的網(wǎng)絡(luò)編程實(shí)例剖析[J].移動(dòng)計(jì)算,2006(2):257-259.

        [8]袁德明.用IPv6編程接口實(shí)現(xiàn)有連接通信的方法[J].計(jì)算機(jī)時(shí)代,2007(9):23-24,27.

        作者簡(jiǎn)介 郭靜盈 女,1983年出生,河南漯河人,碩士。主要研究方向?yàn)榛贗Pv6的Winsock網(wǎng)絡(luò)編程。

        久久久精品人妻一区二区三区免费| 性xxxx18免费观看视频| 人妻献身系列第54部| 精品一区二区av天堂| 看大陆男女真人草逼视频| 免费在线观看av不卡网站| 精品人妻伦九区久久aaa片| 奇米狠狠色| 国产伦理自拍视频在线观看| 亚洲av男人的天堂一区| 亚洲精品无码久久久影院相关影片 | 美女网站免费福利视频| 精品一区二区三区在线观看视频| 亚洲欧美性另类春色| 色佬易精品视频免费在线观看| 亚洲av熟女中文字幕| 国产二区交换配乱婬| 亚洲乱妇老熟女爽到高潮的片| 人妻无码aⅴ中文系列久久免费| 国产亚洲av手机在线观看| 精品久久综合日本久久综合网| 色欲欲www成人网站| 国产人妻无码一区二区三区免费| 乱中年女人伦av三区| 少妇人妻中文字幕在线| 国产区女主播在线观看| 色欲av自慰一区二区三区| 亚洲欧洲综合有码无码| 精品国产一区二区三区a| 无码人妻丰满熟妇啪啪网站 | 亚洲av日韩av激情亚洲| 久久久午夜精品福利内容| 日韩一区二区不卡av| 侵犯了美丽丰满人妻中文字幕| 日韩欧美中文字幕公布| 国产成人无码免费网站| 97无码人妻一区二区三区蜜臀| 国产午夜精品久久精品| 亚洲妇熟xxxx妇色黄| 国产思思99re99在线观看| 午夜精品一区二区久久做老熟女|