NS2初學筆記(二)之 ns2基本結構與交互問題

rel="File-List" href="file:///C:%5CDOCUME%7E1%5COwner%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

下面對前兩個問題解釋以下:

1ns2是一個軟件系統,只是用來模擬網絡功能的,不可能也沒有必要按照實際網絡模型來設計ns2的架構,但是ns2爲了模擬的需要也是面向對象程序設計的需要,它的代碼結構本身就是一種分層結構(各個類之間的繼承關係)。所以,當我們理解ns2的代碼結構時不要將其同TCP/IP進行匹配,而應該將其理解爲一種軟件設計時產生的必然結果。讓我們瞭解一下ns2的基本代碼結構,這樣在我們開發自己的協議時我們才能知道該用ns2的哪一個部件實現什麼功能。最基本的類是TCLObjectHandler(貌似這兩個類在開發時沒什麼用,不過是提供一個所有類的基類罷了),NsObject類的作用就是爲了以後編寫代碼方便(我是這麼覺得的,因爲c++是提供多繼承關係的),再往下就是ConnectorClassifier,這兩個類是最重要的兩個類了,他們的區別形象的說就是Connector是一進一出,而Classifier可以一進多出,他們都有自己的recv方法用來接受分組(就是數據包)。當然這兩個類也是爲了以後開發而抽象出來的,我覺得模擬系統就是在模擬接受和發送數據(包),只不過接受和發送的方法不同而已,以後需要發送和接受數據的類一定要繼承這兩個類,並且實現他們自己的方法(比如路由等),再下一層重要的類就是Agent類了,顧名思義就是代理各種網絡功能的——產生數據包、選擇通路等。這裏要說一下,既然ConnectorClassifier都可以收發數據,那爲什麼還有有Agent類呢,其實我覺得Agent類(繼承Connector)主要負責的是邏輯上的包的下一個地址的選擇,而真正發送的卻是Classifier實現的功能,這樣可以保持程序的耦合性,更利於以後的設計(這方面可以參考AODV算法的具體代碼)。通過以上的說明我想大家都應該知道閱讀ns2代碼的大體方向了,就是自底向上的方法。當然ns2的實際結構是非常的複雜,但是我上面所說的應該是一個主線(當然還有一條我就的就是ns2對各種事件的處理機制),抓住這個主線向外擴展可以事半功倍的。

 

2ns2通過一個Tcl解釋器來解釋用戶命令,應該說是前臺(Tcl解釋器)解釋,後臺(c++對象集)解析。那麼解釋和解析有什麼不同呢?Tcl作爲一種腳本語言就是,它提供一個Shell(就是一個交互控制檯),用戶通過輸入各種命令來爲Tcl解釋器提供素材,比方說用戶想創建一個解釋器,那麼Shell的到創建解釋器的命令,然後通過Tcl解釋器解釋得到創建解釋器的請求,如果這樣就創建了一個模擬器,那麼也就沒有後臺什麼事了,也就沒有什麼解析的概念了,所謂後臺解析,就是ns2的設計精巧之處,它通過Tcl解釋器的到命令並沒有完事,還要將其中的網絡模擬邏輯命令傳給c++對象,讓c++對象對該命令進行處理,然後產生各種的結果。這就是ns2的分裂對象設計所得到的軟件架構。這樣作有什麼好處呢,其實這樣作就好比網站設計中標記語言和腳本語言負責顯示邏輯而高級面嚮對象語言負責後臺邏輯一個道理——可以提高程序的使用效率(試想一下,用戶使用模擬器的過程中同模擬器的交互是多麼的頻繁,如果沒提交一次方案就進行一次c++程序的編譯,那樣效率會如何的底下,想都不敢想)。我這只是大體的說了一下,具體的還要通過使用慢慢體會ns2的這種程序設計方法,這是很值得借鑑的一種方法。
發佈了43 篇原創文章 · 獲贊 10 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章