999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種支持IPv4/IPv6雙協議棧的軟件模塊

2008-01-01 00:00:00張廣興張大方謝高崗
計算機應用研究 2008年1期

摘要:分析已有的IPv4與IPv6的socket接口和實現,設計了一種支持IPv4/IPv6雙協議棧的通信模塊。該模塊利用類繼承,為基于IPv4、IPv6雙協議棧的軟件開發提供了統一的底層通信功能編程接口。采用該模塊,還可以方便地升級原有只支持IPv4通信的軟件系統,使其支持IPv6協議。該模塊已應用于NGI網絡監測分析系統NetTurbo。 關鍵詞:套接字;IPv4/IPv6雙協議棧;應用程序編程接口

中圖分類號:TP393.09文獻標志碼:A

文章編號:1001-3695(2008)01-0145-03

現有的互聯網采用IPv4協議[1]作為核心協議,IPv4定義的有限地址空間將影響互聯網的進一步發展。為解決地址空間限制、安全、服務質量等問題,IETF在20世紀90年代中期制定IPv6[2]協議標準作為下一代互聯網核心協議。除對地址空間進行擴展以外,其還對IPv6地址的結構重新作了定義,采用與IPv4中使用的CIDR類似的方法分配地址,提供自動配置以及對移動性、安全性等更好地支持。

目前,國內外各大廠商均在IPv6的應用與研究方面投入大量的資源,并開發出相應的軟硬件。2001年思科公司就正式在其路由器、交換機上支持IPv6協議;當今大多數UNIX/Linux系統均支持IPv6,可以實現IPv4/ IPv6雙棧運行;Microsoft從Win2K開始推出IPv6 Tech Preview,并在Windows XP上內置了商用IPv6協議,尤其是其最近推出的Windows Vista操作系統,提供了對新的IPv6協議的支持。基于IPv6協議進行軟件開發的需求日益明顯。

由于多方面的原因,IPv6不可能在短時間內取代IPv4,兩者將長期共存。在開發新的軟件系統時,越來越需要考慮是否提供對使用IPv6協議通信的潛在需求的支持。現有的大量基于IPv4的軟件也將日益需要進行移植和升級,以支持IPv6。目前主流操作系統提供的socket函數API眾多,以Windows為例,其提供的基本socket函數就多達110個,而僅僅是基本socket函數接口,就包括基本TCP socket類、基本UDP socket類、I/O復用socket類、設置socket選項類、基本名字與地址轉換socket類等。如果再加上高級socket函數,還包括高級名字與地址轉換函數、高級I/O函數、非阻塞I/O函數、路由soc ket、原始socket等。而事實上,一般的網絡系統,其通信功能往往只需使用其中的一些常用的socket函數即可完成,若能將這些常用的socket函數,根據一般的功能需求進行進一步的整合,則可以減少重復開發的代價。如果能將這些一般的功能需求同時在IPv4和IPv6上予以實現,一方面能簡化上層開發者基于IPv6的網絡編程;另一方面也便于由IPv4軟件系統向支持IPv6通信的升級。

1支持IPv4/IPv6雙棧的通信模塊分析

主要的操作系統平臺提供socket進行client/server模式的網絡編程。該模式的主要流程如圖1所示。 

IPv6與IPv4的socket函數[3]相比主要不同之處包括sockaddr結構的變化,本地全球可定址IPv6地址的獲取,listen()、connect()、accept()等函數的使用。如果直接采用基本socket函數來進行IPv4和IPv6下的網絡編程,則需要由開發人員小心地處理這些差異,這一方面將不利于眾多IPv4協議下的網絡軟件系統向支持IPv6的升級;另一方面更談不上實現兩者編程上的兼容[4,5]。

當前所存在的支持IPv4/IPv6雙棧通信功能的設計方法大致可分為兩種:a)混合方式。設計者將IPv4和IPv6兩種通信功能在一個模塊內實現,即在模塊內部處理IPv4與IPv6通信的差異。該方式可用于全新的支持IPv4/IPv6雙棧通信的網絡軟件/系統的設計與開發,但不利于現有的基于IPv4的網絡軟件系統向IPv6環境下的移植與升級。b)分離方式。設計者分別應用兩個單獨的通信功能模塊實現所需的IPv4和IPv6通信功能,需要上層用戶自己負責區分IPv4和IPv6功能接口的差異。該方式有利于現有的基于IPv4的網絡軟件系統向IPv6環境的移植與升級,但對于新的網絡應用開發者而言,仍需考慮和熟悉底層的IPv4和IPv6的通信細節以及功能接口的差異,從而導致開發效率降低。

