彭 思,齊和平,崔雪峰,朱 浩,李萌萌
(北方自動控制技術研究所,太原 030006)
在信息技術飛速發展的今天,網絡結構和規模日趨復雜龐大,網絡負載日益繁重,新的網絡技術大量涌現,因此,如何對現有網絡進行優化和設計是個富有挑戰性的課題。無論是構建新網絡,升級改造現有網絡,或者測試新協議,都需要對網絡的可靠性和有效性進行科學、客觀、定量地評估。傳統網絡設計和規劃方法主要靠經驗,而對復雜的大型網絡,由于很多地方無法預知而抓不住設計的要點。網絡仿真作為一種新的網絡規劃和設計技術應運而生,它以其獨有的方法為網絡的規劃設計提供客觀、可靠的定量依據,縮短網絡建設周期,提高網絡建設中決策的科學性[2]。
網絡仿真技術是一種通過建立網絡設備、鏈路和協議模型,并模擬網絡流量的傳輸,從而獲取網絡設計或優化所需要的網絡性能數據的仿真技術。OPNET Modeler 的物件拼盤提供了詳盡的模型庫(設備、鏈路及詳細的協議),包括:路由器、交換機、服務器、客戶機、ATM 設備、DSL 設備、ISDN 設備等,還有其他廠商提供的設備[8,10]。針對研發的需求,OPNET Modeler 提供了一個開放的環境,使用戶能夠建立新的協議和設備,并且能夠將細節定義并模擬出來。OPNET Modeler 仿真平臺的使用范圍較廣,既可以用于現有網絡的優化和擴容,也可以用于新網絡的設計,而且特別適用于大中型網絡的設計和優化,建好的網絡模型也可以延續使用[7]。本文以OPNET Modeler 仿真工具為例,通過對停-等重傳協議的仿真建模、運行分析,重點探究了進程建模的技術方法,同時簡要闡述了本文研究方法和模型的使用方法,為后續更復雜龐大的協議開發、網絡仿真奠定基礎,提供參考。
通用仿真方法大致分為以下幾個步驟:
1)了解自己要構建的系統:書面的詳述說明。
2)明確建模目標:包括構建這個模型要解決什么問題,或是利用系統級仿真軟件驗證自定制的網絡協議路由性能的收斂性、網絡的健壯性和穩定性。
3)確定建模對象和方向:根據建模目標選擇建模要構建的對象,例如在網絡當中可能需要用到哪些元素(IP 骨干云,不同的鏈路類型等),從哪個方面建模:例如從升級鏈路帶寬的角度入手,判斷對吞吐量和時延的影響。
4)調整仿真粒度以達到更精確的結果:明確是要得到一個趨勢性的結果,還是一個精確的數值。
5)確定輸入輸出形式。
6)確定仿真軟件。
7)確定仿真參數輸入范圍。
8)仿真結束后判斷仿真結果的準確性、詳細程度、統計可用性[3-6]。
通用仿真方法流程圖如圖1 所示。

