2008年5月22日 星期四

準備工具

應用程式named "MmApp"(修改CBR程式得來) 衍生自"Application"類別
"MmApp" generate packet , transform by "UdpMmAgent","UdpMmAgent"衍生自"UdpAgent"類別

封包是用"hdr_mm"結構來描述。

程式路徑:
packet.h c:\cygwin\home\STD416\ns-allinone-2.29\common
ns-packet.tcl c:\cygwin\home\STD416\ns-allinone-2.29\tcl\lib
agent.h c:\cygwin\home\STD416\ns-allinone-2.29\common
app.h c:\cygwin\home\STD416\ns-allinone-2.29\apps
ns-default.tcl c:\cygwin\home\STD416\ns-allinone-2.29\tcl\lib

timer-handler c:\cygwin\home\STD416\ns-allinone-2.29\common

2008年5月21日 星期三

無線隨意網路路由協定

無線隨意網路中, 路由協定可分兩類:
  • proactive routing protocol:

Wireless Routing Protocol , Destination-Sequenced Distance-Vector protocol

  • reactive routing protocol :

Dynamic Source Routing , Ad hoc On-Demand Distance Vector Routing

比較 DSDV vs. AODV vs. DSR

DSDV

DSDV中美一個無線節點必須儲存並持續更新一個路由表,路由表內記錄著"目的地位置(destination)"、"下一個節點(next hop)"、"路徑節點數(hop count)"、"循序號碼(sequence number)"與 "第一次相連時間(install)"

路徑表的更新擁有time-driven & event-driven ,可以定期向周圍傳送路由表資訊,也可能因為網路拓樸劇變而向周圍傳送...

AODV

當無線節點要傳送封包出去時,先查找自己的路徑表,若無目的地節點的資訊,則廣播Route Requests(RREQs)封包尋找路徑。
每個RREQs都配有一個ID當無線節點收到RREQs時,先看ID之前有沒有收過,有的話就丟棄,以免RREQs充斥在網路上,再檢查自己是不是封包裡的目的地位置,不是,則看此中繼點(intermediate node)是否有可用的路徑可以到達目的地節點,沒有,則根據封包內資訊修改路徑表後再廣播出去。

每一個收到RREQs的無線節點都會cache住如何返回當時發出Route Reply要求來源端的路徑,因此當中繼點收到RREQ時,可以利用單點廣播方法送出RREP從目的地端到來源端,途中的無線節點根據RREP的位置序號更改路徑表,最後來源端的路徑表就含有到目的地節點的entry,接下來開始資料的傳送。

DSR

利用source routing觀念,即Tx知道Rx完整的跳躍路徑(hop-by-hop route)。
每個節點都有路徑暫存器,而路徑資訊直接記錄在每個封包的header中。

路徑發現程序(route discovery)與AODV類似,欲傳送封包時,先看自己的路徑表,若找不到到達目的地端的route entry,則作廣播動作發送RREQs,而收到RREQ的節點會回覆RREP給原本的來源端或中繼點,藉此產生路徑。不同的是,路徑記錄每經過一個跳耀,就會將跳躍ID季在RREQ的路徑記錄中,這樣,路徑記錄到目的地時就會有該路徑所有節點的資訊,目的端會在中多的REQUEST中挑選最佳路徑,根據路徑記錄傳送一個Route Reply回到來源端,來源端再將紀錄再route reply裡的路徑記錄儲存在路由表中。


2008年5月8日 星期四

實驗十 無線網路效能分析探討(二) Ad Hoc網路路由協定效能分析

實驗目的
1.了解如在在NS2中建立無線隨意網路(wireless Ad Hoc network)。
2.學習分析無線隨意網路路由協定(Ad Hoc routing protocols)的效能。

背景知識
行動式手提設備(手機、PDA、筆電),都屬於可移動的無線裝置,而無線傳輸方式可分成兩大類



  1. Infrastructure:透過基地台,由中央控制的傳輸模式

  2. Wireless Ad Hoc Network:特色是所有節點以對等方式進行無線網路存取,不需透過無線基地台 (wiki. Sony PSP 網路對戰就是這樣一個應用,還沒玩過,殘念~~)

無線隨意網路路由協定 :


  • Proactive routing protocol (table-driven protocol)

每個無線節點固定一段時間就會發送路徑訊息,各個無線節點依據收集近來的資料更新自己的路徑表,網路拓樸更動時,所有節點都會收到最新的路徑資訊,這種持續的更新會讓所有節點隨時有完整的路徑。


優點:Proactive routing protocol 讓每個送出的封包立刻得知到達目的地的路徑,沒有任何延遲 缺點:這種協定因為週期性的廣播訊息,浪費大量頻寬與無線網路節點的電源


現存的協定有:

Wireless Routing Protocol Destination-Sequenced Distance-Vector protocol

  • Reactive routing protocol (demand-driven routing protocol)