2支持IPv4/IPv6雙棧的通信模塊設計

直接采用基本socket函數來進行IPv4和IPv6下的網絡編程將需要處理不少的細節問題,同時也不利于實現眾多IPv4協議下的網絡軟件系統向支持IPv6的升級。為了解決這個問題,本文提出了一種解決方法,該方法整合了混合方式和分離方式各自的優點,采用面向對象的思想,將按照統一接口的要求分別設計和實現的IPv4和IPv6通信功能模塊封裝成為一致通用的接口,設計了一組核心且簡單易用的API接口。

該方法的核心內容可概述如下:首先,設計和實現一組核心的網絡通信功能部分的接口;然后根據該組接口的要求,利用基本socket函數分別設計和實現基于IPv4的核心網絡通信功能部分及基于IPv6的核心網絡通信功能部分;最終屏蔽了IPv4與IPv6下網絡編程的差異。下面是在Windows平臺下,此方法的具體實現過程。

2.1客戶端模塊的設計

該部分用來完成網絡通信中的客戶端功能,應用類繼承的思想,首先設計并實現通用的抽象接口父類;然后根據IPv4和IPv6底層socket函數使用方法的不同,分別繼承此抽象接口父類并實現進行IPv4和IPv6通信功能的具體接口類。根據UML中類圖的通常畫法,此模塊的框架可描述如圖2所示。

2.1.1客戶端抽象接口父類的設計

與圖1相對應,圖2中給出了應用C++描述的接口類原型,在父類CClient中提煉并規定了涵蓋IPv4和IPv6網絡通信程序設計中客戶端程序所需要的基本接口方法。這些方法包括:檢查Winsock是否已經初始化的IsInit();對Winsock進行初始化的Init();連接遠程服務器的ConnectServ();斷開與該遠程服務器某端口連接的DisConnectServ();設置建立連接超時時間的SetTimeout();發送數據的SendData()和接收數據的RcvData()等。父類CClient的基本方法如下:

class CClient

{

private:

…

public:

virtual bool Islnint();//初始化檢查

virtual void Init();//初始化

virtual char* ConnectServ(char* IP,int_port);

virtual bool DisConnectServ(int port);//斷開

virtual void SendData(char*data,int len);//發送

virtual char*RcvData();//接收

virtual void SetTimeout(int sec,int usec);

virtual void ReleaseBuf(char*buff);//釋放緩沖

……

}

其中:多數方法被設計和實現為virtual類型,以支持和實現在具體應用中的動態綁定。同時,上層應用程序開發者還可以根據本設計方法,針對自己的應用程序所約定的通信協議,在本套基本接口的基礎上輕松地進行擴展。

2.1.2IPv4客戶端接口類的設計

具體完成IPv4通信功能的接口類CClientv4繼承自父類CClient(圖2),其所提供的接口方法與父類CClient所規定的接口方法相同,但其具體底層實現則依照IPv4下的socket函數使用方法完成。其中:此類的public方法ConnectServ()提供連接遠程IPv4服務器的功能,其內部實現流程的重要細節包括:首先使用Init()初始化Winsock,然后使用socket()函數創建socket,接下來可以使用ioctlsocket()設置非阻塞的連接方式,再使用bind()將該socket綁定到本地地址,使用con nect()向遠程IPv4服務器發起連接請求,設置超時時間,并調用select()檢查是否可讀,成功后調用ioctlsocket()將該socket設置為阻塞模式。

2.1.3IPv6客戶端接口類的設計

與CClientv4類相類似,由類CClientv6來提供具體的實現IPv6通信的功能,該類也繼承自CClient(圖2),其所提供的public方法中包含了其父類CClient所規定的所有公共方法。與CClientv4類不同的是,其具體底層實現則參照IPv6下的socket函數使用方法來完成。

此類的方法ConnectServ()提供連接遠程IPv6服務器的功能,其內部實現流程與CClientv4類的方法ConnectServ()有較大差異:它首先使用Init()初始化Winsock,然后填寫hint模板,準備創建用于連接服務器的socket,再調用getaddrinfo()解析服務器地址,最后使用socket()函數創建socket;接下來可以選用ioctlsocket()設置非阻塞的連接方式,再使用connect()向遠程IPv6服務器發起連接請求,設置超時,并調用select()檢查是否可讀,調用freeaddrinfo()釋放解析地址時返回的地址列表,成功后可以選用ioctlsocket()將該socket設置為阻塞模式。

2.2服務器端模塊的設計

