彭 思,齊和平,崔雪峰,朱 浩,李萌萌
(北方自動(dòng)控制技術(shù)研究所,太原 030006)
在信息技術(shù)飛速發(fā)展的今天,網(wǎng)絡(luò)結(jié)構(gòu)和規(guī)模日趨復(fù)雜龐大,網(wǎng)絡(luò)負(fù)載日益繁重,新的網(wǎng)絡(luò)技術(shù)大量涌現(xiàn),因此,如何對(duì)現(xiàn)有網(wǎng)絡(luò)進(jìn)行優(yōu)化和設(shè)計(jì)是個(gè)富有挑戰(zhàn)性的課題。無(wú)論是構(gòu)建新網(wǎng)絡(luò),升級(jí)改造現(xiàn)有網(wǎng)絡(luò),或者測(cè)試新協(xié)議,都需要對(duì)網(wǎng)絡(luò)的可靠性和有效性進(jìn)行科學(xué)、客觀、定量地評(píng)估。傳統(tǒng)網(wǎng)絡(luò)設(shè)計(jì)和規(guī)劃方法主要靠經(jīng)驗(yàn),而對(duì)復(fù)雜的大型網(wǎng)絡(luò),由于很多地方無(wú)法預(yù)知而抓不住設(shè)計(jì)的要點(diǎn)。網(wǎng)絡(luò)仿真作為一種新的網(wǎng)絡(luò)規(guī)劃和設(shè)計(jì)技術(shù)應(yīng)運(yùn)而生,它以其獨(dú)有的方法為網(wǎng)絡(luò)的規(guī)劃設(shè)計(jì)提供客觀、可靠的定量依據(jù),縮短網(wǎng)絡(luò)建設(shè)周期,提高網(wǎng)絡(luò)建設(shè)中決策的科學(xué)性[2]。
網(wǎng)絡(luò)仿真技術(shù)是一種通過(guò)建立網(wǎng)絡(luò)設(shè)備、鏈路和協(xié)議模型,并模擬網(wǎng)絡(luò)流量的傳輸,從而獲取網(wǎng)絡(luò)設(shè)計(jì)或優(yōu)化所需要的網(wǎng)絡(luò)性能數(shù)據(jù)的仿真技術(shù)。OPNET Modeler 的物件拼盤(pán)提供了詳盡的模型庫(kù)(設(shè)備、鏈路及詳細(xì)的協(xié)議),包括:路由器、交換機(jī)、服務(wù)器、客戶(hù)機(jī)、ATM 設(shè)備、DSL 設(shè)備、ISDN 設(shè)備等,還有其他廠(chǎng)商提供的設(shè)備[8,10]。針對(duì)研發(fā)的需求,OPNET Modeler 提供了一個(gè)開(kāi)放的環(huán)境,使用戶(hù)能夠建立新的協(xié)議和設(shè)備,并且能夠?qū)⒓?xì)節(jié)定義并模擬出來(lái)。OPNET Modeler 仿真平臺(tái)的使用范圍較廣,既可以用于現(xiàn)有網(wǎng)絡(luò)的優(yōu)化和擴(kuò)容,也可以用于新網(wǎng)絡(luò)的設(shè)計(jì),而且特別適用于大中型網(wǎng)絡(luò)的設(shè)計(jì)和優(yōu)化,建好的網(wǎng)絡(luò)模型也可以延續(xù)使用[7]。本文以O(shè)PNET Modeler 仿真工具為例,通過(guò)對(duì)停-等重傳協(xié)議的仿真建模、運(yùn)行分析,重點(diǎn)探究了進(jìn)程建模的技術(shù)方法,同時(shí)簡(jiǎn)要闡述了本文研究方法和模型的使用方法,為后續(xù)更復(fù)雜龐大的協(xié)議開(kāi)發(fā)、網(wǎng)絡(luò)仿真奠定基礎(chǔ),提供參考。
通用仿真方法大致分為以下幾個(gè)步驟:
1)了解自己要構(gòu)建的系統(tǒng):書(shū)面的詳述說(shuō)明。
2)明確建模目標(biāo):包括構(gòu)建這個(gè)模型要解決什么問(wèn)題,或是利用系統(tǒng)級(jí)仿真軟件驗(yàn)證自定制的網(wǎng)絡(luò)協(xié)議路由性能的收斂性、網(wǎng)絡(luò)的健壯性和穩(wěn)定性。
3)確定建模對(duì)象和方向:根據(jù)建模目標(biāo)選擇建模要構(gòu)建的對(duì)象,例如在網(wǎng)絡(luò)當(dāng)中可能需要用到哪些元素(IP 骨干云,不同的鏈路類(lèi)型等),從哪個(gè)方面建模:例如從升級(jí)鏈路帶寬的角度入手,判斷對(duì)吞吐量和時(shí)延的影響。
4)調(diào)整仿真粒度以達(dá)到更精確的結(jié)果:明確是要得到一個(gè)趨勢(shì)性的結(jié)果,還是一個(gè)精確的數(shù)值。
5)確定輸入輸出形式。
6)確定仿真軟件。
7)確定仿真參數(shù)輸入范圍。
8)仿真結(jié)束后判斷仿真結(jié)果的準(zhǔn)確性、詳細(xì)程度、統(tǒng)計(jì)可用性[3-6]。
通用仿真方法流程圖如圖1 所示。
圖1 通用仿真方法流程圖
OPNET 網(wǎng)絡(luò)仿真軟件是目前世界上最先進(jìn)的網(wǎng)絡(luò)仿真平臺(tái)之一。在OPNET 的各種產(chǎn)品中,Modeler 幾乎包含了其他產(chǎn)品的所有功能。OPNET Modeler 所能應(yīng)用的各種領(lǐng)域包括端到端結(jié)構(gòu)、系統(tǒng)級(jí)的仿真、新的協(xié)議開(kāi)發(fā)和優(yōu)化、網(wǎng)絡(luò)和業(yè)務(wù)層配合如何達(dá)到最好的性能。OPNET Modeler 采用分層的仿真方式,從協(xié)議間關(guān)系看,節(jié)點(diǎn)模型建模完全符合OSI 標(biāo)準(zhǔn)。從網(wǎng)絡(luò)物件層次關(guān)系看,提供了3層建模機(jī)制,最底層為進(jìn)程模型,以狀態(tài)機(jī)來(lái)描述協(xié)議;其次為節(jié)點(diǎn)模型,由相應(yīng)的協(xié)議模型構(gòu)成,反映設(shè)備特性;最上層為網(wǎng)絡(luò)模型。3 層模型和實(shí)際的協(xié)議、設(shè)備、網(wǎng)絡(luò)完全對(duì)應(yīng),全面反映了網(wǎng)絡(luò)的相關(guān)特性。在OPNET Modeler 中,幾個(gè)模塊組成一個(gè)節(jié)點(diǎn),一些節(jié)點(diǎn)組成一個(gè)網(wǎng)絡(luò),而進(jìn)程模型定義一個(gè)模塊的行為,所以它是構(gòu)建網(wǎng)絡(luò)的基本,是仿真的核心[1]。
停-等重傳協(xié)議位于信源端的第2 層mac 層,是數(shù)據(jù)鏈路層最簡(jiǎn)單最基礎(chǔ)的協(xié)議。其功能是為所傳輸?shù)臄?shù)據(jù)包提供可靠的交付,它和源端的上層和底層都有交互,接收上層來(lái)的數(shù)據(jù)包,轉(zhuǎn)發(fā)給底層,并且保證在沒(méi)有收到數(shù)據(jù)包的情況下進(jìn)行重傳,達(dá)到可靠交付的功能。
停-等重傳協(xié)議簡(jiǎn)化后可總結(jié)為如下描述:1)接收來(lái)自上層的數(shù)據(jù)包,轉(zhuǎn)發(fā)給物理層。2)轉(zhuǎn)發(fā)下一個(gè)數(shù)據(jù)幀之前要確認(rèn)從對(duì)端收到一個(gè)反饋確認(rèn)包,表示上一個(gè)幀轉(zhuǎn)發(fā)成功才會(huì)發(fā)送下一個(gè)幀。3)在等待反饋確認(rèn)包的過(guò)程中收到來(lái)自應(yīng)用層的數(shù)據(jù)包,先將其緩存起來(lái),直到收到對(duì)端的反饋確認(rèn)包才會(huì)轉(zhuǎn)發(fā)下一個(gè)幀。4)源端會(huì)自動(dòng)設(shè)置一個(gè)時(shí)鐘,當(dāng)超過(guò)這一時(shí)間還未收到來(lái)自對(duì)端的反饋確認(rèn)包時(shí),會(huì)認(rèn)為對(duì)端沒(méi)有收到數(shù)據(jù)包,會(huì)重傳數(shù)據(jù)包。5)當(dāng)鏈路掉線(xiàn)時(shí),會(huì)將數(shù)據(jù)包緩存起來(lái),直到鏈路恢復(fù)后進(jìn)行重傳。
進(jìn)程建模是網(wǎng)絡(luò)仿真的核心,也是網(wǎng)絡(luò)仿真的難點(diǎn)。進(jìn)程建模方法分為以下5 個(gè)步驟:
1)文本定義;2)進(jìn)程分解;3)事件列舉;4)事件列表的開(kāi)發(fā);5)OPNET 中代碼的實(shí)現(xiàn)。
下面根據(jù)這5 個(gè)步驟分別對(duì)停- 等重傳協(xié)議源端和目的端節(jié)點(diǎn)進(jìn)程進(jìn)行建模。
2.2.1 源端節(jié)點(diǎn)進(jìn)程建模
1)文本定義:根據(jù)協(xié)議描述,確定當(dāng)前協(xié)議和其他協(xié)議棧的交互關(guān)系。交互關(guān)系框架如圖2 所示。
圖2 協(xié)議棧交互框架
2)進(jìn)程分解:根據(jù)要仿真的協(xié)議和算法確定采用單一進(jìn)程模型還是多進(jìn)程模型來(lái)實(shí)現(xiàn)。本協(xié)議采用單進(jìn)程來(lái)進(jìn)行建模。
3)事件列舉:把協(xié)議描述中可能發(fā)生的事件一一列舉出來(lái),并指定其在OPNET 中是什么中斷類(lèi)型。如表1 所示,將事件與中斷類(lèi)型作一列舉和映射。
表1 事件與中斷類(lèi)型
4)事件列表的開(kāi)發(fā):該部分是進(jìn)程建模的核心部分。采用逐層遍歷的方式對(duì)事件列表進(jìn)行開(kāi)發(fā)。即:先確定一個(gè)初始狀態(tài),按照“順藤摸瓜”的方式遍歷第3 步列出來(lái)的所有事件,再去遍歷每個(gè)事件下可能的條件,分析可能的跳轉(zhuǎn)方向,最后分析在這個(gè)條件下執(zhí)行什么操作以及可能會(huì)轉(zhuǎn)移的狀態(tài)。當(dāng)所有事件都遍歷完后事件列表處于一個(gè)收斂的狀態(tài)[9]。下面結(jié)合停-等重傳協(xié)議來(lái)分析一下事件列表的遍歷過(guò)程。構(gòu)建進(jìn)程模型首先要確定一個(gè)初始狀態(tài)(Init),從初始狀態(tài)下來(lái)分析哪些事件會(huì)發(fā)生。表2 展示了從Init 狀態(tài)出發(fā)的事件響應(yīng)情況。表3 展示了從ACK Wait 狀態(tài)出發(fā)的事件響應(yīng)情況。其余狀態(tài)的事件響應(yīng)以此為例即可構(gòu)建。
表2 Init 狀態(tài)響應(yīng)列表
表3 ACK Wait 狀態(tài)響應(yīng)列表
通過(guò)前4 步設(shè)計(jì)出針對(duì)不同協(xié)議的狀態(tài)轉(zhuǎn)移關(guān)系,挖掘潛在的轉(zhuǎn)移方向,最后在第5 步通過(guò)相應(yīng)的代碼編寫(xiě)來(lái)實(shí)現(xiàn)。
5)代碼實(shí)現(xiàn)。根據(jù)開(kāi)發(fā)的事件列表中的內(nèi)容繪制狀態(tài)轉(zhuǎn)移圖,并且在狀態(tài)轉(zhuǎn)移線(xiàn)上定義轉(zhuǎn)移條件和執(zhí)行的函數(shù),進(jìn)行代碼的編寫(xiě)。根據(jù)事件列表構(gòu)建的源端進(jìn)程模型如圖3 所示。在HB 代碼區(qū)對(duì)轉(zhuǎn)移條件進(jìn)行宏定義,相應(yīng)的HB 代碼區(qū)的內(nèi)容如圖4 所示。在FB 代碼區(qū)實(shí)現(xiàn)了狀態(tài)轉(zhuǎn)移線(xiàn)上定義的函數(shù)功能,具體代碼如圖5 所示。進(jìn)程模型搭建完成后要在進(jìn)程模型編輯器的進(jìn)程接口中開(kāi)啟初始化仿真中斷(begsim intrpt),同時(shí)將鏈路中斷(failure intrpts)和恢復(fù)中斷(recovery intrpts)設(shè)置為network wide,即開(kāi)啟響應(yīng)網(wǎng)絡(luò)當(dāng)中的鏈路中斷和恢復(fù)中斷。
圖3 源端進(jìn)程模型
圖4 源端進(jìn)程模型HB 代碼區(qū)
圖5 FB 代碼區(qū)函數(shù)功能實(shí)現(xiàn)
2.2.2 接收端節(jié)點(diǎn)進(jìn)程建模
如2.1 中所示的方法構(gòu)建出的接收端進(jìn)程模型如圖6 所示。
圖6 接收端進(jìn)程模型
節(jié)點(diǎn)模型用于定義每一個(gè)節(jié)點(diǎn)的行為。一個(gè)節(jié)點(diǎn)通常由多個(gè)模塊組成,其行為由其使用的不同的模塊決定,每個(gè)模塊完成一部分節(jié)點(diǎn)行為,如數(shù)據(jù)的產(chǎn)生、存儲(chǔ)等。下頁(yè)圖7 為源端節(jié)點(diǎn)模型,由一個(gè)處理器模塊,一個(gè)隊(duì)列模塊,一對(duì)端到端收發(fā)信機(jī)和Packet Stream 連接線(xiàn)組成。圖8 為接收端節(jié)點(diǎn)模型,由一個(gè)處理器模塊,一對(duì)端到端收發(fā)信機(jī)和Packet Stream 連接線(xiàn)組成。同時(shí),將源端進(jìn)程模型關(guān)聯(lián)到stop_wait 隊(duì)列模塊,將接收端進(jìn)程模型關(guān)聯(lián)到sink 處理器模塊。
圖7 源端節(jié)點(diǎn)模型
圖8 接收端節(jié)點(diǎn)模型
首先,構(gòu)建好自己的鏈路模型。在鏈路模型編輯器中將Link Type 設(shè)置為ptdup(雙工鏈路),date rate 設(shè)置為1M。同時(shí)修改4 個(gè)管道階段文件,txdel model(傳輸延時(shí))設(shè)置為dpt_txdel,propdel model(傳播延時(shí))設(shè)置為dpt_propdel,error model(錯(cuò)誤分布)設(shè)置為dpt_error,ecc_error(錯(cuò)誤糾正) 設(shè)置為dpt_ecc。
利用上面創(chuàng)建好的源端節(jié)點(diǎn)、接收端節(jié)點(diǎn)、鏈路模型創(chuàng)建網(wǎng)絡(luò)模型。同時(shí)配置故障模塊(Failure Recovery),鏈路故障情況設(shè)置為:200 s 時(shí)產(chǎn)生故障,500 s 時(shí)故障恢復(fù)。建好的網(wǎng)絡(luò)模型如圖9 所示。
圖9 網(wǎng)絡(luò)模型
根據(jù)上述網(wǎng)絡(luò)模型,進(jìn)行仿真實(shí)驗(yàn),得出端到端時(shí)延、反饋確認(rèn)包數(shù)量、吞吐量和鏈路利用率等重要參數(shù)的仿真結(jié)果。
從圖10 可以看出,200 s 時(shí)鏈路掉線(xiàn),此時(shí)無(wú)法統(tǒng)計(jì)端到端時(shí)延,當(dāng)500 s 時(shí),鏈路故障恢復(fù)后,由于上層到達(dá)的包緩存了300 s 的時(shí)間,所以鏈路故障恢復(fù)后端到端時(shí)延猛增,臨近仿真結(jié)束時(shí)端到端時(shí)延逼近510 s。
圖10 端到端時(shí)延
圖11 反饋確認(rèn)包數(shù)、吞吐量、鏈路利用率
從圖11 可以看出,由于200 s~500 s 之間,鏈路處于掉線(xiàn)狀態(tài),所以反饋確認(rèn)包的包個(gè)數(shù)是不變的,直到500 s 后才會(huì)集中將反饋確認(rèn)包發(fā)回到源節(jié)點(diǎn)上,所以反饋包才會(huì)持續(xù)增加。吞吐量在200 s~500 s 之間呈下降的趨勢(shì),因?yàn)橥掏铝渴腔谥暗睦奂咏Y(jié)果的,所以不會(huì)出現(xiàn)零值。因?yàn)?00 s~500 s之間鏈路處于掉線(xiàn)狀態(tài),所以對(duì)應(yīng)的鏈路利用率為0。仿真結(jié)果驗(yàn)證了停-等重傳協(xié)議所支持的性能。
OPNET Modeler 的3 層建模架構(gòu):網(wǎng)絡(luò)模型、節(jié)點(diǎn)模型、進(jìn)程模型,和實(shí)際的協(xié)議、設(shè)備、網(wǎng)絡(luò)完全對(duì)應(yīng),全面反映了網(wǎng)絡(luò)的相關(guān)特性。其中進(jìn)程模型為仿真的核心和難點(diǎn)。本文以實(shí)際的例子引導(dǎo)進(jìn)程建模的思路,重點(diǎn)介紹了進(jìn)程建模機(jī)制,給出了詳細(xì)具體的進(jìn)程建模方法,同時(shí)在此基礎(chǔ)之上構(gòu)建了節(jié)點(diǎn)模型、網(wǎng)絡(luò)模型。讀者可直接將文中的進(jìn)程模型(.pr.m 文件)、節(jié)點(diǎn)模型(.nd.m 文件)延續(xù)用于自己的網(wǎng)絡(luò)當(dāng)中。也可利用文中提出的進(jìn)程建模方法的5 個(gè)步驟,根據(jù)實(shí)際需求設(shè)計(jì)符合具體要求的協(xié)議。建立好的進(jìn)程模型可以直接關(guān)聯(lián)到節(jié)點(diǎn)模型的特定模塊,完成特定的節(jié)點(diǎn)行為。網(wǎng)絡(luò)模型的構(gòu)建較簡(jiǎn)單,無(wú)論網(wǎng)絡(luò)規(guī)模的大小,直接根據(jù)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),將構(gòu)建好的節(jié)點(diǎn)模型和OPNET Modeler 仿真平臺(tái)自帶的模型拖拽到仿真場(chǎng)景中,配置好鏈路模型的相關(guān)參數(shù)即可。要進(jìn)行進(jìn)一步的網(wǎng)絡(luò)仿真,還需為搭建好的網(wǎng)絡(luò)“配置業(yè)務(wù)”、“收集結(jié)果統(tǒng)計(jì)量”、“運(yùn)行仿真”、“調(diào)試模塊再次仿真”。本文最后通過(guò)仿真實(shí)驗(yàn),驗(yàn)證了停-等重傳協(xié)議所具有的功能,說(shuō)明了進(jìn)程建模方法的正確性和有效性,為研發(fā)者使用OPNET Modeler 建立新的協(xié)議提供了思路,可直接將本協(xié)議用于需要可靠傳輸?shù)木W(wǎng)絡(luò)場(chǎng)景,也可在此基礎(chǔ)之上對(duì)協(xié)議進(jìn)行豐富擴(kuò)充,以更好地滿(mǎn)足實(shí)際需求。