當一個節點要傳送資料給另一個節點時,來源節點會呼叫一個路徑發現程序(route-discovery process)並將此保存在暫存器中,直到過期或路徑無效

優點:只有在有需要時才主動發現路徑,不需要保存對整個網路環境的路由資訊,所以頻寬使用量較小。
缺點:路徑發現程序會造成延遲,平均延遲時間較長,所以尋找路徑時間較長。

DSDV vs. AODV vs. DSR

評估參數(Performance Metrics)

下面列出在此類效能分析實驗中最常用到的幾個評估參數 1.封包送達比例(Packet delivery fraction):CBR 來源端傳送封包數/到達目的地端封包數 2.封包平均點到點延遲時間 (Average end-to-end delay of data packets):所有延遲時間的總和,包括 發現路徑的緩衝時間、MAC層的重傳時間、傳遞時間 等。 3.第一個封包收到的時間 : 用來評估路由表收斂時間,若越早收到則表是收斂速度越快,這樣才能越早把封包從Tx送到Rx 實驗步驟 intruduce tools : cbrgen & setdest cbrgen (~/ns-allinone-2.29/ns-2.29/indep-utils/cmu-scen-gen/cbrgen.tcl): generate TCP flow or CBR flow 用法 ns cbrgen [-type cbrtcp] [-nn node] [-seed seed] [-mc connections] [-rate rate] 舉例: p1
































2008年4月26日 星期六

lab9 無線網路效能分析探討(-) 隱藏節點和暴露節點問題



實驗目的:

  1. 了解什麼是隱藏節點和暴露節點
  2. 了解 RTS/CTS如何降低隱藏節點問題發生的機會,以提升系統效能 3. 了解 NS2 中無線傳輸模型和門檻的觀念

背景知識:

  • 隱藏節點問題:

    節點B在節點A和節點C傳輸範圍內的交集區域內,但是A和C都不在互相的傳輸範圍內,這時有兩個節點A,C同時想傳送資料給節點B,節點A傳送資料給B時,節點C會認為目前網路閒置,同時也會傳送資料給節點B,同時傳送給節點B的資料就會發生碰撞(Collision).

    這種因傳送距離而發生的誤判的問題稱為隱藏節點問題(Hidden Terminal Problem).


  • 降低隱藏節點問題

    當Tx在送出資料前先發送一個控制封包 (Request to Send),告知Tx傳送範圍內的所有節點不要有任何傳輸的動作,而Rx如果目前是空閒的,則回應一個Clear to Send 封包告訴Tx可以開始傳送料,如此一來就可以降低隱藏節點的問題,但是並不能完全解決!

  • 暴露節點問題

    Tx:C 要傳送資料給D時,發現(聽到)傳輸範圍內的B正在傳送資料給A(C是B的暴露節點),Tx:C就會延遲傳送,但這種延遲是不必要的,因為B傳送資料給A與C傳送資料給D並不衝突,因此這種因為聽到傳輸範圍內有節點在傳輸,而延遲傳輸就是暴露節點的問題
  • 使用RTS/CTS
    我們可能想到使用RTS/CTS,當C聽到B送出的RTS,但卻沒聽到相對應的CTS,那麼不就可以推論出C是自己是暴露節點了嗎?!所以C可以同時傳送資料出去,但在這種情況下,如果是別人傳送資料給C,那麼就可能預B傳送的資料發生碰撞,所以使用RTS/CTS並不能解決暴露節點的問題
  • 傳輸模型及門檻
    NS2實做了一些傳輸模型:


Free Space 是最理想的傳輸模型(檔案在~/ns-2.29/mobile/propagation.h & propagation.cc)

Two Ray Ground 除了考慮直線 path loss也考慮地面反射(reflection of ground)
(檔案在~/ns-2.29/mobile/tworayground.h & tworayground.cc)

Shadowing 是用來模擬Tx到Rx中間有障礙物時對傳送訊號的影響,常用於indoor
(檔案在~/ns-2.29/mobile/shadowing.h & shadowing.cc)

關於"門檻",NS2主要利用訊號強度門檻(Threshold)方式,判斷封包是否成功收到
NS2設定一個訊號偵測(Carrier Sense)的門檻CSThresh_ ,決定封包是否能被Rx偵測出來 (於PHY Module)
NS2會設定另一個RxThresh_ ,用來判斷封包是否能被Rx所接收 (於MAC)

(檔案在~/ns-2.29/mobile/wireless-phy.h & wireless-phy.cc)

開始實驗步驟

STEP1.

ns2提供一個小工具程式threshold.cc(在ns-allinone-2.29/ns-2.29/indep-utils/propagation),他可以藉由輸入想要使用的傳輸模型和有效傳輸距離,而輸出相對應的參數值

用g++編譯它


顯示警告


意思是版本不同了,引入的標頭檔不用x.h的形式而用x來取代
沒關係 不影響我們的作業
編譯完後在同目錄下會產生一個threshold.exe

STEP2
執行

