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

計算機網(wǎng)絡(luò)啟發(fā)式NS-3仿真案例教學(xué)模式

2018-10-30 09:53:34蔡文郁劉曉玲
實驗室研究與探索 2018年9期
關(guān)鍵詞:設(shè)置案例

蔡文郁, 劉曉玲

(杭州電子科技大學(xué) 電子信息學(xué)院,杭州 310018)

0 引 言

《計算機網(wǎng)絡(luò)系統(tǒng)》[1]是本科教學(xué)體系中的一個重要分支,其旨在讓學(xué)生掌握抽象的計算機網(wǎng)絡(luò)系統(tǒng)知識的同時,并能通過自己的操作和改進的協(xié)議進行網(wǎng)絡(luò)性能仿真結(jié)果的分析,如果只靠黑板教學(xué)是難以達(dá)到這一教學(xué)目標(biāo)。網(wǎng)絡(luò)仿真[3]是通過計算機技術(shù)搭建網(wǎng)絡(luò)結(jié)構(gòu)和實現(xiàn)網(wǎng)絡(luò)協(xié)議的模擬網(wǎng)絡(luò)行為,是一項重要的計算機網(wǎng)絡(luò)仿真技術(shù)。相比于搭建一個實驗室測試網(wǎng)絡(luò)平臺,網(wǎng)絡(luò)仿真技術(shù)可以使用相對較少的時間和較低的費用基本實現(xiàn)所需要研究的網(wǎng)絡(luò)模型,作為《計算機網(wǎng)絡(luò)系統(tǒng)》課程中一種重要的輔助實驗手段。NS-3[4]作為一種開源、免費的網(wǎng)絡(luò)仿真軟件,可以實現(xiàn)對大部分網(wǎng)絡(luò)協(xié)議的仿真,其具有開源性,學(xué)生可以在其提供的已有的模塊下進行改進,大大提升學(xué)生的學(xué)習(xí)興趣。本文將這種開源的網(wǎng)絡(luò)仿真軟件NS-3應(yīng)用在計算機網(wǎng)絡(luò)課程的教學(xué)過程中,通過設(shè)計一些啟發(fā)式實驗案例,讓學(xué)生了解NS-3仿真軟件,讓學(xué)生對網(wǎng)絡(luò)通信協(xié)議有直觀深入的理解,進而提高教學(xué)效果。

1 NS-3網(wǎng)絡(luò)仿真平臺

網(wǎng)絡(luò)仿真(Network Simulator-3,NS-3)是一種旨在學(xué)術(shù)研究和教學(xué)需要的離散事件模擬器,其在可擴展性、移植性、開源性和完整性等方面的特征都優(yōu)于現(xiàn)有的大多數(shù)網(wǎng)絡(luò)模擬器。NS-3可以構(gòu)建各種網(wǎng)絡(luò)結(jié)構(gòu),可以仿真模擬各種協(xié)議并對其進行比較和改進。NS-3中的模塊支持兩種語言編寫,分別是C++和Python。NS-3的仿真結(jié)果有靜態(tài)和動態(tài)兩種形式,其中靜態(tài)結(jié)果有文本文件和圖表方式,動態(tài)圖包括離線動畫演示工具NetAnim和在線可視化模塊PyViz。NS-3組織結(jié)構(gòu)[5]和模型間的依賴關(guān)系如圖1所示,依次為核心模塊(Core)、網(wǎng)絡(luò)模塊(Network)、互聯(lián)網(wǎng)模塊(Internet)、移動模塊(Mobility)、應(yīng)用模塊(Applications)和Helper類。每個模塊都有自己的類和實現(xiàn)方法,各個模塊相互獨立和實現(xiàn)功能。NS-3這種分層次的模塊組織結(jié)構(gòu),類似于TCP/IP協(xié)議,使各層各負(fù)其責(zé),在物理上、邏輯上相互獨立,便于研究者設(shè)計自己的網(wǎng)絡(luò)模型。

圖1 NS-3組織結(jié)構(gòu)

NS-3網(wǎng)絡(luò)仿真平臺搭建包括8個步驟,如圖2所示。

圖2 NS-3仿真平臺搭建流程圖

2 啟發(fā)式案例設(shè)計

2.1 有線無線混合實驗案例

