Lập trình mô phỏng bằng NS2

Một phần của tài liệu Đánh giá hiệu suất của giao thức định tuyến trong mạng cảm biến không dây (Trang 66)

a. Khởi tạo và kết thúc mô phỏng

- Một mô phỏng bắt đầu được khởi tạo bằng câu lệnh:

Set ns [new Simulator] #khai báo biến ns mới

- Để có các file đầu ra với dữ liệu mô phỏng (file bám vết) hay các file sử dụng cho hiển thị (file nam) thì chúng ta cần sử dụng câu lệnh:

# Mở file bám vết có tên là “out.tr” với con trỏ là “tracefile”

Set tracefile [Open out.tr w] $ns trace-all $tracefile1

# Mở file hiển thị Nam có tên là “out.nam” với con trỏ là “namfile”

Set namfile [Open out.nam w] $ns namtrace-all $namfile

- Các câu lệnh trace-all và namtrace-all có thể dẫn đến việc tạo ra các file có kích thước lớn với dữ liệu dư thừa. Trong nhiều trường hợp, các file dữ liệu đầu ra này chỉ cần lưu lại một tham số cụ thể

Ví dụ 1:

# Bám vết trong hàng đợi của liên kết giữa 2 nút n0 và n1

$ns trace-queue $n0 $n1 $ns namtrace-queue $n0 $n1

- Kết thúc chương trình được thực hiện bằng một thủ tục “finish” # Định nghĩa thủ tục “finish”

Proc finish {} {

Global ns tracefile namefile # Sử dụng biến ngoài thủ tục

$ns flush-trace # Các vết được lưu vào file tương ứng

Close $tracefile Close $namefile

Exe nam out.nam & Exit 0

}

- Ở cuối chương trình phải gọi ra thủ tục “finish” và chỉ ra thời điểm kết thúc mô phỏng

$ns at <time> “finish”

Ví dụ 2: $ns at 125.0 “finish” # “finish” được gọi vào thời điểm 125 giây - Để bắt đầu mô phỏng sử dụng câu lệnh

$ns run

b.Thiết lập to-po mạng

- Định nghĩa một nút mạng sử dụng câu lệnh:

Set n0 [$ns node] # tạo một nút được trỏ tới biến n0

- Tạo ra đường truyền liên kết giữa 2 nút mạng

$ns <phương thức truyền> <nút 1> <nút 2> <băng thông> <độ trễ> <loại hàng đợi>

Trong đó:

+ <Phương thức truyền> có thể lựa chọn là duplex-link hoặc simplex-link. Chọn Duplex-link khi đường truyền là 2 chiều đồng thời, chọn Simplex-link khi đường truyền chỉ có 1 chiều duy nhất.

+ <nút 1> <nút 2>: tham chiếu của 2 nút mạng tạo ra liên kết + <băng thông>: giá trị băng thông cụ thể, đơn vị tính là Mbps + <độ trễ>: giá trị trễ của đường truyền, đơn vị tính là ms

+ <loại hàng đợi>: có các tùy chọn là DropTail, RED, FQ, DRR, SFQ, CBQ.

Ví dụ 3: $ns duplex-link $n0 $n2 10Mb 10ms DropTail

- Để định nghĩa dung lượng của bộ đệm hàng đợi liên quan đến mỗi liên kết sử dụng 1 trong 2 lệnh sau:

# set Queue Size of link (nút 1- nút 2) to <kích thước hàng đợi> $ns queue-limit <nút 1> <nút 2> <kích thước hàng đợi>

Ví dụ 4: # set Queue Size of link (n0- n2) to 20

$ns queue-limit $n0 $n2 20

c. Tạo dòng lƣu lƣợng qua kết nối TCP

- Tạo ra thực thể gửi và nhận

Set tcpsrc [new Agent/TCP] #tạo ra thực thể gửi với con trỏ “tcpsrc”

Set tcpdst [new Agent/TCPSink] #tạo ra thực thể nhận với con trỏ “tcpdst”

- Gán thực thể với nút mạng

