Trong mục này sẽ trình bày cách để sử dụng mô hình mô phỏng mạng không dậy di động trong NS. Mục này gồm hai phần, trong phần đầu tiên sẽ thảo luận xem làm thế nào để tạo ra và mô phỏng mạng không dây đơn giản với hai nút mạng, trong phần thứ sẽ mở rộng ví dụng trong phần một để tạo ra một sự mô phỏng mạng không dây phức tạp hơn.
Tạo một kịch bản mô phỏng mạng không dây đơn giản
Phần này mô phỏng một kịch bản mạng không dây rất đơn giản gồm hai nút mạng. Topo mạng bao gồm hai nút di động node_(0) và node_(1). Các nút di động này di chuyển trong một phạm vi đã được xác định là 500m x 500m. Ban đầu các nút bắt đầu tại hai vị trí đối diện nhau ở ngoài cùng của đường biên. tiếp đó chúng di chuyển hướng về nhau trong nửa đầu tiên của mô phỏng và rồi lại tiếp tục di chuyển ra xa trong phần thứ hai của sự mô phỏng. Một kết nối TCP được thiết lập giữa hai nút di động. các gói tin được trao đổi giữa các nút khi chúng đến trong phạm vi cảm nhận cua một nút khác. Khi chúng di chuyển ra xa các gói tin sẽ bát đầu bị loại bỏ.
Giống như bất kì sự mô phỏng nào khác của NS trước tiên sẽ bắt đầu bằng việc tạo ra một kịch bản TCL cho sự mô phỏng mang không dây. File này được gọi là simple-wereless.tcl.
Một nút di động bao gồm các thành phần của mạng như: Link Layer( LL tầng kết nối) Interface Queue (giao diện hàng đợi IFQ) ,MAC layer (lớp MAC) các kênh không dây truyền và nhận tín hiệu… Khi bắt đầu mô phỏng mạng không dây cần định nghĩa kiểu cho mỗi thành phần của mạng. ngoài ra còn định nghĩa các thông số khác như kiểu antenna, mô hình truyền sóng radio, kiểu giao thức định tuyến của mạng AD- HOC được sử dụng bởi các nút di động.. Xem các chú thích trong đoạn mã đối với những mô tả ngắn gọn của mỗi biến được định nghĩa.
Mảng được sử dụng để định nghĩa những biến này như val() không phải là một biến toàn cục khi nó được sử dụng trong các kịch bản được mô tả trước đây.
Kịch bản simple- wireless. tcl bắt đầu với một danh sách của những thông số khác nhau được mô tả dưới đây như sau:
# ========================================================= ============= # Define options # ========================================================= =============
set val(chan) Channel/WirelessChannel ;# channel type
set val(prop) Propagation/TwoRayGround ;# radio-propagation model set val(ant) Antenna/OmniAntenna ;# Antenna type
set val(ll) LL ;# Link layer type
set val(ifq) Queue/DropTail/PriQueue ;# Interface queue type set val(ifqlen) 50 ;# max packet in ifq set val(netif) Phy/WirelessPhy ;# network interface type set val(mac) Mac/802_11 ;# MAC type
set val(rp) DSDV ;# ad-hoc routing protocol set val(nn) 2 ;# number of mobilenodes
Tiếp theo đi vào phần chính của chương trình và bắt đầu tạo ra một trường hợp của sự mô phỏng. : set ns_ [new Simulator]
rồi cài đặt sự hỗ trợ trace bởi việc mở file simple.tr và gọi thủ tục trace-all {} như sau:
set tracefd [open simple.tr w] $ns_ trace-all $tracefd
Tiếp đến tạo một đối tượng topology tuân theo đường đi của (sự di chuyển) các nút di động trong đường biên của topo mạng :
set topo [new Topography]
Như đã đề cập đến trước đây các nút di động chỉ di chuyển trong phạm vi một topo 500m x 500m. Cần cung cấp cho đối tượng topography với biên của toạ độ x,y (x=500, y=500):
Topography được chia thành từng ô và giá trị mặc định của độ phân giải ô là 1. Một giá trị khác có thể được sử dụng như một thông số thứ 3 với hàm load- flatgrid{}. Kế đến tạo đối tượng god như sau:
create-god $val(nn)
Tiếp theo cần tạo ra các nút di động:
Các nút API được tạo ra đã được sửa lại còn ở đây các API mới được sử dụng để tạo ra các nút di động. Trước tiên cần cấu hình các nút trước khi tạo ra chúng. Cấu hinh nút API có thể bao gồm định nghĩa kiểu địa chỉ (flat,hierachical v.v.) kiểu giao thức định tuyến của ad-hoc link layer ,Mac layer , IfQ v.v..Cấu hình API có thể được định nghĩa như sau :
(parameter examples)
# $ns_ node-config -addressingType flat or hierarchical or expanded # -adhocRouting DSDV or DSR or TORA # -llType LL # -macType Mac/802_11 # -propType "Propagation/TwoRayGround" # -ifqType "Queue/DropTail/PriQueue" # -ifqLen 50 # -phyType "Phy/WirelessPhy" # -antType "Antenna/OmniAntenna" # -channelType "Channel/WirelessChannel" # -topoInstance $topo # -energyModel "EnergyModel" # -initialEnergy (in Joules)
# -rxPower (in W) # -txPower (in W) # -agentTrace ON or OFF # -routerTrace ON or OFF # -macTrace ON or OFF # -movementTrace ON or OFF
Tất cả các giá trị mặc định cho các tuỳ chọn này là NULL ngoại trừ addressingtype :flat
Ở đây sử dụng giá trị mặc định của flat addressing.Ngoài ra hãy chỉ bật duy nhất AgentTrace và RouterTrace. Có thể thử với tất cả các trace bằng cách bật tất cả chúng lên. Tất cả các AgentTrace được đánh dấu với AGT,RouterTrace với RTR , MacTrace với MAC trong trường thứ 5 của chúng. MovementTrace khi được bật lên cho thấy các hoạt động của nút di động và trace được đánh dấu với M trong trường thứ hai của chúng. Sự cấu hình API cho các nút di động như sau :
# Configure nodes
$ns_ node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -topoInstance $topo \ -channelType $val(chan) \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace OFF
Tiếp theo tạo ra hai nút di động như sau :
for {set i 0} {$i < $val(nn) } {incr i} { set node_($i) [$ns_ node ]
$node_($i) random-motion 0 ;# disable random motion }
Ở đây sự di động ngẫu nhiên của các nút đã được vô hiệu hoá vì chúng cần cung cấp vị trí nút và hoạt động (tốc độ và hướng ) trong các chỉ thị tiếp theo.Bây giờ các nút di động đã được tạo ra, cần cung cấp cho chúng một vị trí để bắt đầu
# Provide initial (X,Y, for now Z=0) co-ordinates for node_(0) and node_(1)
$node_(0) set X_ 5.0 $node_(0) set Y_ 2.0 $node_(0) set Z_ 0.0 $node_(1) set X_ 390.0 $node_(1) set Y_ 385.0 $node_(1) set Z_ 0.0
.Node0 có một vị trí bắt đầu (5,2) trong khi node1 bắt đầu bằng vị trí (390,385) Kế đến đưa ra một số hoạt động của nút
# Node_(1) starts to move towards node_(0) $ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0" $ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0" # Node_(1) then starts to move away from node_(0) $ns_ at 100.0 "$node_(1) setdest 390.0 380.0 15.0"
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0" có nghĩa là tại thời điểm 50.0s node1 bắt đầu di chuyển hướng tới toạ độ (x=25,y=20) với tốc độ 15m/s.API này được sử dụng hướng và tốc độ hoạt động của các nút di động Tiếp theo thiết lập luồng lưu lượng giữa hai nút như sau :
# TCP connections between node_(0) and node_(1) set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink] $ns_ attach-agent $node_(0) $tcp $ns_ attach-agent $node_(1) $sink $ns_ connect $tcp $sink
set ftp [new Application/FTP] $ftp attach-agent $tcp
$ns_ at 10.0 "$ftp start"
Thiết lập một kết nối TCP giữa hai nút với một TCP nguồn trên node0. Cần định nghĩa thời gian cho mô phỏng kết thúc và thong tin cho các nút di động để xác lập lại các thành phần mạng nội bộ của chúng
# Tell nodes when the simulation ends for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at 150.0 "$node_($i) reset"; }
$ns_ at 150.0001 "stop"
$ns_ at 150.0002 "puts \"NS EXITING...\" ; $ns_ halt" proc stop {} {
global ns_ tracefd close $tracefd
}
Tại thời điểm 105.0s sự mô phỏng sẽ dừng.Các nút xác lập lại tại thời gian đó và “$ns_halt” được gọi tại 150.0002s một chút ngay sau khi xác lập lại các nút.
Thủ tục stop{}dduwowcj gọi để xoá các trace và xoá các file trace Và cuối cùng dòng lệnh để bắt đầu mô phỏng
puts "Starting Simulation..." $ns_ run
Lưu file Simple-wireless.tcl
Tại thời điểm kết thúc sự thực thi mô phỏng file trace-output Simple.tr được tạo ra.Khi đã bật AgentTrace và RouterTrace hãy quan sát các thông điệp định tuyến DSDV và các gói tin TCP sẽ được nhận và gửi bởi các đối tượng Router và Agent trong các node0 và 1. Lưu ý rằng tất cả các trace không dây bắt đầu với WL trong trường đầu tiên của chúng. Quan sát luồng TCP bắt đầu từ 10.0s tại node0
Bắt đầu cả hai nút đều cách xa nhau và như thế các gói tin TCP bị loại bỏ bởi node0 bởi vì nó không thể nhận được từ node1. Trong vòng 81.0s thông tin định tuyến bắt đầu được trao đổi giữa hai nút và trong vòng 100s sẽ quan sát thấy gói tin TCP đầu tiên sẽ được nhận bởi Agent ở node1 và rồi node1 gửi một ACK trở lại node0 và kết nối TCP được thiết lập. Dù sao khi node1 bắt đầu di chuyển ra xa node0 kết nối lại bị bẻ gãy trong khoảng thời gian 116.0s.Các gói tin bắt đầu bị huỷ khi các nút di chuyển ra xa nhau .
CHƯƠNG IV: MÔ PHỎNG VÀ ĐÁNH GIÁ HIỆU NĂNG CÁC GIAO THỨC ĐỊNH TUYẾN PROACTIVE TRONG AD-HOC