此案例的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,多個無線客戶端節(jié)點需要訪問PC服務(wù)器節(jié)點,其中無線客戶端節(jié)點首先與無線AP節(jié)點連接,無線AP節(jié)點通過以太網(wǎng)連接PC服務(wù)器。該案例通過NS-3仿真演示實現(xiàn)有線網(wǎng)絡(luò)和無線網(wǎng)絡(luò)的混合通信,仿真過程的動畫演示使用PyViz輔助工具,讓學(xué)生掌握無線WiFi通信技術(shù)以及異型網(wǎng)絡(luò)的綜合使用能力。

圖3 網(wǎng)絡(luò)仿真場景

2.1.1仿真場景

仿真網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,n5、n6是WiFi移動節(jié)點,n0是無線訪問節(jié)點(Access Point,AP),n1~n4是有線局域網(wǎng),n0和n1是點到點的通信鏈路[10]。

圖4 網(wǎng)絡(luò)仿真場景

2.1.2仿真腳本的關(guān)鍵代碼

//“include”函數(shù)來引入NS-3中已編譯模塊,如:點到點模塊(point-to-point)、移動模塊(mobility)等。

#include "ns3/point-to-point-module.h"

#include "ns3/mobility-module.h"

//此代碼中使用了NS-3提供的日志模塊功能,可根據(jù)Logging給出的信息點網(wǎng)絡(luò)環(huán)境進行程序調(diào)試。

NS_LOG_COMPONENT_DEFINE ("ThirdScriptExample");

//通過調(diào)用CommandLine命令為程序引入命令行模式,用戶通過命令行模式去設(shè)定參數(shù)來改變程序中參數(shù)值,

CommandLine cmd; cmd.Parse (argc,argv);

//創(chuàng)建2個節(jié)點用于連接點到點鏈路

NodeContainer p2pNodes; p2pNodes.Create (2);

//構(gòu)建點對點連接,通過PointToPointHelper類設(shè)置網(wǎng)絡(luò)節(jié)點的點到點鏈路的網(wǎng)絡(luò)設(shè)備和信道屬性

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

//借用Install方法將設(shè)備安裝到節(jié)點中

NetDeviceContainer p2pDevices;

p2pDevices = pointToPoint.Install (p2pNodes);

//創(chuàng)建3個以太網(wǎng)網(wǎng)絡(luò)節(jié)點,并將點到點節(jié)點容器中的第一個節(jié)點加入到CSMA設(shè)備的節(jié)點容器

NodeContainer csmaNodes; csmaNodes.Add (p2pNodes.Get (1)); csmaNodes.Create (3);

//通過CsmaHelper類設(shè)置網(wǎng)絡(luò)節(jié)點的以太網(wǎng)的網(wǎng)絡(luò)設(shè)備和信道屬性,并用Install方法將設(shè)備安裝到節(jié)點中

CsmaHelper csma;

csma.SetChannelAttribute ("DataRate", StringValue

("100Mbps"));

csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));

NetDeviceContainer csmaDevices; csmaDevices = csma.Install (csmaNodes);

//創(chuàng)建2個WiFi網(wǎng)絡(luò)節(jié)點,再將剩余的一個點到點鏈路節(jié)點作為接入點AP

NodeContainer WiFiStaNodes; WiFiStaNodes.Create (2); NodeContainer WiFiApNode = p2pNodes.Get (0);

//通過配置PHY和通道助手來構(gòu)建無線設(shè)備和無線節(jié)點之間的互連通道

YansWiFiChannelHelper channel = YansWiFiChannelHelper::Default ();

YansWiFiPhyHelper phy = YansWiFiPhyHelper::Default ();

WiFiHelper WiFi;

WiFi.SetRemoteStationManager ("ns3::AarfWiFiManager");

WiFiMacHelper mac;

staDevices = WiFi.Install (phy, mac, WiFiStaNodes);

//配置AP節(jié)點

mac.SetType ("ns3::ApWiFiMac", "Ssid", SsidValue (ssid));

NetDeviceContainer apDevices;

apDevices = WiFi.Install (phy, mac, WiFiApNode);

//使用MobilityHelper類設(shè)置WiFi節(jié)點的初始位置和移動模型

MobilityHelper mobility;

mobility.SetPositionAllocator ("ns3::GridPositionAllocator",

"MinX", DoubleValue (-50.0), "MinY", DoubleValue (50.0),

"DeltaX", DoubleValue (5.0),"DeltaY", DoubleValue (-50.0),

"GridWidth", UintegerValue (1),"LayoutType", StringValue ("RowFirst"));

//WiFi節(jié)點的移動模型是隨機游走模型:RandomWalk2dMobilityModel

mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",

"Bounds", RectangleValue (Rectangle (-150, 150, -150, 150)));

//通過InternetStackHelper類安裝協(xié)議棧

InternetStackHelper stack; stack.Install (csmaNodes);stack.Install (WiFiApNode); stack.Install (WiFiStaNodes);

//配置IP地址,點到點鏈路節(jié)點在網(wǎng)段10.1.1.0/24,CSMA節(jié)點在網(wǎng)段10.1.2.0/24,WiFi節(jié)點在網(wǎng)段10.1.3.0/24

Ipv4AddressHelper address;

address.SetBase ("10.1.1.0", "255.255.255.0"); p2pInterfaces = address.Assign (p2pDevices);

address.SetBase ("10.1.2.0", "255.255.255.0"); csmaInterfaces = address.Assign (csmaDevices);

address.SetBase ("10.1.3.0", "255.255.255.0"); address.Assign (staDevices);address.Assign (apDevices);

//設(shè)置以太網(wǎng)節(jié)點3為echo服務(wù)端程序,同時設(shè)置服務(wù)器啟動時間。

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (3));

serverApps.Start (Seconds (1.0));

//設(shè)置WiFi網(wǎng)絡(luò)中的一個節(jié)點為客戶端,并配置相關(guān)屬性

UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);

echoClient.SetAttribute ("MaxPackets", UintegerValue (100));

ApplicationContainer clientApps = echoClient.Install (WiFiStaNodes.Get (nWiFi - 1));

//啟用互聯(lián)網(wǎng)絡(luò)路由作用與建立好的互連網(wǎng)絡(luò)

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

//運行模擬、清空、退出程序

Simulator::Run (); Simulator::Destroy (); return 0;

2.1.3仿真實驗及結(jié)果分析

仿真結(jié)果分析:根據(jù)圖5(a)和(b)可以直觀生動的看出節(jié)點之間的數(shù)據(jù)流動。從圖6可以看出,在終端中輸入編譯代碼并執(zhí)行腳本,從輸出的日志信息可以看出模擬通信場景運行到2 s時客戶端發(fā)送1 024 Byte給地址為10.1.2.4的服務(wù)器,客戶端和服務(wù)器處于不同的網(wǎng)段。之后服務(wù)器收到來自10.1.3.2客戶端的數(shù)據(jù)分組,同時發(fā)送相同字節(jié)給客戶端,而且客戶端成功接收??梢钥吹椒抡娼Y(jié)果與程序中設(shè)定的發(fā)送數(shù)據(jù)包的時間點和數(shù)據(jù)包發(fā)送的發(fā)送端和接收端完全一致。

(a) 初始仿真場景

(b) 混合通信場景

圖5 混合通信仿真場景

圖6 編譯結(jié)果

2.2 點到點中繼通信實驗案例

如圖7所示,節(jié)點之間采用點到點通信,且節(jié)點均處于靜止?fàn)顟B(tài),采用添加中繼節(jié)點的方式實現(xiàn)節(jié)點的數(shù)據(jù)連通。此案例主要用于演示點到點中繼通信的原理,提高學(xué)生中繼通信的感官認(rèn)識,從而激發(fā)學(xué)生學(xué)習(xí)并掌握短距離無線組網(wǎng)技術(shù)的興趣。

圖7 網(wǎng)絡(luò)仿真場景

2.2.1仿真場景

本仿真場景中一共設(shè)置了10個節(jié)點,如圖8所示,其中n2~n11均位于不同的網(wǎng)段,n0和n1屬于中繼節(jié)點,并且設(shè)置節(jié)點n4和節(jié)點n9進行通信。

圖8 網(wǎng)絡(luò)仿真場景

2.2.2仿真腳本的關(guān)鍵代碼

#include "ns3/netanim-module.h"

//構(gòu)建網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),如:設(shè)置節(jié)點0分別與節(jié)點1、2、3、4、5和6連接

pAnim->UpdateLinkDescription (0, 1, oss.str ());

pAnim->UpdateLinkDescription (0, 2, oss.str ());

pAnim->UpdateLinkDescription (0, 3, oss.str ());

pAnim->UpdateLinkDescription (0, 4, oss.str ());

pAnim->UpdateLinkDescription (0, 5, oss.str ());

pAnim->UpdateLinkDescription (0, 6, oss.str ());

// 設(shè)置 IP地址

d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),

Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),

Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));

// 生成XML文件

std::string animFile = "dynamic_linknode.xml" ;

