1. 程式人生 > >opnet初探以及Packet Switching I實驗過程中的若干問題的思考

opnet初探以及Packet Switching I實驗過程中的若干問題的思考

之前雖然經常聽到opnet這個工具,但是得到的多數負面評價,如不穩定,貴,經常出錯等。所以也未曾認真對待這個工具。今日出於偶然的一個目的,變打算自己動手接觸接觸這個傳說中的最強大,最放方便的net模擬工具。當然我沒有那麼多錢去弄個授權版本的,好在opnet有education版本,於是就安裝了14.5的education版本。

接觸的第一感覺,就是很方便,粗略瀏覽了一下models,相當的全面,幾乎我聽到過的model都已經內建了,然後便是安裝,安裝的過程沒出現什麼問題

我的環境是:win7 32bit + vs2010,參考網上的經驗,拔了網線安裝的,順利通過,安裝過程沒有出現問題。初次啟動後,報告了幾個找不到h檔案的錯誤,調整了環境變數後,就搞定了,測試簡單的demo,順利得出結果,於是只能在心裡默默點讚了,初次接觸順利!

關於安裝總結一下:

1、拔網線安裝的原因我猜測,是應為安裝的過程中是需要驗證 註冊使用者名稱和密碼的,education版本也需要驗證,在沒有網路基礎上,就繞過去了,我個人猜測是的。

     如果從opnet官方下載安裝包,在下載的過程中也是需要驗證使用者名稱和密碼的,這可也許可以驗證次猜測。

2、opnet的安裝問題主要在於和vs的開發環境相關聯起來,只要養成良好的軟體安裝習慣,折點問題也不大,出現缺少檔案的時候,先搜尋是否存在其他的地方,然後把對應的檔案的位置加入lib或者include環境變數中,基本能解決。

3、之前流傳的關於opent不穩定,難用的說法,我覺得系謠傳,也可能與國人多用盜版的軟體有關係,opnet的授權費用確實太高,但是我覺得education版本還是不錯,應付下研究還是沒問題的。

順利安裝好後,網上找到了,陳敏對應的教材,寫的很詳細,可惜版本舊了,14.5的操作還是稍微不同,但是影響不大,後面才發現,其實陳的書,就是翻譯了opnet的幫助文件了,後面才找到自帶的tutorial,很是詳細,大讚!

由於之前也做過一寫關於網路的模擬了,對於模擬的基本原理理解較容易,上手也較快,按照教材的Packet Switching I做實驗,從建立model到組網,然後到模擬,走了一個基本的流程,我按照教材的步驟開始了所有的過程,但是最終的結果異常讓我費解。

設定好節點反正時間為1000s但是網路模擬到10s的時候一直處於產生資料包,到丟棄資料包的過程,我很是鬱悶,模擬時間停在了10s的時間不動了,沒有任何error出現,啟動odb除錯,追蹤資料包的的軌跡,發現數據包從src模組產生,然後經過prc模組,到xmt的時候就丟棄了,居然都不傳送出去,而且顯示 由於 佇列空間不足,直接丟棄了,我納悶了,我按照教材上一樣設定的,怎麼可能會空間不足呢!

於是我開啟 自帶的ref例程,一個一個引數的對照,人就沒有發現問題,於是我開始將自己建立的模組與教程自帶的模組,進行混合組成網路,經過多次的排除和分析(幸虧網路組建不多,否則,排除法幾乎要弄瘋了),最終定位問題到了,自己建立的node模組上了,一旦我將例程的node模組換成自己的,問題就重現了(當然排除了鏈路匹配的問題了),於是開始對比自己建立的node模組與官方給的node模組,從程式碼,到引數配置,全部檢查過了依舊無果,我甚至替換了,process程序模組部分的程式碼了,問題依舊沒有解決。

於是開始把注意力轉移到console返回的訊息,這裡提示,說無法識別的分佈名稱什麼的,自動替換成了常數分佈,之前應為發現這個並不是按照error來提示的,也沒怎麼注意,在別無他法的情況下,開始搜尋關於 這個分佈無法識別的問題,一段檢索後,在baisi網上終於找到一個類似的案例,人家回答說”重新載入分佈“,可是我從頭至尾都沒有載入過什麼分佈了,只是按照教材的程式碼,啟用了一個產生[0,3]的一個均勻分佈,這不可能出問題了,在幾乎抓狂的情況下,絕望的打開了src模組設定的simple_source程序,異想天開以為是系統程式碼出了問題,開始搜尋與oms_load_dist相關的一切線索,

並最終只找到了一個相似的呼叫oms_dist_load_from_string (interarrival_str),這個函式是從一個字串產生一個分佈,聯想到我的報錯內容:

Module (11), (top.pksw.node_0.src)
From procedure: oms_dist_load (dist_name, dist_arg0, dist_arg1)
Unable to load specified distribution "4 (0.00, 0.00)".
Loading a "constant (0.00)" distribution instead.

我只有在對source iterative time這個屬性進行操作的時候,才輸入過一個4相關的內容

但是我在symbol裡面直接輸入了4,而對應的value也輸入了4,以為編輯器會自動的將4設定為常量,於是就把constant去掉了,誰知道這就是罪魁禍首了!!!!

於是,把這裡的value都改為contant對應的形式,也就是圖上的形式,在跑,順利的complete了!!一推汗!!!

最後總結:由於value為4是一個字串,opnet把這個4識別成了,分佈的名稱,當然沒有這個分佈,於是,

opnet自己這麼搞定了:“Loading a "constant (0.00)" distribution instead.”,又應為src模組是一個simple_source,所以按照constant(0.00)的頻率一直產生資料包,由於cpu的速度異常快,資料包郵校,導致系統壓根無法響應其他的Event,佇列的緩衝區也瞬間就滿了,於是不停的丟棄資料包,不聽的產生資料包,導致模擬時間一直停在了10s時間上,而程式的原意,是想讓src每隔4個時間產生一個包!!

至於為什麼這裡會把這個4當成分佈的名稱呢??我著實沒弄明白!!!這隻能說明,除錯過程中的任何一個蛛絲馬跡都可能成為解決問題的關鍵!!

經過這麼一折騰,對opnet也瞭解了更多!總的來說,opnet是提供了一個良好的工具集合域介面的工具,讓我們能夠按照自己的想法來構建網路,當然相比於ns2或者ns3,缺乏完全放開的靈活性,但這從一定程度上也是一件好事,這讓我們更加容易將注意力花到我們的應用邏輯上,從而提高模擬效率!!