胡晉彬 何熠 王進



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