對于用來完成網絡通信中的服務器端的功能部分,同樣可以采用類繼承的思想。先設計并實現通用的抽象接口父類,然后根據基本socket函數在IPv4和IPv6下的使用差別,分別繼承此接口類,依照統一的接口格式實現支持IPv4和IPv6通信功能的具體接口類。根據UML中類圖的畫法,此模塊的框架可以描述如圖3所示。

2.2.1服務器端抽象接口父類的設計

在類CSrvThread中,提煉出了包含IPv4和IPv6網絡通信程序設計中服務器端程序所需要的基本接口方法。這些方法主要有:用于啟動線程的Start();用于終止線程的Stop();用于獲取接收到的數據包鏈表中的第一個包的GetFirstRcv Data();用于刪除接收到的數據包鏈表中的第一個包的DelFirstRcvData();用于設置超時時間的SetTimeout();用于設置偵聽的最大連接數的SetMaxConn()等。多數方法被設計為virtual類型,以支持和實現在具體應用中的動態綁定。

class CSrvThread:public CThread

{

private:

……

public:

virtual void Start();//啟動線程

virtual void Stop();//暫停線程

virtual void Release();//釋放資源

virtual char*GetFirstRcvData();

virtual void DelFirstData();

virtual void SetTimeout(long sec,long u_sec);

virtual void SetMaxConn(int maxconn);

……

};

值得注意的是,既可直接利用開發工具提供的線程類來作為類CThread使用,也可自行設計實現。

2.2.2IPv4服務器端接口類的設計

具體完成IPv4服務器端通信功能的接口類CSrvLst v4Thread繼承自父類CSrvThread,其所提供的接口方法包含了父類CSrvThread所規定的主要方法,具體底層實現則依照IPv4下socket函數的使用來進行。

該類的方法StartUp()實現為:初始化Winsock、綁定本地地址并進行偵聽。其流程為:首先,調用WSAStartup()函數初始化Winsock,創建socket準備進行偵聽,調用gethostname()和gethostbyname()函數獲得主機地址信息,再調用bind()將該socket綁定到本地,最后調用listen()開始偵聽。需要注意的是,開發者還要根據所開發軟件的實際需求,設計與之相配套的接收線程接口類,該類需要處理少量與協議相關的細節。

2.2.3IPv6服務器端接口類的設計

類似地,完成IPv6服務器端通信功能的類CSrvLstv6 Thread也繼承自類CSrvThread,其所提供的接口方法包含了父類CSrvThread所規定的主要接口方法,其底層實現則依照IPv6下的socket函數的使用法則進行。

對該類的重要方法startUp(),根據IPv6下特有的socket函數,可以實現為:初始化Winsock,綁定本地地址并開始偵聽。其具體流程為:先調用WSAStartup()函數初始化Winsock,然后調用getaddrinfo()解析服務器地址,接著創建socket準備進行偵聽,再調用bind()將該socket綁定到本地,最后調用listen()開始偵聽并調用freeaddrinfo()釋放解析服務器地址時獲得的地址列表。同樣值得注意的是,還需要根據所開發軟件的實際需求,設計與之相配套的接收線程類,該類也需要處理少量與協議相關的細節。

3方法分析與應用舉例

使用此種設計方法,能夠使本文的面向雙棧的編程變得非常輕松,無須過多地考慮和處理涉及IPv6協議的細節,就能使用與IPv4協議下的類似方法來編制程序,有效提高了開發效率。IPv4下的網絡編程和IPv6下的網絡編程幾乎可以做到一致。應用實例如下:

void main()

