胡晉彬 何熠 王進
關(guān)鍵詞:計算機網(wǎng)絡(luò);路由轉(zhuǎn)發(fā);NS-3;實驗教學(xué)
1背景
“計算機網(wǎng)絡(luò)”作為網(wǎng)絡(luò)工程、通信工程、計算機科學(xué)與技術(shù)等計算機專業(yè)的核心課程之一,非常注重理論與實踐的結(jié)合,課程涉及的知識范圍較廣。因此,需要通過引導(dǎo)學(xué)生著手網(wǎng)絡(luò)實驗去更深入的理解計算機網(wǎng)絡(luò)中各種協(xié)議與原理,掌握計算機網(wǎng)絡(luò)[1-3]的基本概念。
目前,“計算機網(wǎng)絡(luò)”課程實驗主要是在網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)操作系統(tǒng)上進行?;诰W(wǎng)絡(luò)分布式的特性,實驗時需要部署多臺計算機和交換設(shè)備,因此搭建一定規(guī)模的網(wǎng)絡(luò)環(huán)境之后,才可以進行實驗。然而,限于經(jīng)費,許多高校并不具備搭建這種大規(guī)模的網(wǎng)絡(luò)環(huán)境的基礎(chǔ),給開展實驗的帶來了一定的困難。
將NS-3網(wǎng)絡(luò)仿真模擬器作為基礎(chǔ)框架,提供一個具有開放性、可拓展性的輕量級實驗平臺,可以大大提高教學(xué)實驗的可操作性。學(xué)生可以通過操作NS-3網(wǎng)絡(luò)仿真模擬器深入理解計算機網(wǎng)絡(luò)中的路由轉(zhuǎn)發(fā)過程,根據(jù)六種不同的路由轉(zhuǎn)發(fā)模式,分析交換機的數(shù)據(jù)包轉(zhuǎn)發(fā)記錄,理解數(shù)據(jù)包根據(jù)統(tǒng)計的不同網(wǎng)絡(luò)行為特征選擇路由轉(zhuǎn)發(fā)端口,達到實驗設(shè)計的目的。
2網(wǎng)絡(luò)實驗教學(xué)方案的選擇
目前,主流網(wǎng)絡(luò)仿真模擬軟件包括NS-2( networksimulator version 2)和NS-3( network simulator version3)。NS-2是一種面向?qū)ο?,基于離散事件驅(qū)動的網(wǎng)絡(luò)環(huán)境模擬器,由UC Berkeley開發(fā)而成。它本身有一個虛擬時鐘,所有的仿真都由離散事件驅(qū)動,支持各種網(wǎng)絡(luò)協(xié)議的研究、設(shè)計和開發(fā)。相較于NS-3而言,NS-2雖然可以為學(xué)生提供較好的學(xué)習(xí)和科研實踐平臺,然而NS-2已有的仿真功能在IP地址支持、路由機制、協(xié)議支持等方面都存在不足,難以滿足網(wǎng)絡(luò)實驗教學(xué)方案的設(shè)計與實施。
NS-3作為一種全新的網(wǎng)絡(luò)模擬器,并不是NS-2的拓展版,它們最明顯的區(qū)別就是腳本語言的選擇,而這也是NS-3的一大優(yōu)點。NS-2采用C++語言進行功能拓展,再使用Otcl腳本語言配置仿真場景。而在NS-3中,仿真器全都由C++語言編寫并開發(fā)拓展模板,減輕了學(xué)生學(xué)習(xí)使用NS-3的負擔,加強了網(wǎng)絡(luò)實驗的可操作性。
NS-3主要用于模擬計算機網(wǎng)絡(luò),它可以在一臺計算機上模擬物理世界中的各種類型和規(guī)模的網(wǎng)絡(luò)結(jié)構(gòu),但沒有圖形用戶界面。利用NS-3進行網(wǎng)絡(luò)模擬,學(xué)生需要經(jīng)過以下四個基本步驟:(l)安裝NS-3軟件;(2)編輯源代碼;(3)編寫模擬腳本;(4)運行模擬腳本。
由此,團隊采用NS-3網(wǎng)絡(luò)仿真模擬器作為實驗平臺,進行數(shù)據(jù)包的路由轉(zhuǎn)發(fā)實驗。
3實驗方案
3.1實驗?zāi)康?/p>
團隊基于NS-3網(wǎng)絡(luò)模擬仿真平臺,設(shè)計了“基于NS-3的數(shù)據(jù)包路由轉(zhuǎn)發(fā)控制”實驗。實驗?zāi)康氖菐椭鷮W(xué)生熟悉NS-3網(wǎng)絡(luò)模擬仿真平臺、理解NS-3網(wǎng)絡(luò)仿真模擬器的工作流程、掌握網(wǎng)絡(luò)拓撲的搭建過程、深入理解計算機網(wǎng)絡(luò)中的路由轉(zhuǎn)發(fā)過程、分析交換機數(shù)據(jù)、理解六種路由轉(zhuǎn)發(fā)模式和理解數(shù)據(jù)包根據(jù)統(tǒng)計的不同網(wǎng)絡(luò)行為特征選擇路由轉(zhuǎn)發(fā)端口。
3.2實驗內(nèi)容和原理
實驗主要內(nèi)容如下:(1)利用C++腳本語言創(chuàng)建網(wǎng)絡(luò)拓撲;(2)利用C++腳本語言進行路由配置;(3)選擇路由轉(zhuǎn)發(fā)模式,設(shè)置流量場景,跟蹤Leaf交換機上數(shù)據(jù)包轉(zhuǎn)發(fā)記錄,驗證交換機是否根據(jù)所選擇的路由轉(zhuǎn)發(fā)模式選擇端口進行數(shù)據(jù)包的轉(zhuǎn)發(fā)。
六種路由轉(zhuǎn)發(fā)模式分別為:(1)五元組哈希選擇轉(zhuǎn)發(fā)端口(ECMP);(2)隨機選擇轉(zhuǎn)發(fā)端口(RPS);(3)選擇最小隊列長度的轉(zhuǎn)發(fā)端口(Queue);(4)選擇路徑延時最小的轉(zhuǎn)發(fā)端口(RTT);(5)選擇ECN標記最少的路徑的轉(zhuǎn)發(fā)端口(ECN);(6)選擇鏈路利用率最小的路徑的轉(zhuǎn)發(fā)端口。
實驗原理是在NS-3網(wǎng)絡(luò)仿真模擬器上,通過腳本語言對路由轉(zhuǎn)發(fā)模式進行選擇,控制交換機對數(shù)據(jù)包轉(zhuǎn)發(fā)的規(guī)則和模式。
3.3實驗環(huán)境
實驗環(huán)境采用一臺Vmware或VirturalBox虛擬機,基于GNU/Linux平臺,安裝和配置NS-3開發(fā)環(huán)境,下載NS-3軟件包的最新版本。
3.4實驗設(shè)置
3.4.1創(chuàng)建拓撲
NS-3網(wǎng)絡(luò)仿真模擬器使用C++腳本完成實驗配置,在導(dǎo)入常見的功能和輔助模塊后,開始創(chuàng)建網(wǎng)絡(luò)拓撲。
實驗所部署的網(wǎng)絡(luò)拓撲結(jié)構(gòu)為如今數(shù)據(jù)中心網(wǎng)絡(luò)大范圍部署的葉,脊(Leaf-Spine)網(wǎng)絡(luò)拓撲結(jié)構(gòu),最頂層核心交換機為Spine交換機,而Leaf交換機作為中間接人層,向上連接Spine交換機,向下連接終端服務(wù)器。這種葉.脊網(wǎng)絡(luò)拓撲架構(gòu)有多種好處,如可以降低網(wǎng)絡(luò)傳輸延時、拓展網(wǎng)絡(luò)帶寬、緩解網(wǎng)絡(luò)流量瓶頸等,解決了在當今數(shù)據(jù)中心網(wǎng)絡(luò)中流量急劇增加、規(guī)模日益擴大帶來的傳統(tǒng)網(wǎng)絡(luò)拓撲無法適應(yīng)的問題。
本文實驗須搭建一個2 Leaf和3 Spine的葉一脊拓撲結(jié)構(gòu)(發(fā)送端和接受端之間有3條并行路徑)。每個Leaf交換機下都連接4個終端服務(wù)器。
實驗中設(shè)置splne交換機數(shù)量為3,leaf交換機數(shù)量為2,servers交換機數(shù)量為4。網(wǎng)絡(luò)拓撲NodeContainer類,創(chuàng)建各類結(jié)點,腳本如下:
NodeContainer spines;
spines.Create( SPINE_COUNT);
NodeContainer leaves;
leaves.Create( LEAF_COUNT);
NodeContainer servers:
servers. Create(SERVER—COUNT*LEAF—COUNT);
通過創(chuàng)建NodeContainer對象,把各類不同結(jié)點分別歸類到不同結(jié)點容器中,以便后續(xù)腳本操作,其中SPINE—COUNT=3,LEAF—COUNT=2,SERVER—COUNT=4。接下來,設(shè)置該拓撲的鏈路帶寬和延時等屬性,腳本如下:
PointToPointHelper p2p;
uint64_t LINK_CAPACITY;
Time LINK_LATENCY:
通過使用NS-3構(gòu)建簡單的點對點數(shù)據(jù)鏈路構(gòu)建點對點通信模型的PointToPointHelper助手類,設(shè)置“DataRate”和“Delay”屬性,這里統(tǒng)一設(shè)置所有的鏈路帶寬為LINK_CAPACITY= 10Cbps,延時設(shè)置為LINK_LATENCY=10US。
3.4.2路由配置
路由配置腳本如下:
Ipv4GlobalRoutingHelper globaIRoutingHelper;
intemet.SetRoutingHelper( globalRoutingHelper);
intemet.lnstall( servers);
intemet.lnstall( spines);
intemet.lnstall( leaves);
Ipv4GlobalRoutingHelper::
PopulateRoutingTables();
通過操作NS-3中網(wǎng)絡(luò)層全局路由配置助手類globalRoutingHelper,調(diào)用函數(shù)PopulateRoutingTables(),為每個交換機自動配置路由表。Leaf交換機和對應(yīng)終端服務(wù)器的鏈路,IP配置情況如圖1所示。Leaf交換機和對應(yīng)Spine交換機的鏈路,IP配置情況如圖2所示。實驗所搭建的總體拓撲圖如圖3所示。
3.5實驗主流程
3.5.1ECMP路由轉(zhuǎn)發(fā)模式
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為根據(jù)五元組哈希選擇轉(zhuǎn)發(fā)端口(默認的ECMP),通過檢測Leaf0交換機上的數(shù)據(jù)包轉(zhuǎn)發(fā)過程,驗證實驗的正確性。
流量場景設(shè)置為:模擬開始時,同時從server
0、server 1和server 2發(fā)一條大小為100KB的流往server 4,(數(shù)據(jù)包大小默認為1500B)檢測交換機上所記錄的數(shù)據(jù)包轉(zhuǎn)發(fā)記錄如圖4所示。
通過檢測leaf 0交換機上數(shù)據(jù)包轉(zhuǎn)發(fā)情況,發(fā)現(xiàn)三條流分別平均從端口5、端口6和端口7轉(zhuǎn)發(fā)出去。路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期,驗證了ECMP路由轉(zhuǎn)發(fā)模式基于流轉(zhuǎn)發(fā)的特性。
3.5.2隨機包散射RPS路由轉(zhuǎn)發(fā)模式
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為隨機選擇轉(zhuǎn)發(fā)端口(隨機包散射RPS),通過檢測交換機上數(shù)據(jù)包的轉(zhuǎn)發(fā)過程,驗證實驗的正確性。
流量設(shè)置為:模擬開始時,從server l在發(fā)一條大小為1000KB的流往server 5,檢測交換機Leaf 0上所記錄的數(shù)據(jù)包轉(zhuǎn)發(fā)記錄如圖5所示。
通過檢測leaf 0交換機上的數(shù)據(jù)包轉(zhuǎn)發(fā)情況,發(fā)現(xiàn)從端口5、端口6和端口7轉(zhuǎn)發(fā)的數(shù)據(jù)包數(shù)量大小基本一致,路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期,驗證了隨機包散射RPS的路由轉(zhuǎn)發(fā)模式的實驗。
3.5.3選擇最小隊列長度的轉(zhuǎn)發(fā)端口
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為選擇最小隊列長度的端口轉(zhuǎn)發(fā),通過檢測交換機Leaf0上的數(shù)據(jù)包轉(zhuǎn)發(fā)過程,驗證實驗的正確性。
流量設(shè)置為:模擬開始時,同時發(fā)送三條流,第一條流從server 0發(fā)往server 5,第二條流從server 1發(fā)往server 6,第三條流從server 2發(fā)往server 7,流大小都為100KB。檢測發(fā)流之后的某一時間點的Leaf 0交換機各端口的緩存隊列長度,以及Leaf 0交換機在這一時刻對數(shù)據(jù)包的路由轉(zhuǎn)發(fā)選擇,如圖6所示。
比如,跟蹤time= 0.08157s時,Leaf 0交換機上各隊列長度(出端口隊列):端口5隊列長度為11,端口6隊列長度為8,端口7隊列長度為12。而此時數(shù)據(jù)包選擇端口6進行轉(zhuǎn)發(fā),路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期。
3.5.4選擇路徑延時(RTT)最小的轉(zhuǎn)發(fā)端口
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為選擇路徑延時(RTT)[4]最小的端口進行數(shù)據(jù)包轉(zhuǎn)發(fā),通過檢測交換機Leaf 0上的數(shù)據(jù)包轉(zhuǎn)發(fā)過程,驗證實驗的正確性。
首先,將leaf 0交換機上連接port 5的整條鏈路的時延屬性更改為10Us,連接port6的整條鏈路的時延屬性更改為15Us,連接port5的整條鏈路的時延屬性更改為20Vs,使三條鏈路造成時延差,以便觀察交換機對數(shù)據(jù)包的處理情況。流設(shè)置為10kb,并從server 0發(fā)往server 4。開始模擬實驗后,觀測leaf 0交換機上的數(shù)據(jù)包轉(zhuǎn)發(fā)行為,如圖7所示。
最后,通過檢測leaf 0交換機上數(shù)據(jù)包轉(zhuǎn)發(fā)情況,發(fā)現(xiàn)大部分數(shù)據(jù)包都發(fā)往時延設(shè)置較小的對應(yīng)端口port 5,驗證了交換機根據(jù)最小的往返時延RTT端口作為最佳發(fā)送端口進行發(fā)送的特性,路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期。
3.5.5選擇ECN標記最少的路徑的轉(zhuǎn)發(fā)端口
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為選擇ECN[5]標記最少的端口進行數(shù)據(jù)包轉(zhuǎn)發(fā),在有擁塞的情況下,通過檢測交換機Leaf 0上各端口的ECN標記情況,即交換機Leaf 0的當前數(shù)據(jù)包轉(zhuǎn)發(fā)行為,來驗證實驗的正確性。
流量設(shè)置為:模擬開始時,同時發(fā)送四條大小為IOOKB的流,分別從server 0發(fā)往server 4,server l發(fā)往server 5.server 2發(fā)往server 6.server 3發(fā)往server7。開始模擬實驗,觀測leaf 0交換機數(shù)據(jù)包轉(zhuǎn)發(fā)行為,如圖8所示。
通過檢測leaf0交換機上數(shù)據(jù)包轉(zhuǎn)發(fā)情況,當前時刻數(shù)據(jù)包根據(jù)各端口的ECN標記數(shù)量,選擇了ECN標記最小的port 7端口進行路由轉(zhuǎn)發(fā),路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期。
3.5.6選擇鏈路利用率最小的路徑的轉(zhuǎn)發(fā)端口
實驗設(shè)置路由轉(zhuǎn)發(fā)模式為選擇選擇鏈路利用率最小的路徑的端口進行數(shù)據(jù)包轉(zhuǎn)發(fā),結(jié)合交換機Leaf 0的當前數(shù)據(jù)包轉(zhuǎn)發(fā)行為,驗證實驗。
流量設(shè)置為:模擬開始時,同時發(fā)送四條大小都為100KB的流,分別為從server 0發(fā)往server 4,server1發(fā)往server 5.server 2發(fā)往server 6.server 3發(fā)往server 7。開始模擬實驗后,觀測leaf0交換機上的數(shù)據(jù)包轉(zhuǎn)發(fā)行為,如圖9所示。
通過檢測leaf 0交換機上數(shù)據(jù)包轉(zhuǎn)發(fā)情況,當前時刻數(shù)據(jù)包根據(jù)各端口的鏈路利用率,選擇了ECN標記最小的port 6端口進行路由轉(zhuǎn)發(fā),路由轉(zhuǎn)發(fā)結(jié)果正確,結(jié)果符合預(yù)期。
4結(jié)束語
在基于NS-3的數(shù)據(jù)包路由轉(zhuǎn)發(fā)實驗中,學(xué)生使用C++腳本語言在NS-3網(wǎng)絡(luò)仿真模擬平臺創(chuàng)建拓撲和路由配置,了解了NS-3的使用:通過六種基于不同端口選擇條件的路由實驗,深入理解了計算機網(wǎng)絡(luò)中路由轉(zhuǎn)發(fā)過程,夯實了網(wǎng)絡(luò)基礎(chǔ):通過觀測交換機的路由轉(zhuǎn)發(fā)過程,深入理解了數(shù)據(jù)包根據(jù)統(tǒng)計的不同網(wǎng)絡(luò)行為特征選擇路由轉(zhuǎn)發(fā)端口。
通過實驗教學(xué),學(xué)生在知識掌握和應(yīng)用能力方面都獲得了較大的提升。同時可以看出,基于NS-3的數(shù)據(jù)包路由轉(zhuǎn)發(fā)實驗教學(xué)方案具有簡單、易操作、靈活等特性,可以快速搭建需要的實驗環(huán)境,幫助學(xué)生進行自主學(xué)習(xí)和拓展研發(fā)。