它告訴我們使用方法囉
來測試看看 設定傳輸模式TwoRayGround 有效傳輸距離250m

顯示參數

STEP3
用TCL模擬程式驗證(home/clark/lab9/test_2nodes.tcl)
這程式設定有兩節點n0(30,30),n1(280,30) n0要傳輸給n1,參數如上設定
執行

模擬結束,會產生接收紀錄檔,打開來看看,確實有接收到

STEP4
那如果變更超過可接受距離呢?


在執行一次 $ns test_2nodes.tcl,開啟此次接收檔rd

可知n1完全沒接收到n0傳來的資料

接下來要討論隱藏節點問題了
如圖一nA-nB d=100m ,nB-nC d=100 m,節點之間的carrier sense d=150m 傳送有效距離為120m
利用小工具知道我們要設定的參數


對於CSThresh_的設定 ,因為用的公是相同,只要把RXThresh_結果拿來用即可
TCL模擬程式

執行
$ns test_hidden_terminal.tcl
我們看執行後產生的紀錄檔

sd1:

sd2:

rd1:
rd2:
更改TCL模擬檔

再一次執行

rd1:

rd2:


明顯的 使用RTS/CTS可以降低隱藏節點問題,但不能完整解決

接下來討論暴露節點問題
如圖2所示
S1,S2同時想分別傳送 資料給R1,R2,節點之間距離都是100m ,carrier sense 距離120m,有效傳輸距離100m用小工具算出相對應參數


tcl模擬程式

執行 $ns test_exposed_terminal.tcl

記錄檔封包





更改 ctsrts

rd1

rd2

結果顯示 使用RTS/CTS不能有效解決暴露節點的問題










2008年4月21日 星期一

又是防火牆擋PORT (IIS & 防火牆)

晚上中毒後,下載小紅傘 ~最近很夯的德國免費強大防毒軟體
繼續我的網頁製作~問題來了 ~ 居然無法連結我的IIS

又來孤狗一下 ~

參考

防火牆擋住 80 port ... 應該是說 被關掉了..

解決:
開啟 網路連線->點擊區域連線->點擊內容->點擊進階->點擊設定值->點擊進階->點擊設定值->選擇標籤 服務
->打勾網頁伺服器(HTTP)

~END~

Format My Source Code for Blogging

Format My Source Code for Blogging

2008年4月18日 星期五

編碼問題

網頁流程:
[login.php]登入頁面-->[check.php] 登入 -> [tpolygondemo2.php] 首頁
_>[name.php]新增會員 ->[addmember.php] 新增會員至資料庫


網頁編碼皆選擇 utf-8 ,
name.php的表單資料(變數)傳遞給在背後的addmember.php,進行insert to DB動作
要在DB management 上看到繁體中文,需要在addmember.php裡面的資料庫連結部分加上


mysql_query("SET NAMES 'utf8'");
這是寫繁體中文進資料庫的方法


試著用mysql_query("SET NAMES 'big5'");
結果在DBM看到的是亂碼(非一堆問號,是中文字..)


以上都是網頁編碼選擇UTF-8 ,那反過來呢?
如果網頁編碼選擇 big5
連結資料庫時 加上mysql_query("SET NAMES 'big5'");


沒問題 ~ 正常顯示


試著用mysql_query("SET NAMES 'utf8'");
這裡忘記了.. 只依稀記的應該也是中文亂碼


目前寫進資料庫 ~ 沒問題了~


那讀出來呢? 問題大了 ~~~


0~7 是 陣列資料 利用下列方式

$fields_data = mysql_fetch_row($result)

再用 foreach($fields_data as $name => $value ) // 把每一筆直印出來

{echo "$name : $value
" ; }

圖中"問號"就是繁體部分.. 現在要解決的就是中文讀取問題囉~

參考 MySQL 中文編碼徹底研究 作者jaceju 寫的非常詳細,值得花時間去看

文中提到

當 MySQL 要寫入資料或讀出資料時,它無法確定這些資料的格式是不是符合使用者的要求。這時候我們就得自行指定正確的編碼,讓 MySQL 自動轉換這些資料。因此,在對 MySQL 4.1 以後的版本下達 INSERT, UPDATE 及 SELECT 指令之前,都應該要先用以下指令來指定正確的連線校對

SET NAMES 'utf8'

也就是說在 MySQL 4.1 以後,就算我們把預設字集設為 big5 或 utf8 ,事實上還是得看資料庫或資料表實際所設定的校對編碼 (除非建立時採用繼承值) 。所以 SET NAMES 只會影響 MySQL 伺服端和 PHP 程式之間的通訊編碼格式,跟預設字集沒有太大關係。

看樣子使用utf-8頁面編碼比起big5 會方便許多,之前寫的網頁都是用big5,趁還沒太多網頁,全部改為utf-8了

跟寫入時一樣, 讀取時 設定 SET NAMES 'utf8' 編碼目前都沒問題了