<?xml version="1.0" encoding="Big5"?>
<?xml-stylesheet type="text/css" href="document.css"?>
<document xmlns:HTML="http://www.w3.org/1999/xhtml">
	<title>
	分析 NS2 產生的 trace file
	</title>
	<content>
	<subject>→ trace file 的檔案格式</subject>
	假如我們的 tcp script 有做 trace-all 的動作, 那當我們執行完 ns2 之後, 就會產生一個紀錄的檔案,
	而這個檔案主要就是紀錄一些 packet 在我們模擬中的傳輸情況. 我們可以試著去打開這個檔案來研究看看,
	如下 :
	<HTML:BR/>
	<HTML:IMG src="graph/ns_analysis_1.PNG"/>
	<HTML:BR/>
	檔案中，每行的每個欄位所代表的意義分別如下：
		<HTML:UL>
		<item>1 代表事件的類別</item>
			<HTML:UL>
				<HTML:LI>r：代表目的端收到 packet</HTML:LI>
				<HTML:LI>+：代表 packet 放入 queue 中</HTML:LI>
				<HTML:LI>-：代表 packet 從 queue 中取出</HTML:LI>
				<HTML:LI>d：代表 queue 已經滿了，這個 packet 被 drop 掉</HTML:LI>
			</HTML:UL>
		<item>2 代表事件發生的時間</item>
		<item>3	代表 packet 的 source node</item>
		<item>4	代表 packet 的 destination node</item>
		<item>5	代表 packet 的類別</item>
		<item>6 代表 packet 的大小 (encoded in IP header)</item>
		<item>7	代表 packet 的 flags</item>
		<item>8	代表 connection(flow) 的 id</item>
		<item>9	代表 source address ( node.port )</item>
		<item>10 代表 destinations address ( node.port )</item>
		<item>11 代表 packet 的 sequence number ( network layer protocol's )</item>
		<item>12 代表 packet 的 id ( unique )</item>
		</HTML:UL>	
	我們就可以藉由分析這個檔案，產生一些數據來做研究。
	</content>
	<content>
	<subject>→ 以 awk 和 XGraph 來分析 NS2 產生的 trace file</subject>
	通常我們在 ns2 中，假如有利用 trace-all 所產生的檔案，那檔案的內容大概會如下：
		<HTML:OL>
			<item>r 1.995918 0 2 cbr 210 ------- 0 0.0 3.1 265 623</item>
			<item>+ 1.995918 2 3 cbr 210 ------- 0 0.0 3.1 265 623</item>
			<item>d 1.995918 2 3 cbr 210 ------- 0 0.0 3.1 265 623</item>
			<item>r 1.996120 3 2 cbr 210 ------- 1 3.0 1.0 236 616</item>
			<item>+ 1.996120 2 1 cbr 210 ------- 1 3.0 1.0 236 616</item>
			<item>- 1.996120 2 1 cbr 210 ------- 1 3.0 1.0 236 616</item>
		</HTML:OL>	
	這些紀錄著 packet 傳送的過程, 不過有時候這樣的輸出檔, 我們很難觀察一些 packet傳送的情況. 這時, 
	我們通常會利用一些工具 (例如 perl , awk , python...等), 來整理一些我們所需要的資料, 
	下面就是一個簡單的範例, 它是由 awk script 來撰寫的, 主要的就是統計出, 在一個特定的時間間隔內,
	被 drop掉的 packet 個數.	
	<HTML:BR/>
	<HTML:BR/>
	程式碼部分 : test.awk
	<HTML:HR width="70%" align="left"/>
		<HTML:OL>
			<item><HTML:FONT color="green">#!/usr/bin/awk -f</HTML:FONT></item>
			<HTML:BR/>
			<item><HTML:B>BEGIN{</HTML:B></item>
			<HTML:OL>
				<item><HTML:FONT color="green"># 設定分隔符號</HTML:FONT></item>
				<item><HTML:B>FS=" ";</HTML:B></item>
				<item><HTML:FONT color="green"># 設定統計資料的時間價格</HTML:FONT></item>
				<item><HTML:B>unit = 0.01;</HTML:B></item>
				<item><HTML:FONT color="green"># 被 drop 掉的 packet 個數</HTML:FONT></item>
				<item><HTML:B>count = 0;</HTML:B></item>
				<item><HTML:FONT color="green"># 紀錄時間用</HTML:FONT></item>
				<item><HTML:B>time = 0;</HTML:B></item>	
			</HTML:OL>	
			<item><HTML:B>}</HTML:B></item>
			<HTML:BR/>
			<item><HTML:FONT color="green">
			# 以 d 開頭的那一行, 也就是紀錄 dorp 掉 packet 的紀錄
			</HTML:FONT></item>
			<item><HTML:B>/^d */{</HTML:B></item>
			<HTML:OL>
				<item><HTML:FONT color="green"># 取得時間</HTML:FONT></item>
				<item><HTML:B>a = int($2 / unit);</HTML:B></item>
				<item><HTML:FONT color="green"># 判斷是否在正確的時間間隔內</HTML:FONT></item>
				<item><HTML:B>if( int(a) == int(time) )</HTML:B></item>
				<item><HTML:B>{</HTML:B></item>
				<HTML:OL>
					<item><HTML:FONT color="green"># packet 個數加一</HTML:FONT></item>
					<item><HTML:B>count = count + 1;</HTML:B></item>
				</HTML:OL>
				<item><HTML:B>}</HTML:B></item>	
				<item><HTML:B>else</HTML:B></item>
				<item><HTML:B>{</HTML:B></item>
				<HTML:OL>
					<item><HTML:FONT color="green"># 輸出</HTML:FONT></item>
					<item><HTML:B>printf "%f %d\n",time*unit,count;</HTML:B></item>
					<item><HTML:FONT color="green"># 更新時間點</HTML:FONT></item>
					<item><HTML:B>time = int(a);</HTML:B></item>
					<item><HTML:FONT color="green"># 歸零</HTML:FONT></item>
					<item><HTML:B>count = 0;</HTML:B></item>
				</HTML:OL>	
				<item><HTML:B>}</HTML:B></item>
			</HTML:OL>	
			<item><HTML:B>}</HTML:B></item>
			<item><HTML:B>END{</HTML:B></item>
			<HTML:OL>
				<item><HTML:B>printf "%f %d\n",time*unit,count;</HTML:B></item>
			</HTML:OL>	
			<item><HTML:B>}</HTML:B></item>
		</HTML:OL>
	<HTML:HR width="70%" align="left"/>	
		<HTML:OL>
			<HTML:TABLE width="86%" border="1" height="69" cellpadding="0" style="border-collapse: collapse" bordercolor="#000000">
				<HTML:TR>
					<HTML:TD width="100%" bgcolor="#C0C0C0" height="13">
					<HTML:FONT size="2">putty</HTML:FONT>
					</HTML:TD>
				</HTML:TR>
				<HTML:TR>
					<HTML:TD width="100%" height="52" bgcolor="#000000">
					<HTML:FONT color="#FFFFFF" size="2">	
					<item>verit@lale[~/ns2/awk] ./test.awk  ../ex2/out.tr > file</item>
					<item>verit@lale[~/ns2/awk]xgraph file</item>
					</HTML:FONT>
					</HTML:TD>
				</HTML:TR>
			</HTML:TABLE>	
		</HTML:OL>
	接下來用 test.awk 來分析 NS2 所產生的 trace file, 並把分析的結果導向一個檔案, 用 XGraph 
	來分析你所導向的檔案 (如上圖) , 就會得到下圖 : 
	<HTML:BR/>
	<HTML:IMG src="graph/ns_analysis_2.PNG"/>
	</content>
</document>

