Phần này trình này việc mô phỏng một giao thức Mobile IP sử dụng NS2. Phiên bản cơ sở ban đầu được viết bởi Robert Hsieh trong bản ns-2 mở rộng. Tuy nhiên, đó là phiên bản sơ khai nên để sử dụng được cho mục đích mô phỏng theo từng mục đích nghiên cứu, người sử dụng cần phải sửa đổi khá nhiều. Phần dưới đây trình bày chi tiết các bước để mô phỏng các giao thức mở rộng từ MIPv.6 ban đầu.
Như chúng ta đã biết, bộ mô phỏng ns-2 sử dụng các tệp .tcl (được viết theo ngôn ngữ Tool Command Language) làm các tham số đầu vào do ngôn ngữ vào do ngôn ngữ ngày là thông dịch nên khi thay đổi tham số đầu vào chúng ta không phải biên dịch lại toàn bộ chương trình.
Để mô phỏng MIPv.6 cơ sở, chúng ta cần sửa lại:
- Trong tệp mip-reg.cc (đây là tệp chương trình c++ chứa các thuật toán dùng trong mô phỏng): Bỏ các thành phần MAP_MODE, FAST_HANDOVER, MAP_FAST_HANDOVER trong khai báo
- Trong tệp simula.tcl (chứa các khai báo tham số đầu bào): Bỏ thuộc tính 'priority' kết hợp với tất cả các nodes và bỏ 'attach- mapagent'
Để mô phỏng Mobile IP với các thuộc tính chuyển giao ưu tiên (chuyển giao nhanh):
- Trong tệp mip-reg.cc (đây là tệp chương trình c++ chứa các thuật toán dùng trong mô phỏng): Bỏ các thành phần MAP_MODE, FAST_HANDOVER, MAP_FAST_HANDOVER trong khai báo
- Trong tệp simula.tcl: đảm bảo các thuộc tính ưu tiên được đặt cho tất cả các nút và bỏ 'attach-mapagent'
Để mô phỏng Mobile IP phân cấp trong miền thông thường:
- Trong tệp mip-reg.cc (đây là tệp chương trình c++ chứa các thuật toán dùng trong mô phỏng): Khôi phục thành phần MAP_MODE và bỏ FAST_HANDOVER, MAP_FAST_HANDOVER trong khai báo.
- Trong tệp simula.tcl (chứa các khai báo tham số đầu bào): đảm bảo thuộc tính 'priority' kết hợp với tất cả các nodes khôi phục lại 'attach-mapagent'
Để mô phỏng Mobile IP phân cấp trong miền với chuyển giao nhanh:
- Trong tệp mip-reg.cc (đây là tệp chương trình c++ chứa các thuật toán dùng trong mô phỏng): Bỏ phần MAP_MODE, MAP_FAST_HANDOVER và Khôi phục FAST_HANDOVER trong khai báo.
- Trong tệp simula.tcl (chứa các khai báo tham số đầu bào): đảm bảo thuộc tính 'priority' kết hợp với tất cả các nodes và bỏ 'attach-mapagent'
# To simulate (Flat Mobile IP with Fast-handover):
# Using priority handoff.
# Procedures: mip-reg.cc => unblock FAST_HANDOVER (block both MAP_MODE and FAST_MAP_HANDOVER)
# simula.tcl => make sure priority is set for nodes
# block out 'attach-mapagent'
#
Để mô phỏng Mobile IP phân cấp liên miền với chuyển giao nhanh:
- Trong tệp mip-reg.cc (đây là tệp chương trình c++ chứa các thuật toán dùng trong mô phỏng): Khôi phục lại MAP_MODE, MAP_FAST_HANDOVER và FAST_HANDOVER trong khai báo.
- Trong tệp simula.tcl (chứa các khai báo tham số đầu bào): đảm bảo thuộc tính 'priority' kết hợp với tất cả các nodes và khôi phục lại'attach-mapagent'
Thiết lập các ăng-ten và hướng đặt trên các nút với đọ cao 1.5m trên nó và Khởi tạocác giao diện SharedMedia với các thông số để làm cho nó làm việc như giao diện vô tuyến 914MHz Lucent WaveLAN DSSS:
Phy/WirelessPhy set CPThresh_ 10.0 Phy/WirelessPhy set CSThresh_ 1.559e-11 Phy/WirelessPhy set RXThresh_ 3.652e-10 Phy/WirelessPhy set bandwidth_ 2e6
Phy/WirelessPhy set Pt_ 8.5872e-4 Phy/WirelessPhy set freq_ 914e+6 Phy/WirelessPhy set L_ 1.0 Phy/WirelessPhy set debug_ false
Sau khi thiết lập lại các tham số cần thiết ban đầu cho việc mô phỏng một giao thức Mobile IP, chúng ta sẽ bắt đầu đặt các tham số chi tiết cho từng kịch bản mô phỏng:
- Khởi tạo
set ns_ [new Simulator]
$ns_ node-config -addressType hierarchical
AddrParams set domain_num_ 7 lappend cluster_num 2 1 1 2 2 1 2
AddrParams set cluster_num_ $cluster_num lappend eilastlevel 1 1 2 1 1 1 1 1 1 1 1 AddrParams set nodes_num_ $eilastlevel
- Chỉ ra độ dài header, các cờ và số ack
set tracefd [open traffic.tr w]
$ns_ use-newtrace
$ns_ trace-all $tracefd
- Thiết lập topo
set topo [new Topography]
$topo load_flatgrid 1400 1400 set god_ [create-god 1]
- Thiết lập các nút: CH, MAP, N1, N2, N3, N4
#CH - 0
set CN [$ns_ node 0.0.0]
#MAP1 - 1
set MAP1 [$ns_ node 2.0.0]
#MAP1 - 2
set MAP2 [$ns_ node 5.0.0]
#N1 - 3
set N1 [$ns_ node 0.1.0]
#N2 - 4
set N2 [$ns_ node 3.0.0]
#N3 - 5
set N3 [$ns_ node 4.0.0]
#N4 - 6
set N4 [$ns_ node 6.0.0]
set chan_ [new Channel/WirelessChannel]
$ns_ node-config -mobileIP ON \
-adhocRouting NOAH \ -llType LL \
-macType Mac/802_11 \
-ifqType Queue/DropTail/PriQueue \ -ifqLen 50 \
-antType Antenna/OmniAntenna \
-propType Propagation/TwoRayGround \ -phyType Phy/WirelessPhy \
-channel $chan_ \ -topoInstance $topo \ -wiredRouting ON \
-agentTrace ON \
-routerTrace OFF \ -macTrace ON
#HA - 7
set HA [$ns_ node 1.0.0]
[$HA set regagent_] priority 3
#MN - 8
$ns_ node-config -wiredRouting OFF set MN [$ns_ node 1.0.1]
[$MN set regagent_] set home_agent_ [AddrParams addr2id [$HA node- addr]]
$ns_ node-config -wiredRouting ON
#AR1 - 9
set AR1 [$ns_ node 3.1.0 2.0.0]
[$AR1 set regagent_] priority 3
#AR2 - 10
set AR2 [$ns_ node 4.1.0 2.0.0]
[$AR2 set regagent_] priority 4
#AR3 - 11
set AR3 [$ns_ node 6.1.0 5.0.0]
$AR3 set regagent_] priority 2
- Đặt vị trí của các nút
$CN set X_ 80.0
$CN set Y_ 5.0
$N1 set X_ 120.0
$N1 set Y_ 10.0
$HA set X_ 160.0
$HA set Y_ 5.0
$MN set X_ 80.0
$MN set Y_ 135
$MAP1 set X_ 120.0
$MAP1 set Y_ 15.0
$MAP2 set X_ 225.0
$MAP2 set Y_ 15.0
$N2 set X_ 85.0
$N2 set Y_ 60.0
$N3 set X_ 155.0
$N3 set Y_ 60.0
$N4 set X_ 225.0
$N4 set Y_ 60.0
$AR1 set X_ 80.0
$AR1 set Y_ 135.0
$AR2 set X_ 155.0
$AR2 set Y_ 135.0
$AR3 set X_ 225.0
$AR3 set Y_ 135.0
- Thiết lập các liên kết
$ns_ duplex-link $CN $N1 10Mb 5ms RED
$ns_ duplex-link $HA $N1 10Mb 5ms RED
$ns_ duplex-link $MAP1 $N1 100Mb 50ms RED
$ns_ duplex-link $MAP2 $N1 100Mb 50ms RED
$ns_ duplex-link $N2 $MAP1 10Mb 5ms RED
$ns_ duplex-link $N3 $MAP1 10Mb 5ms RED
$ns_ duplex-link $N4 $MAP2 10Mb 5ms RED
$ns_ duplex-link $AR1 $N2 100Kb 2ms DropTail
$ns_ duplex-link $AR2 $N3 100Kb 2ms DropTail
$ns_ duplex-link $AR3 $N4 100Kb 2ms DropTail
- Thiết lập kịch bản mô phỏng
$ns_ attach-mapagent $MAP1
$ns_ attach-mapagent $MAP2
set tcp_(1) [$ns_ create-connection TCP $CN TCPSink $MN 1]
$tcp_(1) set window_ 32
$tcp_(1) set packetSize_ 512
$ns_ connection-monitor 1 $MN
set cwndtrace [open all.cwnd w]
$tcp_(1) trace cwnd_
$tcp_(1) attach $cwndtrace
set ftp_(1) [new Application/FTP]
$ftp_(1) attach-agent $tcp_(1)
$ns_ at 5.0 "$ftp_(1) start"
$ns_ at 160.0 "$ftp_(1) stop"
- Thực hiện mô phỏng
$ns_ at 6.0 "$MN set X_ 85.0"
$ns_ at 6.0 "$MN set Y_ 135.1"
$ns_ at 10.0 "$MN setdest 225.0 135.1 1"
for {set t 10} {$t < 160} {incr t 10} {
$ns_ at $t "puts stderr \"completed through $t/160 secs...\""
}
$ns_ at 0.0 "puts stderr \"Simulation started...\""
$ns_ at 160.0001 "puts stderr \"Simulation finished\""
$ns_ at 160.0002 "close $tracefd"
$ns_ at 160.0003 "$ns_ halt"
$ns_ run
Ngoài việc sửa đổi tệp .tcl chỉ để thay đổi các tham số đầu như trên. Chúng ta cần sửa đổi các kịch bản mô phỏng (các thuật toán) cho phù hợp với mục đích của mình trong tệp mip-reg.cc.