圖1 通用仿真方法流程圖
OPNET 網絡仿真軟件是目前世界上最先進的網絡仿真平臺之一。在OPNET 的各種產品中,Modeler 幾乎包含了其他產品的所有功能。OPNET Modeler 所能應用的各種領域包括端到端結構、系統級的仿真、新的協議開發和優化、網絡和業務層配合如何達到最好的性能。OPNET Modeler 采用分層的仿真方式,從協議間關系看,節點模型建模完全符合OSI 標準。從網絡物件層次關系看,提供了3層建模機制,最底層為進程模型,以狀態機來描述協議;其次為節點模型,由相應的協議模型構成,反映設備特性;最上層為網絡模型。3 層模型和實際的協議、設備、網絡完全對應,全面反映了網絡的相關特性。在OPNET Modeler 中,幾個模塊組成一個節點,一些節點組成一個網絡,而進程模型定義一個模塊的行為,所以它是構建網絡的基本,是仿真的核心[1]。
停-等重傳協議位于信源端的第2 層mac 層,是數據鏈路層最簡單最基礎的協議。其功能是為所傳輸的數據包提供可靠的交付,它和源端的上層和底層都有交互,接收上層來的數據包,轉發給底層,并且保證在沒有收到數據包的情況下進行重傳,達到可靠交付的功能。
停-等重傳協議簡化后可總結為如下描述:1)接收來自上層的數據包,轉發給物理層。2)轉發下一個數據幀之前要確認從對端收到一個反饋確認包,表示上一個幀轉發成功才會發送下一個幀。3)在等待反饋確認包的過程中收到來自應用層的數據包,先將其緩存起來,直到收到對端的反饋確認包才會轉發下一個幀。4)源端會自動設置一個時鐘,當超過這一時間還未收到來自對端的反饋確認包時,會認為對端沒有收到數據包,會重傳數據包。5)當鏈路掉線時,會將數據包緩存起來,直到鏈路恢復后進行重傳。
進程建模是網絡仿真的核心,也是網絡仿真的難點。進程建模方法分為以下5 個步驟:
1)文本定義;2)進程分解;3)事件列舉;4)事件列表的開發;5)OPNET 中代碼的實現。
下面根據這5 個步驟分別對停- 等重傳協議源端和目的端節點進程進行建模。
2.2.1 源端節點進程建模
1)文本定義:根據協議描述,確定當前協議和其他協議棧的交互關系。交互關系框架如圖2 所示。

圖2 協議棧交互框架
2)進程分解:根據要仿真的協議和算法確定采用單一進程模型還是多進程模型來實現。本協議采用單進程來進行建模。
3)事件列舉:把協議描述中可能發生的事件一一列舉出來,并指定其在OPNET 中是什么中斷類型。如表1 所示,將事件與中斷類型作一列舉和映射。

表1 事件與中斷類型
4)事件列表的開發:該部分是進程建模的核心部分。采用逐層遍歷的方式對事件列表進行開發。即:先確定一個初始狀態,按照“順藤摸瓜”的方式遍歷第3 步列出來的所有事件,再去遍歷每個事件下可能的條件,分析可能的跳轉方向,最后分析在這個條件下執行什么操作以及可能會轉移的狀態。當所有事件都遍歷完后事件列表處于一個收斂的狀態[9]。下面結合停-等重傳協議來分析一下事件列表的遍歷過程。構建進程模型首先要確定一個初始狀態(Init),從初始狀態下來分析哪些事件會發生。表2 展示了從Init 狀態出發的事件響應情況。表3 展示了從ACK Wait 狀態出發的事件響應情況。其余狀態的事件響應以此為例即可構建。

表2 Init 狀態響應列表

表3 ACK Wait 狀態響應列表
通過前4 步設計出針對不同協議的狀態轉移關系,挖掘潛在的轉移方向,最后在第5 步通過相應的代碼編寫來實現。
5)代碼實現。根據開發的事件列表中的內容繪制狀態轉移圖,并且在狀態轉移線上定義轉移條件和執行的函數,進行代碼的編寫。根據事件列表構建的源端進程模型如圖3 所示。在HB 代碼區對轉移條件進行宏定義,相應的HB 代碼區的內容如圖4 所示。在FB 代碼區實現了狀態轉移線上定義的函數功能,具體代碼如圖5 所示。進程模型搭建完成后要在進程模型編輯器的進程接口中開啟初始化仿真中斷(begsim intrpt),同時將鏈路中斷(failure intrpts)和恢復中斷(recovery intrpts)設置為network wide,即開啟響應網絡當中的鏈路中斷和恢復中斷。

圖3 源端進程模型

圖4 源端進程模型HB 代碼區

圖5 FB 代碼區函數功能實現
2.2.2 接收端節點進程建模
如2.1 中所示的方法構建出的接收端進程模型如圖6 所示。

