huong dan trace

8
1. Đọc code và xây dựng topology mạng cùng các tham số cấu hình 2. Tính toán khoảng cách truyền dữ liệu giữa trạm gốc và MS 3. Chạy mô phỏng đối với định tuyến aodv và dsdv đối với topology trên 4. Lưu lại các file kết quả mô phỏng để phân tích 5. Tính băng thông : Sử dụng đoạn code trong chương trình và lưu kết quả ra các file bandwidthBS*.tr 6. Năng lượng : Sử dụng các câu lệnh grep “energy” wired-cum-wireless.tr > ENERGY.tr để lọc ra các dữ liệu liên quan đến năng lượng của tất cả các node và lưu vào file ENERGY.tr Sau khi có file ENERGY.tr ta lần lượt lấy ra các dữ liệu về năng lượng của từng node và lưu lại các file có dạng node*.tr. Câu lệnh sử dụng grep “_*_” ENERGY.tr > node*.tr Ví dụ lấy các thông tin về năng lượng node3 ta viết Grep “_3_” ENERY.tr > node3.tr Sau khi có các file node*.tr * có giá trị từ 3 đến 14, ta tiếp tục lọc để lấy ra chỉ 2 thông số là thời gian và năng lượng còn lại của từng node để thực hiện việc hiển thị. Để làm được việc đó, ta viết một đoạn code sau và lưu lại dưới file Column.awk : BEGIN { FS = " "} { nl++ } { print $2 " " $14} END {} Sau đó chạy câu lệnh sau để thực hiện lọc dữ liệu : $ awk –f Column.awk node3.tr > node3energy Câu lệnh này sẽ chỉ lấy các thông tin ở cột 2 và cột 14 đọc từ file node3.tr và ghi lại vào file node3energy. Sau khi thực hiện đối với tất cả các node thì sẽ thu được node3energy đến node14energy cho việc hiển thị 7. Tính routing overhead : Đối với định tuyến AODV, ta viết đoạn code awk sau và lưu dưới file AODV-CBR.awk

Upload: linh-barbie

Post on 11-Nov-2014

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Huong Dan Trace

1. Đọc code và xây dựng topology mạng cùng các tham số cấu hình

2. Tính toán khoảng cách truyền dữ liệu giữa trạm gốc và MS

3. Chạy mô phỏng đối với định tuyến aodv và dsdv đối với topology trên

4. Lưu lại các file kết quả mô phỏng để phân tích

5. Tính băng thông :

Sử dụng đoạn code trong chương trình và lưu kết quả ra các file bandwidthBS*.tr

6. Năng lượng :

Sử dụng các câu lệnh grep “energy” wired-cum-wireless.tr > ENERGY.tr để lọc ra các

dữ liệu liên quan đến năng lượng của tất cả các node và lưu vào file ENERGY.tr

Sau khi có file ENERGY.tr ta lần lượt lấy ra các dữ liệu về năng lượng của từng node

và lưu lại các file có dạng node*.tr.

Câu lệnh sử dụng grep “_*_” ENERGY.tr > node*.tr

Ví dụ lấy các thông tin về năng lượng node3 ta viết

Grep “_3_” ENERY.tr > node3.tr

Sau khi có các file node*.tr * có giá trị từ 3 đến 14, ta tiếp tục lọc để lấy ra chỉ 2 thông

số là thời gian và năng lượng còn lại của từng node để thực hiện việc hiển thị. Để làm

được việc đó, ta viết một đoạn code sau và lưu lại dưới file Column.awk :

BEGIN { FS = " "} { nl++ } { print $2 " " $14} END {}

Sau đó chạy câu lệnh sau để thực hiện lọc dữ liệu :

$ awk –f Column.awk node3.tr > node3energy

Câu lệnh này sẽ chỉ lấy các thông tin ở cột 2 và cột 14 đọc từ file node3.tr và ghi lại

vào file node3energy. Sau khi thực hiện đối với tất cả các node thì sẽ thu được

node3energy đến node14energy cho việc hiển thị

7. Tính routing overhead :

Đối với định tuyến AODV, ta viết đoạn code awk sau và lưu dưới file AODV-

CBR.awk

BEGIN {aodvpktno = 0; aodvbyte = 0; cbrpktno = 0; cbrbyte = 0;cbrlostMAC =

0;totalDrop = 0;totalSND = 0}

$1~/s/ && /AODV/ && /MAC/ { aodvpktno ++ ; aodvbyte+=$8 ;}

