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

        ?

        網(wǎng)絡仿真平臺OMNetPP在網(wǎng)絡類課程教學中的應用

        2011-06-26 12:51:20
        浙江科技學院學報 2011年4期
        關鍵詞:服務端IP地址交換機

        王 華

        網(wǎng)絡通訊類課程是許多工科專業(yè)重要必修課程,也是一門非常實用,能很好適應社會需求的課程。但是,在該類課程教學過程中往往存在理論較多、較空洞抽象的問題,學生看不到具體的網(wǎng)絡運行方式,而僅僅停留在概念層面的認識,而且網(wǎng)絡類課程實驗硬件平臺價格不菲,不同的實驗,需要不同的硬件支撐。采用網(wǎng)絡仿真軟件可以很方便快捷地建立網(wǎng)絡拓撲、仿真經(jīng)典網(wǎng)絡模型,并且可以查看網(wǎng)絡拓撲中每個網(wǎng)絡模塊的動態(tài)變化的參數(shù)結果,同時還可以生成實時仿真數(shù)據(jù)圖。OMNetPP就是這樣一個優(yōu)秀的開源的基于模塊化的網(wǎng)絡仿真平臺,作為離散事件仿真器,OMNetPP具備強大且完善的圖形界面接口和嵌入式仿真內(nèi)核;OMNetPP可運行于多個操作系統(tǒng)平臺,并且可簡便定義網(wǎng)絡拓撲結構,具備編程,調試和跟蹤支持等功能[1]。OMNetPP主要用于通信網(wǎng)絡和分布式系統(tǒng)的仿真,同時還適合離散事件系統(tǒng)的模擬[2]。

        1 OMNetPP體系結構

        OMNetPP主要由仿真內(nèi)核庫(simulation kernel library)、網(wǎng)絡描述語言的編譯器(network description compiler)、圖形化的網(wǎng)絡編輯器(graphical network description editor,GNED)、仿真程序的圖形化用戶接口環(huán)境TKEnv和仿真程序的命令行用戶接口環(huán)境Cmd Env等組成。另外,對于數(shù)據(jù)的輸出,平臺還提供了圖形化的矢量輸出工具Plove和標量輸出工具Scalar[3]。OMNetPP仿真平臺同時還提供了可供其他高級編程語言如VC2005等編程接口,通過VC2005程序調用OMNetPP仿真平臺的Sim內(nèi)核和類庫,可以實現(xiàn)自定義的網(wǎng)絡模型的仿真模擬。OMNetPP的結構體系如圖1所示。

        圖1 OMNetPP體系結構圖Fig.1 Structure of OMNetPP

        一個網(wǎng)絡模型在OMNetPP仿真平臺中通常是由分層的嵌套的模塊組成的,頂層模塊為系統(tǒng)模塊,系統(tǒng)模塊由組合模塊組成,組合模塊由簡單模塊組成[3],簡單模塊還可以由它們自身的子模塊組成,如圖2所示。OMNetPP模塊嵌套的深度可以是無窮的,模塊與模塊之前是通過消息來進行通信的,OMNetPP的簡單模塊是整個網(wǎng)絡模型的活動模塊,采用C++語言簡定義功能。

        圖2 簡單模塊和組合模塊關系Fig.2 Relationship between simple module and composite module

        在OMNetPP仿真平臺中,圖形化的網(wǎng)絡編輯器gned.exe可以將所有網(wǎng)絡模塊圖形化地實現(xiàn),包括每個模塊之間的連接關系,相應的文件擴展名為ned的文件只需要將編輯好的ned文件連同每個模塊的C++文件及OMNetPP.ini配置文件放置在一個目錄下面,然后啟動VC2005工程就可以進行聯(lián)合編譯。

        2 客戶端與服務端網(wǎng)絡通信的仿真實例

        通信流程:多個客戶端通過交換機與服務器相連,每個客戶端發(fā)送的網(wǎng)絡數(shù)據(jù)包首先經(jīng)過交換機,然后被轉發(fā)到服務器。服務器接收到數(shù)據(jù)包后向交換機發(fā)送響應數(shù)據(jù)包,交換機根據(jù)數(shù)據(jù)包中的目的地址,轉發(fā)給相應的客戶端。該客戶端接收到交換機轉發(fā)來的服務端數(shù)據(jù)包后延遲一定時間后繼續(xù)向服務端發(fā)送網(wǎng)絡數(shù)據(jù)包,一直循環(huán)下去。

        網(wǎng)絡描述(ned)文件設計如下:整個網(wǎng)絡模塊CSNetwork由客戶端簡單模塊、交換機簡單模塊、服務器簡單模塊組成。3個簡單模塊之間的通信是用消息(網(wǎng)絡數(shù)據(jù)包)來實現(xiàn)的,3個簡單模塊之間存在一系列的連接關系,這里每個客戶端模塊都和交換機模塊進行雙向連接,交換機模塊和服務器模塊進行雙向連接,如圖3所示。

        圖3 客戶端與服務端網(wǎng)絡通信拓撲結構圖Fig.3 Topology of communication between client and server

        圖3 中,左側屬性列表中列舉了客戶端簡單模塊、服務端簡單模塊、交換機簡單模塊和CSNetwork組合模塊。客戶端簡單模塊聲明了字符串類型的客戶端IP地址參數(shù)IPAddress,以及消息輸入輸出門(就是指網(wǎng)絡連接);交換機簡單模塊僅僅聲明了所有的進出交換機的連接,也就是in[]和out[]門矢量;服務端模塊聲明了IP地址和接收的總幀數(shù)2個參數(shù),同時也聲明了和交換機連接的數(shù)據(jù)包進出的2個連接。整個CSNetwork通信網(wǎng)組合模塊的描述如下:

        module CSNetwork

        parameters:

        ClientNum:numeric const;

        submodules:

        client1:Client;

        display:"i=device/laptop_l;p=85,77";

        client3:Client;

        display:"p=448,172;i=device/pc3_l";

        client2:Client;

        display:"p=348,52;i=device/pc_l";

        switch:Switch;

        display:"p=228,156;i=device/switch_l;o=#0000ff";

        server:Server;

        display:"p=233,314;i=device/server_l";

        client4:Client;

        display:"p=48,276;i=device/pc4_l";

        client5:Client;

        display:"p=432,304;i=device/laptop_l";

        connections:

        client1.out-->switch.in++;

        client2.out-->switch.in++;

        client3.out-->switch.in++;

        client4.out-->switch.in++;

        client5.out-->switch.in++;

        switch.out++-->client1.in;

        switch.out++-->client2.in;

        switch.out++-->client3.in;

        switch.out++-->client4.in;

        switch.out++-->client5.in;

        switch.out++-->server.in;

        server.out-->switch.in++;

        display:"b=471,397";

        endmodule

        network CSNetwork:CSNetwork

        endnetwork

        該組合模塊中定義了客戶端的個數(shù)、每個子模塊的顯示位置、顯示的圖標參數(shù)、每個子模塊之間存在的連接關系等。

        圖3右側是客戶端與服務端網(wǎng)絡通信的拓撲結構圖,程序運行后OMNetPP內(nèi)核將會以動畫的形式顯示拓撲結構的動態(tài)數(shù)據(jù)流動。每個子模塊都是用C++語言實現(xiàn)具體的功能的,包括數(shù)據(jù)的初始化,對接收的網(wǎng)絡數(shù)據(jù)包進行處理等??紤]到傳遞消息的功能特殊性,包括獲取消息源、設定目的地址等。本例中特別定制了消息的特殊部分,也就是對cMessage類進行了重載,生成CComMsg類。步驟如下:首先用文本編輯器編輯一個擴展為msg的消息文件ComMsg.msg,該消息的具體數(shù)據(jù)成員定義如下:

        message CComMsg

        {

        fields:

        string source;//源地址

        string destination;//目的地址

        int PackSize;//包大小

        }

        新的消息格式中定義了數(shù)據(jù)源、目的地址及數(shù)據(jù)包大小,然后用OMNetPP安裝目錄下Bin子目錄中的opp_msgc工具將ComMsg.msg自定義消息文件轉化為ComMsg_m.cc這樣一個C++文件,以后客戶端模塊、交換機模塊、服務端模塊相互通信的消息都從CComMsg類繼承。

        客戶端簡單模塊的C++文件中,必須調用OMNetPP核心注冊宏Define_Module()注冊用戶定義的客戶端C++類CClient,只有注冊后才可被OMNetPP內(nèi)核調用[4]。在客戶端類(CClient)中,有默認的initialize()和handleMessage(cMessage*msg)兩個方法,initialize()主要是做一些數(shù)據(jù)的初始化,比如本例中客戶端IP地址的讀取,服務器端地址的讀取,以及客戶端等,定義如下:

        void CClient::initialize()

        {

        std::string strClient=name();//獲取當前客戶端的名稱

        CComMsg*pMsg=new CComMsg("Client create msg");//客戶端創(chuàng)建消息

        pSelfMsg=new cMessage("self message");//創(chuàng)建發(fā)送給自己的消息用于延時

        pk LenBits=&par("pk LenBits");//讀取當前客戶端的包長

        txRate=par("tx Rate");//讀取當前客戶端數(shù)據(jù)包發(fā)送速率

        cPar*ParObj=&par("IPAddress");//獲取IP地址參數(shù)對象

        strIPAdd=ParObj->stringValue();//讀取當前客戶端的IP地址

        pMsg->setSource(strIPAdd.c_str());//設置要發(fā)送消息的數(shù)據(jù)源地址

        cModule*server=simulation.moduleBy Path("server");//獲取 server模塊指針

        ParObj=&(server->par("IPAddress"));//獲取服務端的IP地址

        pMsg->setDestination(ParObj->stringValue());//設置要發(fā)送消息的目的地址

        send(p Msg,"out");//向輸出連接發(fā)送消息

        }

        在handleMessage事件中主要接收各種消息包括自定義消息、交換機轉發(fā)過來的消息等,根據(jù)不同的要求對不同的消息進行處理。本例中對于客戶端自身發(fā)送的消息主要是用于延時,當接收到自身消息以后,此時可以對上次接收的交換機轉發(fā)的網(wǎng)絡數(shù)據(jù)包進行處理。如果接收的消息是交換機轉發(fā)過來的消息,則此時客戶端并不立即發(fā)送響應數(shù)據(jù)包給服務器,而是先保存此消息,然后給自己發(fā)送一個延時數(shù)據(jù)包,延時的時間由客戶端的發(fā)送速率和數(shù)據(jù)包長度決定。核心處理代碼如下:

        void Client::handleMessage(cMessage*msg)

        {

        if(!msg->isSelf Message())//如果不是自定義消息

        {

        pMyMsg=check_and_cast<CHost*>(msg);//將交換機轉發(fā)的消息保存下來

        double Delay Time=pk LenBits->doubleValue()/tx Rate;//計算延時時間

        scheduleAt(simTime()+Delay Time,pSelf Msg);//給自己發(fā)送消息,以作延時用

        return;

        }

        else//自定義消息,則繼續(xù)向服務器發(fā)送消息

        {

        if(pMyMsg)//如果已經(jīng)接收到服務器發(fā)送來的消息

        {

        char Tip[100]="";

        sprintf_s(Tip,"%s receive self-message and send msg to server",name());

        ev<<Tip<<endl;//離散事件界面顯示提示信息

        std::string strDestIP=pMyMsg->getDestination();//獲取消息的目的地址

        pMyMsg->setDestination(p My Msg->getSource());//設置發(fā)送消息的目的地址

        pMyMsg->setSource(strDestIP.c_str());//設置消息的數(shù)據(jù)源地址

        send(pMyMsg,"out");//向服務器發(fā)送消息

        }

        }

        }

        與客戶端簡單模塊的C++實現(xiàn)一樣,服務端簡單模塊的C++實現(xiàn)也要首先調用OMNetPP核心注冊宏Define_Module(),注冊服務端模塊后,在服務端模塊的initialize()方法中初始化模塊的參數(shù),同時在handleMessage事件響應方法中處理來自各客戶端通過交換機轉發(fā)過來的消息(數(shù)據(jù)包),核心代碼如下:

        void Server::handleMessage(cMessage*msg)

        {

        CHost*package=check_and_cast<CHost*>(msg);//強制類型轉換

        std::string strDestIP=package->getDestination();//提取網(wǎng)絡數(shù)據(jù)包的目的地址

        cPar*ParObj=&par("IPAddress");//獲取IP地址參數(shù)信息

        std::string strServIP=ParObj->stringValue();//將IP地址對象轉為字符串類型

        std::string strSrcIP=package->getSource();//數(shù)據(jù)包的來源(IP地址)

        if(strDestIP==strServIP)//如果是地址匹配

        {

        bubble("send msg to client");//提示發(fā)送消息

        package->setSource(strServIP.c_str());//設置消息(數(shù)據(jù)包)來源

        package->setDestination(strSrcIP.c_str());//設置消息(數(shù)據(jù)包)地址

        send(package,"out");//發(fā)送消息

        }

        }

        交換機簡單模塊C++代碼的結構和客戶端、服務端代碼結構類似,在其initialize方法中主要是獲取所有客戶端的IP地址信息和服務端的IP地址信息,在其handleMessage方法中主要是將服務端發(fā)送來的消息根據(jù)目的地址轉發(fā)給相應的客戶端,將客戶端發(fā)送來的消息轉發(fā)給服務端,轉發(fā)不做任何延時。

        OMNetPP程序啟動后,首先加載程序相同目錄下的所有NED文件,這些文件在OMNetPP.ini文件中被指定加載[5],然后內(nèi)核加載所有相關的模塊對應的圖片信息,還有相應配置文件中的參數(shù)的初始化值[6]。選擇相應的網(wǎng)絡模型名稱,并且運行后生成圖4和圖5。

        圖4 TKEnv模擬環(huán)境離散事件狀態(tài)顯示Fig.4 Discrete event of TKEnv

        圖5 網(wǎng)絡數(shù)據(jù)包交換動態(tài)效果圖Fig.5 Dynamic exchange of network packet

        圖4 中,左側樹形列表中呈現(xiàn)的是網(wǎng)絡組合模塊中所有的子模塊信息,包括每個子模塊當前觸發(fā)的事件信息、參數(shù)信息等;樹列表的下部是當前組合模塊中所有事件類型,包括客戶端發(fā)送數(shù)據(jù)包給服務端的事件和服務端發(fā)送數(shù)據(jù)包給客戶端的事件;右側下部區(qū)域藍色字體表示仿真開始后某一個時間點發(fā)生的事件,本例中很多事件是并行發(fā)生的。在圖4中,可以很清楚地看到子模塊發(fā)送的自消息數(shù)目(發(fā)送給自身的數(shù)據(jù)包),發(fā)送給其他子模塊消息數(shù)目,整個網(wǎng)絡的事件總數(shù),每個事件的觸發(fā)時間,仿真的速度等信息。而圖5則是網(wǎng)絡數(shù)據(jù)包的動態(tài)交換效果圖,該圖實時地現(xiàn)實網(wǎng)絡數(shù)據(jù)包的流向。

        3 結 語

        通過基于OMNetPP仿真平臺,可以對數(shù)據(jù)通訊與計算機網(wǎng)絡課程中的各種網(wǎng)絡模型,諸如ALOHA協(xié)議、路由協(xié)議、令牌環(huán)及Socket通信等,進行仿真,用C++語言實現(xiàn)網(wǎng)絡模型中的每個模塊,然后用VC2005連接OMNetPP內(nèi)核編譯后就可實現(xiàn)網(wǎng)絡模型中數(shù)據(jù)包流動的動態(tài)效果。這些網(wǎng)絡仿真對于數(shù)據(jù)通訊與計算機網(wǎng)絡等課程的教學起到重要的作用,學生可以很直觀地看到網(wǎng)絡模型的運行效果,同時學生自己還可以擴展每個模塊,讓網(wǎng)絡模塊按照自己的思路處理網(wǎng)絡數(shù)據(jù)包。OMNetPP仿真平臺不僅可以用于有線網(wǎng)絡的仿真,而且還可以用于諸如3G通信、無線傳感器網(wǎng)絡等無線網(wǎng)絡的模擬仿真。

        [1] OMNetPP工作組.OMNetPP用戶幫助手冊[EB/OL].[2010-11-20].http://www.omnetpp.org/doc/omnetpp41/manual/usman.html.

        [2] OMNetPP工作組.OMNetPP中文使用手冊[EB/OL].[2010-11-20].http://wenku.baidu.com/view/3f3f0d3b87c24028915fc3b9.html.

        [3] VARGA A.OMNeT++Discrete Event Simulation System User Manual(Version 3.2)[EB/OL].[2011-11-20].http://www.omnetpp.org/doc/manual/usmen.html.

        [4] K?PKEA,SWIGULSKI M,WESSEL K,et al.Simulating wireless and mobile networks in OMNeT++the MiXiM vision[C]//Proceedings of the 1st international conference on simulation tools and techniques for communications,networks and systems&workshops.Marseille:[s.n.],2008.

        [5] 操敏,李文鋒,袁兵.基于OMNeT++的Leach協(xié)議的仿真研究[J].交通與計算機,2007(1):125-128.

        [6] 鐘幼平,黃佩偉,汪波.基于OM NeT++平臺的SMAC協(xié)議仿真實現(xiàn)[J].信息技術,2008(2):29-33.

        猜你喜歡
        服務端IP地址交換機
        鐵路遠動系統(tǒng)幾種組網(wǎng)方式IP地址的申請和設置
        修復損壞的交換機NOS
        云存儲中基于相似性的客戶-服務端雙端數(shù)據(jù)去重方法
        新時期《移動Web服務端開發(fā)》課程教學改革的研究
        消費導刊(2018年8期)2018-05-25 13:19:48
        使用鏈路聚合進行交換機互聯(lián)
        在Windows Server 2008上創(chuàng)建應用
        基于SNMP的IP地址管理系統(tǒng)開發(fā)與應用
        黑龍江電力(2017年1期)2017-05-17 04:25:16
        PoE交換機雷擊浪涌防護設計
        羅克韋爾自動化交換機Allen-Bradley ArmorStratix 5700
        自動化博覽(2014年9期)2014-02-28 22:33:16
        “鴿子”玩升級 黑你沒商量
        日本一区二区三级在线观看| 免费一区二区高清不卡av| 亚洲乱码国产乱码精华| 欧美牲交a欧美牲交aⅴ免费下载 | 日韩在线视精品在亚洲| 中文字幕久区久久中文字幕| 手机av在线中文字幕| 久久久精品久久久久久96| 成在线人av免费无码高潮喷水| 国产婷婷一区二区三区| 国产免费破外女真实出血视频 | 激情综合网缴情五月天| av男人的天堂手机免费网站 | 99亚洲男女激情在线观看| 日韩激情小视频| 五月丁香六月综合激情在线观看| 国产成人精品无码一区二区老年人 | 亚洲国产av自拍一区| 亚洲产国偷v产偷v自拍色戒| 色拍拍在线精品视频| 久久精品综合国产二区| 国产精品亚洲av一区二区三区| 少妇人妻综合久久中文字幕| 日本19禁啪啪吃奶大尺度| 97久久精品人人做人人爽| 高潮社区51视频在线观看| 一区二区国产视频在线| 日韩综合无码一区二区 | 蜜桃视频在线观看免费亚洲| 欧美黑人性暴力猛交喷水黑人巨大 | 免费无码av片在线观看| 无码高潮少妇毛多水多水免费| 久久一区二区国产精品| 人人妻人人狠人人爽天天综合网| 亚洲av日韩av综合| 亚洲AV秘 无码二区在线| 白白色青青草视频免费观看| 亚洲精品一区二区高清| 亚洲国产精品毛片av不卡在线 | 日韩av在线毛片| 亚洲毛片av一区二区三区|