林曉輝 蘇恭超
摘 要:在計算機網(wǎng)絡(luò)的課程教學中,網(wǎng)絡(luò)分層及各層功能定義是學生需要掌握的核心知識點。為了學生能對相關(guān)知識點形成清晰的認識,研究中將網(wǎng)絡(luò)仿真器NS3融入教學中。通過讓學生對各層的功能進行編程,使其能更好地掌握計算機網(wǎng)絡(luò)的層次結(jié)構(gòu)概念,鞏固對相關(guān)的知識點理解,同時也能很好地提升學生的編程能力。
關(guān)鍵詞: 網(wǎng)絡(luò)仿真器;計算機網(wǎng)絡(luò);課程教學
文章編號: 2095-2163(2019)03-0187-03 中圖分類號: G434 文獻標志碼: A
1 計算機網(wǎng)絡(luò)分層的概念
計算機網(wǎng)絡(luò)是一門有著很強理論性及實踐性的專業(yè)課程,并在中國高等院校的計算機類和電子信息類的專業(yè)中均有開設(shè)。在本質(zhì)上,計算機網(wǎng)絡(luò)技術(shù)是基于開放系統(tǒng)互聯(lián)思想,其體系設(shè)計是基于國際公開的規(guī)范。通過標準設(shè)計派生出網(wǎng)絡(luò)互操作的通信約定,使基于不同硬件技術(shù)的節(jié)點可借助通信來交換信息。因此,在課程內(nèi)容結(jié)構(gòu)中,網(wǎng)絡(luò)分層設(shè)計思想是課程的核心重點內(nèi)容。網(wǎng)絡(luò)分層設(shè)計如圖1所示。
將計算機網(wǎng)絡(luò)通過分層描述,把網(wǎng)絡(luò)通信劃分為各個子層,可以有效地降低網(wǎng)絡(luò)協(xié)議的設(shè)計復(fù)雜度[1]。通過網(wǎng)絡(luò)功能分層設(shè)計,能為網(wǎng)絡(luò)互聯(lián)帶來諸多便利。對此可做探討闡述如下。
(1)分層后,各層在功能上相互獨立,各層無需知道其他層的詳細功能,而設(shè)計者只需要知曉各層接口的協(xié)議規(guī)范,因此在網(wǎng)絡(luò)定義以及功能實現(xiàn)上,系統(tǒng)的復(fù)雜度得以降低。
(2)分層后,只要層間接口不變,各層的變化不會導致其他層的重新設(shè)計。因此在結(jié)構(gòu)上,各層均可以最新的技術(shù)來獨立研發(fā),使得系統(tǒng)實現(xiàn)更加靈活,同時也便于維護,并能夠促進標準化。
根據(jù)開放系統(tǒng)互聯(lián)(Open System Interconnection)的定義,網(wǎng)絡(luò)的層次劃分如圖1所示。在本文的課程實驗環(huán)節(jié)中,研究將網(wǎng)絡(luò)體系按由低到高的順序分為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運輸層及應(yīng)用層。
2 NS3網(wǎng)絡(luò)仿真器介紹
由于以上分層思想較為抽象,僅靠課堂上的講授并不能讓學生較好地理解掌握相關(guān)概念。為了達到理想的教學效果,研究采用NS3網(wǎng)絡(luò)仿真器作為輔助教學工具,通過對網(wǎng)絡(luò)各層功能進行編程,使得學生對分層目的及功能形成清晰的概念。
NS3是一個離散事件模擬器,始于2006年的開源項目[2],下載地址為:https://www.nsnam.org/releases/。網(wǎng)絡(luò)模擬器全部是由C++編寫,通過帶有選擇性的Python語言綁定。因此仿真腳本由C++或Python語言來編寫,并通過nam進行演示,同時用其他工具通過trace文件來分析仿真過程。使用NS3進行網(wǎng)絡(luò)仿真時,需要依序展開如下步驟,即:
(1)選擇或編寫定義相應(yīng)模塊。
(2)編寫網(wǎng)絡(luò)仿真腳本。
(3)實驗仿真。
(4)數(shù)據(jù)采集與分析。
(5)根據(jù)仿真結(jié)果進行代碼或者參數(shù)的調(diào)整。
其中,在編寫仿真腳本時,擬將涉及到如下研究設(shè)計,可表述為:定義節(jié)點,包含定義節(jié)點/地址類型、隊列模型、網(wǎng)卡、應(yīng)用程序、協(xié)議棧等;安裝網(wǎng)絡(luò)設(shè)備,定義物理層信道及MAC層協(xié)議,如CSMA、WiFi、WiMAX、LTE或是點對點通信;定義網(wǎng)絡(luò)層及傳輸層協(xié)議棧,其中網(wǎng)絡(luò)層協(xié)議可以選擇OLSR、AODV或Global,同時也可以定義IPv4/IPv6格式等,傳輸層可以是UDP或者TCP;安裝應(yīng)用層協(xié)議;定義其他配置,如節(jié)點移動性及能量管理;設(shè)置仿真時間及相關(guān)參數(shù)[3]。
3 NS3仿真器使用介紹
NS3網(wǎng)絡(luò)仿真器的層功能模塊如圖2所示。圖2中的節(jié)點定義包含了網(wǎng)絡(luò)設(shè)備類型、各層協(xié)議棧、信道以及應(yīng)用層參數(shù)。可以將節(jié)點當成一個空的終端框架,通過添加相應(yīng)的應(yīng)用層功能、協(xié)議棧、信道類型等內(nèi)容,完成節(jié)點的定義。協(xié)議棧包含傳輸層控制、路由協(xié)議以及地址管理。信道的定義中,可以按照實際情況來加入時延、能耗、誤碼率、噪聲等參數(shù)。
從以上的仿真器架構(gòu)上看,仿真器的設(shè)計是按照網(wǎng)絡(luò)的層次化結(jié)構(gòu)來編寫,因此可以通過在仿真器下書寫仿真文本來定義各層的功能,從而實現(xiàn)網(wǎng)絡(luò)的虛擬化仿真。為說明仿真器的功能,研究以Ad Hoc網(wǎng)絡(luò)模擬作為實例來解析論述NS3的仿真功能。Ad Hoc是一種無控制中心的分布式網(wǎng)絡(luò),各個網(wǎng)絡(luò)節(jié)點均可以移動,并且在移動過程中交換數(shù)據(jù)。各個節(jié)點以無線方式連接,通過其他節(jié)點中繼的方式,將數(shù)據(jù)傳輸?shù)侥康墓?jié)點。因此每個節(jié)點均為一個路由器,負責發(fā)現(xiàn)并維持路由。受篇幅限制,本文從文獻[4]的源代碼中抽取出定義各層功能的關(guān)鍵部分。各部分的基礎(chǔ)設(shè)計詳見如下。
(1)定義物理層信道
YansWifiChannelHelper channel = YansWifi ChannelHelper::Default ();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
phy.SetChannel (channel.Create ());
(2)定義MAC層協(xié)議
WifiHelper wifi;
wifi.SetStandard(WIFI_PHY_STANDARD_80211a);
wifi.SetRemoteStationManager("ns3::Constant RateWifiManager","DataMode",StringValue("OfdmRate6Mbps"));
(3)定義移動方式
mobility.SetMobilityModel ("ns3::Random Walk2dMobilityModel",
"Bounds", RectangleValue (Rectangle (-500, 500, -500, 500)));
mobility.Install (AdHocNode);
(4)定義傳輸層與網(wǎng)絡(luò)
PacketSinkHelper sink ("ns3::UdpSocket Factory",
InetSocketAddress (Ipv4Address::GetAny (), port));
Ipv4GlobalRoutingHelper::
PopulateRoutingTables ();
(5)定義應(yīng)用層數(shù)據(jù)
NS_LOG_INFO ("Create Applications.");
uint16_t port = 9999;
OnOffHelperonOff1("ns3::TcpSocketFactory",Address(InetSocketAddress(AdHocIp.GetAddress(0),port)));
onOff1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
onOff1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
由以上代碼可以看出,該仿真器實際上可以根據(jù)各層的功能進行靈活定義。通過課堂講授層的基本功能,再通過仿真器對各層相關(guān)功能的定義及實現(xiàn),仿真后通過收集數(shù)據(jù)并加以分析(見圖3),觀察數(shù)據(jù)是否與預(yù)期的相符。在整個過程中,學生能夠?qū)Ψ謱痈拍罴皩庸δ苄纬汕逦恼J識[4]。
4 結(jié)束語
作為一個開源的網(wǎng)絡(luò)仿真器,NS3根據(jù)計算機網(wǎng)絡(luò)的層次結(jié)構(gòu)對各層進行了功能性定義。在課堂接受基本概念的基礎(chǔ)上,學生通過課后的編程,以課程項目的形式來實現(xiàn)網(wǎng)絡(luò)的定義。在此過程中,學生可以極大地加深對網(wǎng)絡(luò)設(shè)計分層思想的理解,從而獲得良好的教學效果。
參考文獻
[1]KUROSE J F ROSS K W. Computer Networking:A top-down approach[M]. 陳鳴 譯. 6th ed. 北京:機械工業(yè)出版社, 2014.
[2] 周迪之. 開源網(wǎng)絡(luò)模擬器ns-3:架構(gòu)與實踐[M]. 北京:機械工業(yè)出版社,2019.
[3] 馬春光, 姚建盛. ns-3網(wǎng)絡(luò)模擬器基礎(chǔ)及應(yīng)用[M]. 北京:人民郵電出版社, 2014.
[4] CSDN. ns3模擬無線Ad hoc網(wǎng)絡(luò)通信[EB/OL]. [2018-04-12]. https://blog.csdn.net/xiao_sheng_jun/article/details/79921889.
[5] ns-3 project. ns-3 manual[EB/OL].[2019-04-16]. https://www.nsnam.org/docs/manual/html/index.html.