$1~/s/ && /cbr/ && /MAC/ { cbrpktno ++ ; cbrbyte+=$8; }

$1~/D/ && /cbr/ && /MAC/ { cbrlostMAC ++ }

$1~/D/ { totalDrop ++ }

$1~/s/ { totalSND ++ }

END { print ( aodvpktno, aodvbyte , cbrpktno, cbrbyte, cbrlostMAC, totalDrop,

totalSND) }

Ta chạy lệnh $ awk –f AODV-CBR.awk wired-cum-wireless.tr >

routingOVERHEAD sẽ thu được file routingOVERHEAD lưu lại các thông số lấy từ

file wired-cum-wireless.tr về số lượng gói tin định tuyến AODV, số bytes AODV, số

gói tin dữ liệu cbr , số bytes dữ liệu cbr đã được gửi đi ở lớp MAC để tính toán.

Page 2: Huong Dan Trace

Còn đối với định tuyến DSDV, câu lệnh để tìm số gói định tuyến ở trên ko dùng được,

nếu dùng sẽ gây sai mà ta tìm trực tiếp ở trong file wired-cum-wireless.tr, các bản tin

định tuyến là message đi kèm với số thứ tự của nó. Ta tìm được số các gói tin định

tuyến này ở cuối cùng của file. Phần còn lại về tìm các gói tin cbr vẫn được giữ

nguyên.

8. Tính packet delivery ratio:

Viết đoạn code sau và lưu dưới file SEND-RCVagent.awk:

BEGIN {counter1 = 0; counter2 = 0;}

$1~/s/ && /AGT/ { counter1 ++ }

$1~/r/ && /AGT/ { counter2 ++ }

END { print ( counter1, counter2) }

Các lệnh này thực hiện đếm tổng số gói tin đã truyền đi và nhận được ở cấp độ

AGENT ( không phải ở cấp độ MAC )

Thực hiện lệnh sau :

$ awk –f SEND-RCVagent.awk wired-cum-wireless.tr > totalSEND-RCV

Để ghi dữ liệu vào file totalSEND-RCV

9. Tính average hopcount thì dựa vào 2 thông số tìm được trong tính toán tìm packet

delivery ratio và tìm routing overhead là số packet truyền ở lớp MAC và truyền ở

AGENT. Tỉ số số gói tin phát ở lớp MAC chia cho số gói tin phát ở AGENT cho ta

kết quả

10. Tìm throughput

Throughput chỉ tính lưu lượng gói tin có ích trong đơn vị thời gian xác định nên ta viết

câu lệnh sau và lưu dưới file throughput.awk

BEGIN {counter0 = 0; counter1 = 0; counter2 = 0;}

$1~/r/ && /_0_/ && /AGT/ { counter0 += $8 }

$1~/r/ && /_1_/ && /AGT/ { counter1 += $8 }

$1~/r/ && /_2_/ && /AGT/ { counter2 += $8 }

END { print ( counter0*8/170, counter1*8/170, counter2*8/170,

(counter0+counter1+counter2)*8/170 ) >> "wu.dat"}

Thông tin sẽ được lưu lại trong file wu.dat

Chạy lệnh $ awk –f throughput.awk wired-cum-wireless.tr

11. Tính delay:

Trước hết ta phải lọc được ra các thông tin liên quan đến việc phát và nhận từ một

node này đến một node khác. Viết câu lệnh sau và lưu lại file delay.awk:

Page 3: Huong Dan Trace

$2>1 && $2 < 180 && (/_0_/ || /_3_/) && /AGT/ { print $1, $2, $6 >

"node3DL.tr" }

$2>1 && $2 < 180 && (/_0_/ || /_4_/) && /AGT/ { print $1, $2, $6 >

"node4DL.tr" }

$2>1 && $2 < 180 && (/_0_/ || /_5_/) && /AGT/ { print $1, $2, $6 >

"node5DL.tr" }

$2>1 && $2 < 180 && (/_0_/ || /_6_/) && /AGT/ { print $1, $2, $6 >

"node6DL.tr" }

$2>1 && $2 < 180 && (/_1_/ || /_7_/) && /AGT/ { print $1, $2, $6 >

"node7DL.tr" }

$2>1 && $2 < 180 && (/_1_/ || /_8_/) && /AGT/ { print $1, $2, $6 >

"node8DL.tr" }

$2>1 && $2 < 180 && (/_1_/ || /_9_/) && /AGT/ { print $1, $2, $6 >

"node9DL.tr" }