$ns attach-agent $n0 $tcpsrc # gán nút n0 là thực thể gửi

$ns attach-agent $n2 $tcpdst # gán nút n2 là thực thể nhận

- Tạo ra kết nối giữa thực thể gửi và thực thể nhận $ns connect $tcpsrc $tcpdst

- Tạo lưu lượng của ứng dụng FTP

Set ftp [new Application/FTP]

$ftp attach-agent $tcpsrc # gán luồng sinh lưu lượng ftp cho tcpsrc

$ns at <time> “$ftp start” # thiết lập thời gian bắt đầu sinh lưu lượng - Tạo lưu lượng của ứng dụng Telnet

Set telnet [new Application/Telnet]

$telnet attach-agent $tcpsrc # gán luồng sinh lưu lượng cho tcpsrc

d.Tạo dòng lƣu lƣợng qua kết nối UDP

- Tạo ra các thực thể gửi và nhận của UDP

Set udpsrc [new Agent/UDP] #tạo ra thực thể gửi với con trỏ “udpsrc”

Set udpdst [new Agent/NULL] #tạo ra thực thể nhận với con trỏ “tcpsrc”

- Gắn các thực thể UDP với nút mạng

$ns attach-agent $n0 $udpsrc # gán nút n0 là thực thể gửi

$ns attach-agent $n2 $udpdst # gán nút n2 là thực thể nhận

- Tạo ra đường đi giữa thực thể gửi và nhận UDP

$ns connect $udpsrc $udpdst

- Tạo ra lưu lượng CBR với tốc độ không đổi

Set cbr [new Application/Traffic/CBR]

$cbr attach-agent $udpsrc # gán luồng sinh lưu lượng cho tcpsrc

$cbr set packetSize_<kích thước gói tính theo đơn vị byte> $cbr set rate_<tốc độ tính theo đơn vị Mbps>

$sbr set random_<false/1>

e. Lập lịch sự kiện

- NS là một mô phỏng dựa trên sự kiện rời rạc, các sự kiện được lập lịch bằng cách sử dụng dạng lệnh sau:

$ns at <time> <sự kiện>

Ví dụ 5: $ns at 1.0 “$cbr start” $ns at 124 “$cbr stop”

Ví dụ 5 cho biết sự kiện FTP hoạt động trong thời gian từ giấy thứ 1 cho đến giây thứ 124 trong khoảng thời gian mô phỏng.

3.4.5. Mô hình năng lƣợng