pAnim = new AnimationInterface (animFile);

2.2.3仿真實驗及結(jié)果分析

仿真結(jié)果采用兩種可視化界面PyViz和NetAnim方式觀測,如圖9所示。仿真結(jié)束后使用NetAnim讀取程序執(zhí)行過程中生成的XML文件,可離線演示網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和節(jié)點間數(shù)據(jù)分組流動等動畫過程。

2.3 無線多跳網(wǎng)絡(luò)實驗案例

此仿真的場景是多跳無線網(wǎng)絡(luò)Ad Hoc[11],如圖10所示,其結(jié)構(gòu)采用一種省略無線中介設(shè)備AP而搭建起來的對等網(wǎng)絡(luò)結(jié)構(gòu),只需要安裝無線網(wǎng)卡,就可以實現(xiàn)計算機之間的通信。對于多跳無線自組網(wǎng)絡(luò)來說,路由協(xié)議是非常重要的。其中主動路由協(xié)議和按需路由協(xié)議較為典型,因此仿真了DSR和DSDV兩種路由協(xié)議的建立路徑的過程和結(jié)果分析。此案例主要用于演示無線多跳網(wǎng)絡(luò)的工作原理以及不同路由協(xié)議的性能比較,提升學(xué)生參與網(wǎng)絡(luò)傳輸核心路由協(xié)議設(shè)計的學(xué)習(xí)熱情。

2.3.1仿真場景

本案例是基于Ad-Hoc網(wǎng)絡(luò)[12-14],設(shè)置了20個可隨機移動的節(jié)點,其中節(jié)點2(Node2)為數(shù)據(jù)發(fā)送端,節(jié)點0(Node0)為數(shù)據(jù)接收端。

(a) 點到點通信可視化界面

(b) 仿真拓?fù)浣Y(jié)構(gòu)圖

(c) 數(shù)據(jù)分組統(tǒng)計

(d) 節(jié)點9發(fā)送數(shù)據(jù)

(e) 途徑節(jié)點1和節(jié)點0

(f) 節(jié)點4發(fā)送數(shù)據(jù)

圖9 無線中繼通信演示

圖10 網(wǎng)絡(luò)仿真場景

2.3.2仿真腳本的關(guān)鍵代碼

//設(shè)置節(jié)點的移動模型為隨機路徑

adhocMobility.SetMobilityModel ("ns3::RandomWaypoint MobilityModel",

"Speed", StringValue (speedUniformRandomVariable Stream.str ()),

"Pause", StringValue (pauseConstantRandomVariable Stream.str ()),

"PositionAllocator", PointerValue (taPositionAlloc));

adhocMobility.Install (adhocNodes);

//通過DsdvHelper類引入DSDV路由協(xié)議,同理也可以引入DSR路由協(xié)議。

DsdvHelper dsdv; InternetStackHelper stack; stack.SetRoutingHelper (dsdv);

//設(shè)置節(jié)點0為數(shù)據(jù)接收端,節(jié)點2為數(shù)據(jù)發(fā)送端,且設(shè)置節(jié)點2在20 s時開始發(fā)送數(shù)據(jù)

ApplicationContainer apps_sink = sink.Install (adhocNodes.Get (0));

apps_sink.Start (Seconds (20.0));

OnOffHelper onoff1 ("ns3::UdpSocketFactory", Address (InetSocketAddress (allInterfaces.GetAddress (0), port)));

onoff1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"));

onoff1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));

ApplicationContainer apps1 = onoff1.Install

(adhocNodes.Get (2));

2.3.3仿真實驗及結(jié)果分析

仿真結(jié)果如圖11所示。

(a) DSDV協(xié)議Node2節(jié)點泛洪廣播

(b) DSDV協(xié)議Node2找到的第1條路徑

(c) DSDV協(xié)議Node2找到的第2條路徑

(d) DSR協(xié)議泛洪廣播

(e) DSR協(xié)議Node2找到的第1條路徑

(f) DSR協(xié)議Node2找到的第2條路徑

從可視化動態(tài)仿真過程圖中,可以直觀地看出在同一種動態(tài)變化的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的仿真場景。DSR協(xié)議比DSDV協(xié)議尋找到兩節(jié)點通信路徑所花費的時間要少,這是因為在動態(tài)變化的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)下,由于鄰居信息表需要實時更新,主動路由協(xié)議額外負(fù)荷較高。

3 結(jié) 語