$2>1 && $2 < 180 && (/_1_/ || /_10_/) && /AGT/ { print $1, $2, $6 >

"node10DL.tr" }

$2>1 && $2 < 180 && (/_2_/ || /_11_/) && /AGT/ { print $1, $2, $6 >

"node11DL.tr" }

$2>1 && $2 < 180 && (/_2_/ || /_12_/) && /AGT/ { print $1, $2, $6 >

"node12DL.tr" }

$2>1 && $2 < 180 && (/_2_/ || /_13_/) && /AGT/ { print $1, $2, $6 >

"node13DL.tr" }

$2>1 && $2 < 180 && (/_2_/ || /_14_/) && /AGT/ { print $1, $2, $6 >

"node14DL.tr" }

Ta chạy lệnh $ awk –f delay.awk wired-cum-wireless.tr

Ta sẽ thu được các file node*DL.tr , * nhận các giá trị tử 3 đến 14, mỗi file có 3 thông

tin là gửi hay nhận ( s hay r ) , thời gian s hay r , số thứ tự của gói tin để xác định cùng

một gói tin.

Viết một đoạn code C sau và lưu lại dưới file delay.c :

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

FILE *fin, *fout, *fout2;

int pkt_index[5000];

double pkt_send_time[5000];

int head;

//int tail;

/* make sure it is large enough to hold all temprary data! */

int i,j,num;

Page 4: Huong Dan Trace

double tm, tm_delay, total_delay, avg_delay, var_delay;

int idx;

char type;

int flag;

int num_sent;

head = 0;

for ( i=0; i<5000; i++)

{

pkt_index[i] = -1;

pkt_send_time[i] = 0.0f;

}

fin = fopen(argv[1], "r");

fout = fopen (argv[2], "w");

fout2 = fopen ( argv[3],"a");

if(fin==NULL) {

printf("Error: can't open file.\n");

return 1;

}

else {

printf("File opened successfully.\n");

i = 0 ;

num = 0;

num_sent = 0;

while(!feof(fin))

{

/* loop through and store the numbers into the array */

fscanf(fin, "%c %lf %d \n", &type,&tm, &idx);

//printf( "%f\n", tm);

if ( type == 's' )

{

//addentry(idx, tm);

pkt_index[head] = idx;

pkt_send_time[head] = tm;

head++;

if ( head == 1000 ) head = 0;

num_sent++;

Page 5: Huong Dan Trace

}

else if ( type == 'r' )

{

flag = 0;

for ( j=0; j< 1000; j++)

{

if ( pkt_index[j] == idx )

{

//printf("match,%f, %f\n!" ,tm, pkt_send_time[j]);

tm_delay = tm - pkt_send_time[j];

flag = 1;

break;

}

}

//addentry to output

if ( flag == 1)

{

fprintf( fout,"%d %lf \n", idx, tm_delay );

total_delay += tm_delay;

num++;

}

}

i++;

}

avg_delay = total_delay / num ;

fprintf(fout2,"Number of entries read: %d\n", i);

fprintf(fout2,"Number of entries sent: %d\n", num_sent);

fprintf(fout2,"Number of entries received: %d\n", num);

fprintf(fout2,"average delay of entries : %lf\n", avg_delay);

fclose(fin);

fclose(fout);

//finally, calcualte variance

fout = fopen ( argv[2], "r") ;

if ( fout == NULL ) return -1;

var_delay = 0;

while (!feof(fout))

Page 6: Huong Dan Trace

{

fscanf(fout, "%d %lf\n", &idx ,&tm);

var_delay += ( tm - avg_delay ) * (tm - avg_delay);

}

var_delay /= num;

fprintf(fout2, "variance of delay is : %lf\n", var_delay);

fclose (fout);

fclose (fout2);

return 0;

}

}

Dịch file delay.c này thành file delaycal.exe bằng lệnh $ gcc delay.c -o delaycal

Sau đó sẽ dùng file delaycal.exe này để tính các thời gian trễ trung bình, độ lệch và

tính toán độ trễ của từng packet được gửi đi để phục vụ cho vẽ đồ thị

Chạy câu lệnh $ ./delaycal node3DL.tr DL31.dat DL32.dat để ghi thông tin về trễ của

từng gói vào file DL31.dat và ghi độ trễ trung bình và độ lệch vào file DL32.dat

Thực hiện hiển thị cho tất cả các bước trên dùng câu lệnh graph.