Mô hình năng lượng được triển khai trong NS là một thuộc tính của nút. Mô hình năng lượng cho biết mức năng lượng có trong một nút mạng. Mô hình năng lượng trong một nút mạng có giá trị ban đầu là mức năng lượng của nút mạng đó khi bắt đầu mô phỏng. Giá trị này được định nghĩa là initialEnergy_. Ngoài ra khi thực hiện truyền và nhận dữ liệu, một phần năng lượng của nút mạng bị tiêu hao và chúng được định nghĩa là txPower_rxPower_ tương ứng. Các tập tin mô tả cho mô hình năng lượng được định nghĩa trong thư mục ns/energymodel [.cc và .h]. Các chức năng và phương thức mô tả khác về năng lượng được định nghĩa đầy đủ trong ns/wireless-phy.cc, ns/cmu-trace.cc và ns/tcl (lib [ns-lib.tcl, ns-node.tcl, ns-mobilenode.tcl].

Mô hình năng lượng được định nghĩa khi cấu hình nút mạng như sau:

$ns_ node-config -energyModel $energymodel \

-rxPower $p_rx \ -txPower $p_tx \

-initialEnergy $initialenergy

3.4.6. Mô hình truyền vô tuyến

Mô hình truyền vô tuyến được triển khai trong NS được sử dụng để cho biết công suất tín hiệu nhận được của mỗi gói tin. Ở lớp vật lý của một nút mạng không dây, có một ngưỡng nhận. Khi một gói tin được nhận, nếu công suất tín hiệu của nó nhỏ hơn ngưỡng nhận thì gói tin đó sẽ bị đánh dấu là lỗi và bị hủy bỏ tại tầng MAC.

Hiện nay, NS hỗ trợ 3 mô hình truyền vô tuyến, đó là mô hình Free Space, mô hình two-ray ground reflection và mô hình the shadowing. Các mô hình này được triển khai trong NS thông qua các file ~ns/propagation.{cc,h}, ~ns/tworayground.{cc,h} và ~ns/shadowing.{cc,h}.

Mô hình Free Space

Mô hình Free Space giả định điều kiện truyền là lý tưởng tức là chỉ có duy nhất một con đường thẳng (line - of - sight) giữa nút truyền và nút nhận. Công thức (7) tính công suất tín hiệu nhận được với khoảng cách d từ nút gửi là:

Trong đó: Pr, Pt: là công suất tín hiệu được nhận, truyền tương ứng

Gr, Gt: năng lực nhận, truyền của ăng tên λ : bước sóng

d: khoảng cách

L: sự tiêu hao của hệ thống (L >=1)

Thông thường trong các mô phỏng thì Gr, Gt và L được gán giá trị là 1.

Mô hình Free Space biểu diễn phạm vi giao tiếp là trong vòng tròn xung quanh nút gửi. Nếu nút nhận nằm trong vòng tròn này thì nó sẽ nhận được tất cả các gói. Ngược lại, nó sẽ mất tất cả các gói.

Câu lệnh khai báo mô hình truyền vô tuyến Free Space được thực hiện:

$ns_ node-config -propType Propagation/FreeSpace set prop [new Propagation/FreeSpace]

$ns_ node-config -propInstance $prop

Mô hình two-ray ground reflection

Với giải định như trong mô hình Free Space gần như rất hiếm xảy ra. Mô hình Two-ray ground reflection xem xét tất cả các con đường truyền trực tiếp và các con đường truyền có phản xạ từ một số vị trí. Mô hình này đem lại kết quả chính xác hơn mô hình Free Space dựa theo công thức (8) :

Trong đó: Ngoài các tham số giống với công thức (7) thì mô hình Two-ray Ground Reflection cần sử dụng thêm tham số ht và hr để biểu diễn cho chiều cao của các ăng tên truyền và nhận tương ứng.

Câu lệnh khai báo mô hình truyền vô tuyến Two-ray Ground Feflection được thực hiện:

$ns_ node-config -propType Propagation/TwoRayGround set prop [new Propagation/TwoRayGround]

$ns_ node-config -propInstance $prop

Mô hình The shadowing

Mô hình Free Space và Two-ray Ground Reflection cho biết công suất tín hiệu nhận được thông qua một hàm về khoảng cách. Cả 2 mô hình này đều biểu diễn phạm vi giao tiếp lý tưởng là một vòng tròn quanh nút phát. Trong thực tế, công suất tín hiệu nhận được tại một khoảng cách nhất định là một biến ngẫu nhiên do tác động của môi trường truyền đa đường, hay còn được gọi là hiệu ứng mờ dần. Mô hình The Shadowing cung cấp phương thức tính công suất tín hiệu một cách tổng quan và được sử dụng phổ biến hơn như bên dưới.

Mô hình The Shadowing bao gồm 2 phần. Phần đầu tiên được gọi là mô hình suy hao đường truyền (path loss) để dự đoán công suất tín hiệu trung bình tại khoảng cách d, được ký hiệu là Pr(d). Công thức tính Pr(d) như sau:

Trong đó: d0 là giá trị khoảng cách tham chiếu (lân cận trong)

β: số mũ suy hao đường truyền được xác định bằng thực nghiệm và được tra trong bảng 3.2 bên dưới. Giá trị β càng lớn tương ứng là có càng nhiều vật cản và do đó công suất tín hiệu nhận được trung bình càng giảm nhanh khi mà khoảng cách càng lớn.

Bảng 3.2: Một vài giá trị mũ suy hao đường truyền (β)

Môi trường β

Ngoài trời Không gian trống 2

Vùng thành thị 2.7 đến 5

Trong nhà Hướng nhìn 1.6 đến 1.8

Vật cản 4 đến 6

Phần thứ hai trong mô hình Shadowing phản ánh sự thay đổi công suất tín hiệu nhận được tại một khoảng cách nhất định. Đây là một biến ngẫu nhiên, được phân bố Gaussian và được đo bằng dB. Mô hình Shadowing tổng quát được tính bằng công thức (11):

Trong đó: XdB là biến ngẫu nhiên Gausian với độ lệch chuẩn là ϬdB

ϬdB được gọi là độ lệch shadowing và nó cũng có được bằng cách đo lường thực tế. Bảng 3.3 bên dưới cho biết một vài giá trị tiêu biểu của ϬdB.

Bảng 3.3: Một vài giá trị tiêu biểu của độ lệch Shadowing (ϬdB)

Môi trƣờng ϬdB (dB)

Trong nhà 4 đến 12

Trong văn phòng có vách cứng 7

Trong văn phòng có vách mềm 9.6

Trong xưởng sản xuất, có hướng nhìn 3 đến 6 Trong xưởng sản xuất, có nhiều vật cản 6.8

Mô hình Shadowing mở rộng và biểu diễn đa dạng phạm vi truyền hơn so với 2 mô hình trước. Ở đây, các nút chỉ có khả năng truyền khi nó gần biên của phạm vi truyền thông.

Trước sử dụng mô hình này, người mô phỏng phải lựa chọn trước giá trị mũ suy hao đường truyền (β), độ lệch Shadowing (ϬdB) và khoảng cách tham chiếu theo môi trường mô phỏng. Câu lệnh khai báo mô hình truyền vô tuyến Shadowing được thực hiện:

Propagation/Shadowing set pathlossExp_ 2.0 ; # khai báo β nhận giá trị 2

Propagation/Shadowing set std_db_ 4.0 ; # khai báo ϬdB nhận giá trị 4 (dB)

Propagation/Shadowing set dist0_ 1.0 ; # Khoảng cách tham chiếu d0=1 (m)

Propagation/Shadowing set seed_ 0 ; # tạo số ngẫu nhiêu

3.4.7. Công cụ hiển thị NAM

NAM (Network Animator) là công cụ hiển thị đồ họa dựa trên tcl/TK để xem các vết mô phỏng mạng và vết số liệu về gói tin của mạng thực.

Để sử dụng được NAM, trước hết phải tạo ra tệp vết cho NAM (là .nam file), bằng cách viết câu lệnh trong script để NS thực hiện.Tệp vết cho NAM chứa thông tin về to-po mạng cũng như các vết của gói tin.

Khi cho NAM chạy, nó sẽ đọc tệp vết, tạo ra to-po mạng, sắp xếp các nút và đường truyền và tạm dừng tại thời điểm 0 để chờ người sử dụng điều khiển.

NAM có giao diện để người sử dụng có thể điều khiển nhiều khía cạnh của hoạt hình. Giao diện này dễ sử dụng, khá giống với giao diện của “Window Media Player” nên rất quen thuộc với nhiều người.

Hình 3.4: Giao diện đồ họa của NAM

3.4.8. Các công cụ hỗ trợ phân tích và hiển thị kết quả mô phỏng

Với tệp vết ghi lại các sự kiện trong mạng có cấu trúc được định nghĩa rõ ràng, người phân tích có thể xử lý và kết xuất thông tin bằng mọi công cụ có thể, thí dụ các ngôn ngữ lập trình hoặc các phần mềm chuyên dụng. Dưới đây là một số phần mềm và ngôn ngữ thường được sử dụng:

Grep( Global Regular Expression Parser)

Grep một lệnh trong Unix|Linux. Grep là một bộ lọc, nó tìm và hiển thị (hoặc kết xuất kiểu pipling) các dòng trong input có chứa mẫu ký tự (pattern) mà người sử dụng chỉ ra.

Awk

Awk là một ngôn ngữ lập trình được sáng tạo bởi 3 người là Alfred Aho, Peter Weinberger, và Brian Kernighan. Chương trình gawk được tích hợp trong Linux là ứng dụng GNU của ngôn ngữ lập trình Awk. Awk được thiết kế để xử lý thông tin chứa trong file hoặc thông tin do chương trình khác đưa ra truyền cho nó theo kiểu đường ống (pipe). Sức mạnh của Awk được thể hiện ở:

- Hiển thị một phần hay toàn bộ file, có thể trích chọn để hiển thị dòng, cột hoặc trường theo các tiêu chuẩn được chỉ rõ.

- Có thể phân tích văn bản để tính tần xuất các word,..

- Chuẩn bị các báo cáo đưa ra có định dạng, dựa trên các thông tin của file - Lọc văn bản theo một cách thức rất mạnh.

- Thực hiện tính toán trên các thông tin số trong file.  Perl (Practical Extraction and Report Language)

Perl là một ngôn ngữ lập trình và là chương trình ứng dụng tự do, được phát triển bởi Larry Wall. Perl đi kèm với các phiên bản của Linux và chính perl cũng được hoàn thiện qua nhiều phiên bản.

Perl là một chương trình ứng dụng rất mạnh, kết hợp các đặc điểm của awk, grep, sed và C. Chương trình viết cho perl thực hiện cũng tương tự như shell script và cũng được gọi là script. Phần mềm soạn thảo GNU Emacs có “perl mode” để soạn thảo perl script.

Gnuplot

Gnuplot có thể chạy trên cả Windows và trên Unix|Linux. Gnuplot có thể nhận input là file văn bản có nhiều cột, khi đó cần chỉ ra 2 cột để lấy số liệu vẽ đồ thị. Gnuplot còn có thể nhận input từ nhiều file và vẽ trên một đồ thị, điều này rất thuận lợi cho việc so sánh các kết quả cần nghiên cứu.

Xgraph

Xgraph là phần mềm ứng dụng để vẽ đồ thị, luôn luôn đi kèm với NS. Input của nó là một hoặc một số file dạng văn bản, trên mỗi dòng là cập số liệu có dạng “x y” cho một điểm trên đồ thị.

Trace graph

Tác giả của Trace graph là Jaroslaw Malek. Đây là một phần mềm mã nguồn mở tự do, có khả năng phân tích và hiển thị kết quả mô phỏng khá tốt (input là tệp vết).

CHƢƠNG 4. KẾT QUẢ THỰC NGHIỆM ĐÁNH GIÁ HIỆU SUẤT GIAO THỨC ĐỊNH TUYẾN CỦA MẠNG WSN

4.1. Phát biểu bài toán

Mục tiêu chính trong các mạng không dây thường là cung cấp được chất lượng dịch vụ và hiệu quả băng thông lớn khi các nút mạng di chuyển. Ngược lại, trong mạng WSN, việc bảo tồn năng lượng được coi là quan trọng hơn so với hiệu suất của mạng. Do đó, các giao thức định tuyến được thiết kế cho các mạng truyền thống hiện nay không áp dụng được cho các mạng WSN.

Trong mạng WSN, nguồn năng lượng đa phần được lấy từ pin nên rất hạn chế. Do đó năng lượng cần phải được sử dụng một cách có hiệu quả. Chính vì vậy, một trong những mục tiêu quan trọng nhất của các giao thức định tuyến cho mạng WSN là phải lựa chọn con đường đi tốt nhất sao cho giảm thiểu được tổng năng lượng cần thiết để định tuyến các gói tin trên mạng và tối đa hóa thời gian sống của tất cả các nút. Mặt khác, các giao thức định tuyến này còn phải có khả năng tập trung và tổng hợp dữ liệu hiệu quả, phân phối tiêu hao năng lượng đồng đều để tránh hiện tượng thắt nút cổ chai ở một hay một số vị trí cụ thể.

Các giao thức định tuyến phân bậc đã được chứng minh là tiết kiệm năng lượng đáng kể và có hiệu suất tốt hơn khi so sánh với các giao thức trong kiến trúc phẳng với

Một phần của tài liệu Đánh giá hiệu suất của giao thức định tuyến trong mạng cảm biến không dây (Trang 66)