{

……

CClient*com1=new CClientv4();//創建IPv4客戶端網絡組件

CClient*com2=new CClientv6();//創建IPv6客戶端網絡組件

……

com1->lnit();//初始化

com2->lnit();

……

com1->ConnectServ(\"202.197.4.33\",800);

//連接遠程IPv4服務器

com2->ConnectServ(\"2001.250:f007:c:213:72ff:feb6:179\",600);

……

com1->SendData(\"Hello!\",6);//與服務器進行數據交互

com2->SendData(\"World!\",6);

……

com1->DisConnPro();//斷開連接

com2->DisConnPro();

……

}

同樣,本設計方法中給出的接口類CSrvThread、CSrvLstv4Thread、CSrvLstv6Thread的使用方法也類似于上例,在此就不再舉例說明。采用這兩個模塊進行網絡軟件開發,不僅可以忽略由于IPv4/與IPv6不同協議差別造成的不同編程接口差異,方便開發,同時支持IPv4/、IPv6雙協議棧的軟件系統,而且編程人員還可以根據自己的實際需要來決定當前是否實現其中的IPv4或IPv6通信功能,具有較強的可擴展性。同時,開發者只要在最開始處根據自己的具體需要(是利用IPv4通信還是利用IPv6通信),創建相應的客戶端或服務器端組件(IPv4或IPv6),則以后就幾乎可以完全不用考慮自己是使用何種通信協議進行通信,使程序員和用戶均能很快地適應基于IPv6協議的開發與使用,易用性高。

最具遠景意義的是,對于目前大多只支持IPv4通信的網絡軟件而言,本文所提出的設計方法提供了一個方便的向IPv6升級的解決方案。采用該方法,這些網絡軟件的原有功能和實現幾乎無須作過多修改,只需獨立地添加IPv6通信功能模塊以及設計和擴充頂層通信模塊,就可以實現升級為支持雙棧通信的目標。

4結束語

本文分析了一般的網絡系統的通信流程,結合一般的功能需求,利用類繼承設計了支持雙棧通信的模塊,并結合應用實例進行了解釋。本文對支持IPv4/IPv6雙棧的通信模塊設計方法進行了分析,并詳細分析和描述了支持IPv4/IPv6的網絡通信模塊的設計,結合實例分析和解釋了此種設計方法的長處。隨著基于IPv6的應用需求日益增大,越來越多的網絡應用系統要求提供對使用IPv4和IPv6通信的同時支持,本文所設計的模塊中提出的方法實用性在這些應用系統的具體開發過程中將得到進一步的體現。

參考文獻:

[1]

RFC 791,Internet protocol[S].

[2]RFC 2460,Internet protocol,version 6 (IPv6)[S].

[3]MIGUEL T P de,CASTRO M.Programming guidelines on transition to IPv6[C]//Proc ofNAv6TF.2003:351-415.

[4]FIUCZYNSKI M E,LAM V K,BERSHAD B N.The design and implementation of an IPv6/IPv4 network address and protocol translator[C].[S.l.]:USENIX Press.1998:271-282.

[5]KATAGIRI H, HIRAKAWA K,HU J.Genetic:network programming:application to intelligent agents[C]//Proc ofIEEE.2000:3829-3834.

“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”

主站蜘蛛池模板: 99精品免费在线| 美女内射视频WWW网站午夜 | 亚洲精品另类| 日韩精品欧美国产在线| 婷婷色中文| 国产91精品调教在线播放| av天堂最新版在线| 国产亚洲精品无码专| 亚洲国产天堂久久综合| 中文国产成人精品久久| 新SSS无码手机在线观看| 国产麻豆aⅴ精品无码| 一边摸一边做爽的视频17国产| 亚洲嫩模喷白浆| 亚洲国产成人精品无码区性色| 91国内视频在线观看| 欧美www在线观看| 中文字幕 日韩 欧美| 国产青榴视频| 亚洲精品中文字幕无乱码| 精品伊人久久久久7777人| a毛片免费看| 国产精品男人的天堂| 五月天天天色| 91精品国产一区自在线拍| 精品99在线观看| 一级毛片免费播放视频| 成人在线不卡| 黄色一级视频欧美| 午夜视频在线观看免费网站 | 性喷潮久久久久久久久| 99re在线视频观看| 亚洲国产日韩一区| 国产成人综合亚洲欧洲色就色| 欧美成在线视频| 91在线视频福利| 少妇人妻无码首页| 真实国产乱子伦视频| a级毛片免费看| 高清色本在线www| 久久综合干| 亚洲一区免费看| 99一级毛片| 久久影院一区二区h| 久久久久久国产精品mv| 丁香婷婷在线视频| 欧美在线三级| 婷五月综合| 中国美女**毛片录像在线| av在线人妻熟妇| 免费看美女毛片| 亚洲精品午夜天堂网页| 女同国产精品一区二区| 日韩在线成年视频人网站观看| av色爱 天堂网| 好吊色妇女免费视频免费| 久久综合色视频| 久久久久无码国产精品不卡| 日韩欧美国产综合| 国产第一页亚洲| 亚洲国产一区在线观看| 91视频99| 亚洲香蕉久久| 最新痴汉在线无码AV| 国产黑人在线| 亚洲欧洲一区二区三区| 亚洲成a人片77777在线播放| 少妇精品在线| 中文字幕不卡免费高清视频| 中文字幕乱妇无码AV在线| 国产免费久久精品99re不卡| 亚洲91在线精品| 99热6这里只有精品| 成人国产免费| 国产精品久线在线观看| 97视频在线精品国自产拍| 国产精品香蕉在线| 日本精品αv中文字幕| 色婷婷丁香| 色九九视频| 欧美精品H在线播放| 欧美国产视频|