圖6 接收端進程模型
節點模型用于定義每一個節點的行為。一個節點通常由多個模塊組成,其行為由其使用的不同的模塊決定,每個模塊完成一部分節點行為,如數據的產生、存儲等。下頁圖7 為源端節點模型,由一個處理器模塊,一個隊列模塊,一對端到端收發信機和Packet Stream 連接線組成。圖8 為接收端節點模型,由一個處理器模塊,一對端到端收發信機和Packet Stream 連接線組成。同時,將源端進程模型關聯到stop_wait 隊列模塊,將接收端進程模型關聯到sink 處理器模塊。

圖7 源端節點模型

圖8 接收端節點模型
首先,構建好自己的鏈路模型。在鏈路模型編輯器中將Link Type 設置為ptdup(雙工鏈路),date rate 設置為1M。同時修改4 個管道階段文件,txdel model(傳輸延時)設置為dpt_txdel,propdel model(傳播延時)設置為dpt_propdel,error model(錯誤分布)設置為dpt_error,ecc_error(錯誤糾正) 設置為dpt_ecc。
利用上面創建好的源端節點、接收端節點、鏈路模型創建網絡模型。同時配置故障模塊(Failure Recovery),鏈路故障情況設置為:200 s 時產生故障,500 s 時故障恢復。建好的網絡模型如圖9 所示。

圖9 網絡模型
根據上述網絡模型,進行仿真實驗,得出端到端時延、反饋確認包數量、吞吐量和鏈路利用率等重要參數的仿真結果。
從圖10 可以看出,200 s 時鏈路掉線,此時無法統計端到端時延,當500 s 時,鏈路故障恢復后,由于上層到達的包緩存了300 s 的時間,所以鏈路故障恢復后端到端時延猛增,臨近仿真結束時端到端時延逼近510 s。

圖10 端到端時延

圖11 反饋確認包數、吞吐量、鏈路利用率
從圖11 可以看出,由于200 s~500 s 之間,鏈路處于掉線狀態,所以反饋確認包的包個數是不變的,直到500 s 后才會集中將反饋確認包發回到源節點上,所以反饋包才會持續增加。吞吐量在200 s~500 s 之間呈下降的趨勢,因為吞吐量是基于之前的累加結果的,所以不會出現零值。因為200 s~500 s之間鏈路處于掉線狀態,所以對應的鏈路利用率為0。仿真結果驗證了停-等重傳協議所支持的性能。
OPNET Modeler 的3 層建模架構:網絡模型、節點模型、進程模型,和實際的協議、設備、網絡完全對應,全面反映了網絡的相關特性。其中進程模型為仿真的核心和難點。本文以實際的例子引導進程建模的思路,重點介紹了進程建模機制,給出了詳細具體的進程建模方法,同時在此基礎之上構建了節點模型、網絡模型。讀者可直接將文中的進程模型(.pr.m 文件)、節點模型(.nd.m 文件)延續用于自己的網絡當中。也可利用文中提出的進程建模方法的5 個步驟,根據實際需求設計符合具體要求的協議。建立好的進程模型可以直接關聯到節點模型的特定模塊,完成特定的節點行為。網絡模型的構建較簡單,無論網絡規模的大小,直接根據網絡的拓撲結構,將構建好的節點模型和OPNET Modeler 仿真平臺自帶的模型拖拽到仿真場景中,配置好鏈路模型的相關參數即可。要進行進一步的網絡仿真,還需為搭建好的網絡“配置業務”、“收集結果統計量”、“運行仿真”、“調試模塊再次仿真”。本文最后通過仿真實驗,驗證了停-等重傳協議所具有的功能,說明了進程建模方法的正確性和有效性,為研發者使用OPNET Modeler 建立新的協議提供了思路,可直接將本協議用于需要可靠傳輸的網絡場景,也可在此基礎之上對協議進行豐富擴充,以更好地滿足實際需求。