胡晉彬,羅望卿,王 進
(長沙理工大學 計算機與通信工程學院,湖南 長沙 410114)
計算機網絡是計算機科學與技術、軟件工程和通信工程等專業(yè)的基礎課程,具有理論內容多、范圍廣和知識更新速度快的特點。計算機網絡教學特別注重理論教學與實踐操作教學相結合,通過具體的計算機網絡實驗幫助學生理解和掌握計算機網絡傳輸機制及其工作原理。然而,現(xiàn)有計算機網絡教學方案設計中很少考慮目前工業(yè)界的實際網絡需求變化,具體教學方案設計未采用工業(yè)界實際部署的網絡傳輸協(xié)議,使得學生難以真正了解計算機網絡技術在實際工業(yè)環(huán)境應用中的需求變化,以及網絡傳輸協(xié)議在實際網絡環(huán)境中部署的具體問題和所面臨的實際挑戰(zhàn)。為了改變這種狀況,教師應及時了解實際工業(yè)生產環(huán)境中計算機網絡技術的迭代和更新,在計算機網絡教學中將網絡實驗設計與現(xiàn)代工業(yè)生產中的網絡技術緊密結合,設計與社會發(fā)展需求和實際應用相結合的教學方案,提高學生的創(chuàng)新能力和解決實際工程問題的能力,同時提高學生的學習興趣,促進計算機網絡技術教學的發(fā)展。
本文以目前工業(yè)界在生產數(shù)據(jù)中心網絡中實際部署的網絡傳輸協(xié)議[1-3]為例,設計并實現(xiàn)了計算機網絡傳輸控制的實驗方案,幫助學生在掌握計算機網絡基本概念和傳輸機制原理的同時,更深刻地理解網絡中數(shù)據(jù)包從發(fā)送端經過網絡中間設備交換機,再傳輸?shù)浇邮斩说耐暾麄鬏斶^程。具體來說,在NS-3網絡仿真系統(tǒng)軟件[4]環(huán)境下,學生通過C++語言編寫程序搭建網絡拓撲、輸入網絡流量、配置路由、部署基于不同擁塞反饋信號的網絡傳輸協(xié)議,并測試實時吞吐率和數(shù)據(jù)流完成時間等網絡性能[5],以達到了解網絡傳輸控制的工作流程和深入理解網絡傳輸控制原理的目的。
NS-3是基于事件驅動的仿真軟件,具有免費的源代碼公共源,可滿足學術研究和教學對網絡仿真模擬的需求[6]。在NS-3網絡仿真環(huán)境中,可以采用C++和Python兩種編程語言編寫程序,其源代碼可以應用于Linux、Mac OS、Cygwin和Mingw等不同操作系統(tǒng)。一個完整的NS-3 模型具有應用層、傳輸層、網絡層、鏈路層和物理層。與NS-2相比,NS-3在各個層面都有了很大改進。NS-2網絡仿真系統(tǒng)軟件只支持C語言和OTcl Tool語言,其仿真結果演示需要通過網絡動畫模擬器進行。此外,NS-2的很多模塊都采用C語言編寫,有些模塊采用OTcl腳本語言編寫,如果只采用C語言而不用OTcl腳本無法運行仿真實驗。然而在NS-3網絡仿真系統(tǒng)軟件中,所有模擬器均采用C++編寫,具有良好的繼承性和多態(tài)性[6]。學生在NS-3網絡仿真系統(tǒng)軟件中可采用C++和Python兩種編程語言編寫程序和模擬腳本,為C++程序生成相應的跟蹤文件,還可以靈活地生成跟蹤文件以分析仿真模擬過程。該軟件還有一些其他特點,例如使用IP地址處理節(jié)點端口,更有助于學生理解傳輸過程[7]。
采用NS-3進行網絡仿真實驗一般有4個步驟:①確定仿真場景;②編寫網絡仿真腳本配置拓撲和應用程序;③運行模擬實驗;④分析仿真數(shù)據(jù)。
模擬場景由用戶根據(jù)所研究的網絡場景確定,編寫網絡仿真程序和腳本可分為6個步驟:①通過仿真場景確定拓撲結構和所需的仿真模塊,搭建相應節(jié)點;②通過仿真場景確定網絡設備類型,并根據(jù)拓撲安裝在相應節(jié)點上;③為每個網絡設備部署互聯(lián)網協(xié)議棧并分配IP地址;④通過模擬場景確定流量模式,利用Application的子類生成相應的數(shù)據(jù)包;⑤根據(jù)需要啟動相應的記錄和跟蹤系統(tǒng),生成數(shù)據(jù)供后期分析仿真結果;⑥Simulator::Run()函數(shù)啟動仿真程序。
基于NS-3網絡仿真系統(tǒng)軟件平臺構建網絡拓撲,編寫C++程序測試流完成時間和實時吞吐率,深入理解數(shù)據(jù)包從發(fā)送端通過交換機傳輸?shù)浇邮斩说膫鬏斎^程以及傳輸過程的擁塞反饋。
2.2.1 拓撲創(chuàng)建
采用數(shù)據(jù)中心廣泛部署的葉—脊(Leaf-Spine)網絡拓撲結構[8],其中脊交換機為核心交換機;葉交換機為網絡拓撲結構中的接入層,其承上啟下,連接終端服務器與核心交換機。葉—脊網絡拓撲結構主要解決傳統(tǒng)網絡拓撲無法適應數(shù)據(jù)中心流量急劇增加和數(shù)據(jù)中心規(guī)模日益擴大而帶來的數(shù)據(jù)中心高速互聯(lián)要求問題。與傳統(tǒng)網絡架構相比,葉—脊網絡拓撲架構可以降低網絡傳輸延時、緩解網絡流量瓶頸和擴展網絡帶寬。
本文實驗需搭建一個擁有2 Leaf和2 Spine的葉—脊拓撲結構(發(fā)送端和接收端之間有2條并行路徑)。如圖1所示,拓撲結構由兩臺Spine交換機S1、S2,兩臺Leaf交換機L1、L2和4臺終端服務器組成。
Fig.1 Leaf-spine topology圖1 葉—脊拓撲結構
設置拓撲后,配置主機的IP地址。在算法中,IP地址的分配需要定義Ipv4addressHelper對象地址;然后通過IP地址調用SetBase進行網關與子網掩碼設置;最后在Assign函數(shù)調用IP地址的基礎上自10.1.1.1起對網絡設備分配地址。Assign函數(shù)通過對網絡連接關系進行分析得到網絡上任意兩個節(jié)點之間的路徑信息,然后將這些數(shù)據(jù)存儲到一個樹型結構中,這個樹即為網絡圖。該拓撲上多節(jié)點網絡設備以這種方式進行地址分配時需要使用Address Assign(devices)進行地址分配,而代碼設置的對象接口Ipv4InterfaceContainer用于保存和管理成功分配好的IP地址。具體IP地址分配代碼為:
2.2.2 NS-3 C++程序
(1)首先添加相應模塊的頭文件,具體代碼為:
然后定義節(jié)點容器nodes,由nodes.get(i)獲取第i個節(jié)點,節(jié)點使用Create()函數(shù)創(chuàng)建節(jié)點,具體代碼為:
最后配置基本參數(shù)node節(jié)點個數(shù)、servers服務器個數(shù)、leaf-spine交換機個數(shù)、flow數(shù)量等,具體代碼為:
(2)確定所需網絡設備類型,并根據(jù)第一步設置好的拓撲結構將其分別安裝在相應節(jié)點上。編寫代碼定義點對點鏈接對象pointToPoint,用于配置網絡設備,設置點對點通道的鏈路速率,設置點對點通道的鏈路延時。定義好點對點鏈接對象后需要定義網絡設備容器對象設備,用于調用安裝節(jié)點函數(shù),將對等網絡設備與通道安裝到該節(jié)點,網絡設備安裝完成后需將其分配到devices。
(3)為每個網絡設備安裝互聯(lián)網協(xié)議棧并分配IP地址。首先需要安裝Internet協(xié)議棧,在C++中采用代碼InternetstackHelper定義對象堆棧;然后堆棧調用節(jié)點安裝函數(shù)為nodes中包含的節(jié)點安裝網絡協(xié)議棧。實驗過程中部署數(shù)據(jù)中心網絡中廣泛應用的基于顯式擁塞通知(Explicit Congestion Notification,ECN)標記的DCTCP[8-9]傳輸協(xié)議。DCTCP于2010年首次被提出,其是數(shù)據(jù)中心第一個專用的擁塞控制協(xié)議。DCTCP調整機制涉及發(fā)送端、交換機和接收端,其利用交換機隊列長度信息判斷網絡擁塞程度,對超過一定隊列長度閾值的數(shù)據(jù)包標記ECN位。當接收端接收到ECN標記的數(shù)據(jù)包,將相應的確認包標記ECN-echo并發(fā)送到發(fā)送端,發(fā)送端根據(jù)ECN標記比例對發(fā)送窗口進行調整。
(4)使用Application的子類生成相應數(shù)據(jù)包。定義監(jiān)聽對象echoServer,代碼為UdpEchoServerHelper echoServer()。echoServer使用Install(nodes.Get()))安裝echo服務器程序,安裝成功后返回的echo服務器程序由serverApps保存。調用ServerApps設置ServerApps中包含應用程序的開始和停止時間,代碼為serverApps.Start(Seconds(1.0)),serverApps.Stop(Seconds(10.0))。定義被監(jiān)控的客戶端對象echoClient。獲取服務器的IP地址,向服務器端口發(fā)送數(shù)據(jù),并設置要發(fā)送的最大數(shù)據(jù)包數(shù)量、設置發(fā)送數(shù)據(jù)包的時間間隔以及設置發(fā)送數(shù)據(jù)包的大小,代碼為echo-Client.SetAttribute("MaxPackets",UintegerValue(1));echo-Client.SetAttribute("Interval",TimeValue(Seconds(1.0)));echoClient.SetAttribute("PacketSize",UintegerValue(1024))。調用Install函數(shù)在節(jié)點上安裝客戶機應用程序,調用Start函數(shù)設置應用程序啟動的秒數(shù),調用Stop函數(shù)設置應用程序啟動的時間,代碼為clientApps.Start(Seconds(2.0));clientApps.Stop(Seconds(10.0))。
(5)根據(jù)需要激活相應的記錄和跟蹤系統(tǒng),為后續(xù)模擬結果分析生成數(shù)據(jù),并開始模擬實驗。
2.2.3 測試與數(shù)據(jù)分析
運行以上C++實驗程序,深入理解傳輸協(xié)議的工作過程,分析數(shù)據(jù)包如何在網絡中通過交換機從發(fā)送端傳輸?shù)浇邮斩?,并給出流完成時間和實時吞吐率的計算方法。
(1)數(shù)據(jù)包傳輸過程分析。首先要對是否有數(shù)據(jù)從發(fā)送端發(fā)往接收端進行編碼判斷,如果發(fā)包成功,程序需繼續(xù)判斷發(fā)包成功目的IP是否在同一網段中。如果發(fā)包方目的IP與發(fā)包方地址所歸屬的網段一致,程序就會判斷正確,進行編碼,將數(shù)據(jù)包封裝成一幀,再通過接入層進入?yún)R聚層中,經過匯聚層中的網絡設備將數(shù)據(jù)包送到目的IP;如果發(fā)包方目的地址與發(fā)包方不在一個網段中,那么發(fā)包方就會將數(shù)據(jù)包轉送到目的IP,再通過匯聚層將數(shù)據(jù)包轉送到網關中。如果沒有收到目的IP,那么該數(shù)據(jù)包將被丟棄;若接收到目的IP,則該數(shù)據(jù)包會繼續(xù)傳送下去,直至所有數(shù)據(jù)包都收到為止,如此循環(huán)重復多次即可實現(xiàn)整個過程。最后將數(shù)據(jù)包回傳至目的IP中,選擇轉發(fā)路徑及轉發(fā)端口,IP包被確認后可轉發(fā)至下一路由器。IP包在到達路由器時先從IP頭讀取目的IP地址并查找路由表,IP包按照路由協(xié)議算法選擇最佳路徑轉發(fā)。
(2)流完成時間和實時吞吐率測試。流完成時間是指從發(fā)送第一個數(shù)據(jù)包至接收最后一個數(shù)據(jù)包的時間。用戶通常想讓網頁搜索、傳輸文件、深度學習、數(shù)據(jù)挖掘等業(yè)務在最短時間內完成,因此流完成時間成為衡量傳輸性能的重要指標[9-11]。從C++程序運行后生成的相應trace文件中獲取流號、第一個數(shù)據(jù)包的發(fā)送時間和最后一個數(shù)據(jù)包的接收時間,然后計算出一條流的完成時間。如果需要計算平均流完成時間則可編寫腳本計算所有流的平均時間[12-13]。網絡性能的好壞通過實時吞吐率一目了然,統(tǒng)計一段時間內的數(shù)據(jù)字節(jié)數(shù)量,然后采用Python腳本計算單位時間內傳輸?shù)淖止?jié)數(shù),即實時吞吐率。
虛擬實驗教學完全建立在計算機技術和網絡通信技術的基礎上,學生可以在計算機上完成整個教學過程。通過部署目前工業(yè)界實際應用的計算機網絡傳輸協(xié)議,學生不僅深入了解了數(shù)據(jù)包從發(fā)送端到接收端的傳輸全過程,學習了如何測試流完成時間和實時吞吐率等網絡性能指標,而且了解了計算機網絡傳輸技術的實際需求和面臨挑戰(zhàn),提高了研究能力、創(chuàng)新能力、動手能力和實際應用能力。后續(xù)可結合最新計算機網絡傳輸技術,設計更符合社會發(fā)展需求的實驗教學方案,以進一步提高教師教學水平和學生學習效果。