本文將NS-3網(wǎng)絡(luò)仿真平臺引入到《計算機網(wǎng)絡(luò)系統(tǒng)》課程的教學(xué)中,通過在NS-3中構(gòu)建設(shè)計的3種不同網(wǎng)絡(luò)通信協(xié)議啟發(fā)式案例,運用NS-3中多樣化的仿真方式,如Logging、動畫演示工具(NetAnim)和可視化模塊(PyViz)等,將網(wǎng)絡(luò)課程中抽象的理論知識形象直觀地呈現(xiàn)在學(xué)生面前,使學(xué)生對網(wǎng)絡(luò)知識點有了較為直觀的了解,進而激發(fā)學(xué)生探索網(wǎng)絡(luò)知識的欲望,起到事半功倍的效果。當(dāng)學(xué)生熟練掌握NS-3的模塊內(nèi)容和執(zhí)行方式后,還可以繼續(xù)引導(dǎo)學(xué)生向更深層次的計算機網(wǎng)絡(luò)協(xié)議的核心實現(xiàn)與編程技術(shù),為后續(xù)課程的學(xué)習(xí)奠定了一定基礎(chǔ)。

猜你喜歡
設(shè)置案例
中隊崗位該如何設(shè)置
少先隊活動(2021年4期)2021-07-23 01:46:22
案例4 奔跑吧,少年!
少先隊活動(2021年2期)2021-03-29 05:40:48
隨機變量分布及統(tǒng)計案例拔高卷
7招教你手動設(shè)置參數(shù)
發(fā)生在你我身邊的那些治超案例
中國公路(2017年7期)2017-07-24 13:56:38
隨機變量分布及統(tǒng)計案例拔高卷
本刊欄目設(shè)置說明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
一個模擬案例引發(fā)的多重思考
艦船人員編制的設(shè)置與控制
主站蜘蛛池模板: 亚洲三级电影在线播放| 97成人在线观看| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲精品无码日韩国产不卡| 日韩精品专区免费无码aⅴ| 久久黄色影院| 97成人在线视频| 一级在线毛片| 一区二区三区国产精品视频| 国产极品美女在线| 国产精品va免费视频| 亚洲天堂网在线视频| 亚洲日本精品一区二区| 欧美a级在线| 国产亚洲精品91| 日韩第九页| 精品国产乱码久久久久久一区二区| 综合久久五月天| 欧美色伊人| 国产一区二区丝袜高跟鞋| 国产喷水视频| 亚洲欧美成人在线视频| 国产在线第二页| 国产交换配偶在线视频| 波多野结衣无码中文字幕在线观看一区二区 | 亚洲精品综合一二三区在线| 久久精品人人做人人爽电影蜜月| 六月婷婷精品视频在线观看| 67194在线午夜亚洲| 久久中文电影| 国产精品女在线观看| 天堂岛国av无码免费无禁网站| 久久黄色免费电影| 亚洲成人网在线播放| 日韩欧美国产中文| 亚洲成人在线免费| 日本黄色a视频| 欧美有码在线观看| 欧美日韩91| 中文无码精品a∨在线观看| 亚洲第一国产综合| 国产精品免费久久久久影院无码| 自拍偷拍欧美| 久久亚洲中文字幕精品一区| 波多野结衣视频网站| 亚洲天堂成人| 91免费观看视频| 日韩福利视频导航| 九一九色国产| 人人91人人澡人人妻人人爽| 中文字幕不卡免费高清视频| 亚洲国产精品美女| 亚洲天堂视频网站| 亚洲精品欧美日本中文字幕| 国产乱人视频免费观看| 国产第二十一页| 国产精品视频久| 亚洲精品日产精品乱码不卡| 国产麻豆精品久久一二三| 久久精品欧美一区二区| 国产97公开成人免费视频| 91无码人妻精品一区二区蜜桃| 激情无码字幕综合| 欧美精品黑人粗大| 精品久久综合1区2区3区激情| 亚洲男人的天堂久久香蕉网| 高潮毛片无遮挡高清视频播放| 亚洲第一极品精品无码| 久久伊人操| 中国黄色一级视频| 婷婷中文在线| 超薄丝袜足j国产在线视频| 亚洲天堂色色人体| 国产精品熟女亚洲AV麻豆| 午夜国产理论| 国产亚洲精品97在线观看| 91极品美女高潮叫床在线观看| 国产视频欧美| 亚洲欧美另类日本| 看看一级毛片| 日韩精品毛片人妻AV不卡| 九色视频最新网址 |