4.3.3 Đề xuất cải tiến giao thức định tuyến cho mạng Ad-hoc
Sau khi nghiên cứu và đánh giá hiệu năng 2 giao thức định tuyến điển hình của hai lớp giao thức chủ ứng và phản ứng, theo nhiều độ đo hiệu năng khác nhau, tôi đề xuất một phiên bản AODV cải tiến nhƣ sau:
1/ Các nút mạng đánh giá độ linh động của nó so với các nút hàng xóm, sau đó định kỳ phát quảng bá thông tin về độ linh động này trong mạng. Chu kỳ phát quảng bá đƣợc nút điều chỉnh tăng lên khi độ linh động mà nó xác định đƣợc giảm đi. Việc phát quảng bá thông tin về độ linh động sẽ ngừng lại nếu độ linh động vƣợt quá một giá trị ngƣỡng nhất định.
2/ Thời gian sống của các tuyến đƣờng mà mỗi nút lƣu trữ sẽ đƣợc tăng lên khi độ linh động của các nút giảm đi.
Trong tƣơng lai, nếu có điều kiện đƣợc nghiên cứu tiếp, tôi sẽ thử nghiệm và đánh giá hiệu quả của các đề xuất trên.
CHƢƠNG 5: KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU Kết quả đạt đƣợc của luận văn
Luận văn đã trình bày kiến thức cơ sở về mạng Adhoc với trọng tâm là các kết quả nghiên cứu về vấn đề định tuyến. Đi đôi với sự phát triển nhanh chóng của mạng không dây là nhu cầu kết nối mọi lúc mọi nơi kể cả trong khi di chuyển đặt ra yêu cầu giải quyết đƣợc các vấn đề giữa sự linh động của các nút với tính hiệu quả của các giao thức định tuyến trong mạng Adhoc. Đây là vấn đề khó và quan trọng trong hoạt động của loại mạng này.
Để đảm báo tính đúng đắn khi đánh giá các yêu cầu này, ngoài những phân tích định tính về các giải thuật thì ta cần đánh giá các giao thức định tuyến trong một môi trƣờng có đủ các yếu tố phức tạp của mạng thực. Trong chƣơng 3, Luận văn đã trình bày những nghiên cứu chi tiết về môi trƣờng mạng, các yêu cầu đối với một giao thức định tuyến làm việc hiệu quả và xây dựng các mạng mô phỏng đáp ứng các yếu tố cần thiết mà môi trƣờng thực có thể đặt ra cho các giao thức. Từ đó, trong chƣơng 4 Luận văn đã đƣa ra các thí nghiệm với các tham số cấu hình mạng đa dạng cho việc kiểm tra các giao thức. Với những kết quả tính toán thu đƣợc, tôi đã có những đánh giá định lƣợng về hiệu quả của các giao thức và cho phép có thể so sánh các yếu tố hoạt động khác nhau giữa các giao thức.
Cụ thể, tôi đã xem xét chi tiết hoạt động của hai giao thức định tuyến AODV, DSDV với vận tốc di chuyển của các nút lần lƣợt là: 0, 5, 10, 15, 20, 25, 30 m/s. Dựa trên các kỹ thuật định tuyến mà hai giao thức này sử dụng là khác nhau: AODV là giao thức phản ứng dựa trên bảng véc tơ khoảng cách và DSDV là giao thức chủ ứng dựa trên véc tơ khoảng cách. Kết hợp với kết quả mô phỏng đã cho thấy các kết luận nhƣ sau:
DSDV đạt hiệu quả làm việc tốt khi vận tốc các nút mạng thay đổi. Ƣu điểm của DSDV là tải định tuyến chuẩn hóa ổn định và trễ đầu cuối trung bình thấp. Tuy nhiên, tỷ lệ phân phát gói tin thành công và thông lƣợng cần đƣợc cải thiện.
AODV là giao thức phản ứng có kết quả hoạt động tốt nhất, trong các trƣờng hợp khác nhau của sự linh động của nút mạng phần trăm phân phát gói tin thành công và thông lƣợng đầu cuối trung bình tốt nhất. Tuy nhiên, tải định tuyến chuẩn hóa gây khó khăn cho hoạt động của AODV.
Hƣớng nghiên cứu
Với những kết quả nghiên cứu mà luận văn đã đạt đƣợc, ta có đƣợc cái nhìn khái quát về mối quan hệ giữa sự linh động của các nút với tính hiệu quả của các giao thức định tuyến trong mạng Adhoc. Tuy nhiên, còn rất nhiều các vấn đề khác của các giao thức cần đƣợc xem xét nhƣ sau:
Đánh giá ảnh hƣởng của sự di động của nút mạng đến hiệu quả của những giao thức khác: TORA, ZRP …
Định tuyến multicast…
Nghiên cứu, xây dựng và triển khai các vấn đề về an ninh cho mạng vô tuyến Adhoc.
Vấn đề giảm phụ tải truyền thông trong mạng MANET. Vấn đề kết nối mạng Adhoc với Internet.
TÀI LIỆU THAM KHẢO. 1. Tài liệu tiếng Việt.
[1] PGS.TS. Nguyễn Đình Việt, Bài giảng đánh giá hiệu năng mạng máy tính, 2012. [2]Hoàng Trọng Minh. Định tuyến trong mạng kết nối hình lƣới WLAN. Tạp chí Bƣu Chính Viễn Thông. Tháng 10 năm 2008.
[3] Nguyễn Thị Minh Nguyệt. Đánh giá hiệu suất bằng mô phỏng các thuật toán định tuyến trong mạng đặc biệt di động MANET. Luận văn cao học. Hà Nội, 2005.
[4] Hà Minh Toản. Nguyên cứu một số giao thức truy cập môi trƣờng truyền trong mạng LAN 802.11. Khóa luận tốt nghiệp. Hà Nội, 2005.
2. Tài liệu tiếng Anh.
[5] S. Corson, J. Macker. (1999), “MANET: Routing Protocol Performance Issues and Evaluation considerations”, RFC 2501, IETF Network Working Group. January 1999. [6] Goldsmith AJ and Wicker SB, “Design challenges for energy-constrained Adhoc wireless networks”, IEEE Wireless Communications 2002, Vol. 9, Issue 4, PP. 8–27. [7] V. Kauadia and P.R. Kumar, "Power Control and clustering in Adhoc networks", IEEE INFOCOM 2003.
[8] Charles E. Perkins, Pravin Bhagwat. (1994), “Highly dynamic Destination- Sequenced Distance Vector routing (DSDV) for mobile computers”, ACM SIGCOMM Computer Comm. Rev., 4(24), pp. 234-244, 1994.
[9] The SECAN-Lab of the University of Luxembourg.http://wiki.uni.lu/secan- lab/Adhoc+Protocols.html.
PHỤ LỤC 1. Chƣơng trình mô phỏng mạng Adhoc
# nguyenthanhtrung-k19mmt.tcl
# ============================================================ # Define options
# ============================================================ set val(chan) Channel/WirelessChannel
set val(prop) Propagation/TwoRayGround set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
set val(ifq) Queue/DropTail/PriQueue set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(x) 1500 ;# X dimension of the topography set val(y) 900 ;# Y dimension of the topography set val(ifqlen) 50 ;# max packet in ifq
set val(seed) 1.0
set val(AdhocRouting) DSDV
set val(nn) 50 ;# how many nodes are simulated set val(cp) "/home/thanhtrung/cbr_10"
set val(sc) "/home/thanhtrung/scen_v5" set val(stop) 900.0 ;# simulation time
# ============================================================ # Main Program
# ============================================================ #
# Initialize Global Variables #
# create simulator instance set ns_ [new Simulator] # setup topography object set topo [new Topography]
# create trace object for ns and nam
set tracefd [open dsdv-cbr10-rwp0-speed10-out.tr w] set namtrace [open dsdv-cbr10-rwp0-speed10-out.nam w] $ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y) # define topology
$topo load_flatgrid $val(x) $val(y) #
# Create God #
set god_ [create-god $val(nn)] #
# define how nútshould be created #
#global nútsetting
$ns_ node-config -AdhocRouting $val(AdhocRouting) \ -llType $val(ll) \
-macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -movementTrace ON \ -macTrace OFF #
# Create the specified number of nodes [$val(nn)] and "attach" them to the channel. #
for {set i 0} {$i < $val(nn) } {incr i} { set node_($i) [$ns_ node]
$node_($i) random-motion 0 ; # disable random motion }
#
# Definenútmovement model #
puts "Loading connection pattern..." source $val(cp)
# Define traffic model #
puts "Loading scenario file..." source $val(sc)
# Definenútinitial position in nam for {set i 0} {$i < $val(nn)} {incr i} { $ns_ initial_node_pos $node_($i) 50 }
#
# Tell nodes when the simulation ends #
for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at $val(stop).0 "$node_($i) reset"; }
$ns_ at $val(stop).0002 "puts \"NS EXITING...\" ; $ns_ halt"
puts $tracefd "M 0.0 nn $val(nn) x $val(x) y $val(y) rp $val(AdhocRouting)" puts $tracefd "M 0.0 sc $val(sc) cp $val(cp) seed $val(seed)"
puts $tracefd "M 0.0 prop $val(prop) ant $val(ant)" puts "Starting Simulation..."
$ns_ run
2. Đoạn mã Perl để phân tích tệp vết, tính thời gian trễ end-to-end trung bình # average_end-end_delay.pl # average_end-end_delay.pl
# type: perl average_end-end_delay.pl <trace file>
# --- $infile=$ARGV[0];
$speed=$ARGV[1]; $sum=0;
$recvnum=0;
# --- open (DATA,"<$infile") || die "Can't open $infile $!";
while (<DATA>) { @x = split(' '); for ($x[5]) {
if (( $x[0] eq "s") && ( $x[6] eq "cbr" ) && ( $x[3] eq "AGT" )) {$start_time = $x[1]; }
if (( $x[0] eq "r") && ( $x[6] eq "cbr" ) && ( $x[3] eq "AGT" )) {$end_time = $x[1]; $recvnum++;}
$packet_duration =$end_time - $start_time;
if ( $packet_duration > 0 ) { $sum += $packet_duration; } }
}
# --- $delay=$sum/$recvnum;
#print STDOUT "Total delay time of packets = $sum\n"; #print STDOUT "Total packets = $recvnum\n";
print STDOUT "$speed", " ", "$delay\n"; close DATA;
exit(0);
3. Đoạn mã Perl để phân tích tệp vết, tính chi phí định tuyến chuẩn hóa #normalized_routing_overhead.pl #normalized_routing_overhead.pl
# --- $infile=$ARGV[0]; $speed=$ARGV[1]; $routing_packets=0; $sum_received=0; # --- open (DATA,"<$infile") || die "Can't open $infile $!";
while (<DATA>) { @x = split(' ');
if (( $x[0] eq "r") && ( $x[6] eq "cbr" ) && ( $x[3] eq "AGT" )) {$sum_received++; }
if (( $x[0] eq "s" || $x[0] eq "f") && ( $x[6] eq "message" ) && ( $x[3] eq "RTR" )) {$routing_packets++; }
}
# --- $normalized_routing_overhead=($routing_packets/$sum_received); #print STDOUT "Total packets received = $sum_received\n";
#print STDOUT "Total routing packets sent & forward = $routing_packets\n"; print STDOUT "$speed", " ", "$normalized_routing_overhead \n";
close DATA; exit(0);
4. Đoạn mã Perl để phân tích tệp vết, tính tỉ lệ phân phát gói tin thành công #packet_delivery_fraction.pl #packet_delivery_fraction.pl
# type: perl packet_delivery_fraction_ratio.pl <trace file>
$infile=$ARGV[0]; $speed=$ARGV[1]; $sum_sent=0; $sum_received=0;
# --- open (DATA,"<$infile") || die "Can't open $infile $!";
while (<DATA>) { @x = split(' ');
if (( $x[0] eq "s") && ( $x[6] eq "cbr" ) && ( $x[3] eq "AGT" )) {$sum_sent++; }
if (( $x[0] eq "r") && ( $x[6] eq "cbr" ) && ( $x[3] eq "AGT" )) {$sum_received++; }
}
# --- $packet_delivery_ratio=($sum_received/$sum_sent)*100; #print STDOUT "Total packets sent = $sum_sent\n";
#print STDOUT "Total packets received = $sum_received\n"; print STDOUT "$speed", " ", "$packet_delivery_ratio\n"; close DATA;
exit(0);
5. Đoạn mã Perl để phân tích tệp vết, tính thông lƣợng trung bình #throughput.pl
# type: throughput.pl <trace file>
$infile=$ARGV[0]; $speed=$ARGV[1]; $recvdSize = 0; $startTime = 1000; $stopTime = 0; # --- open (DATA,"<$infile") || die "Can't open $infile $!";
while (<DATA>) { @x = split(' '); $pkt_size = $x[7]; # Store start time
if (($x[3] eq "AGT") && ($x[0] eq "s") && ($pkt_size >= 512)) { if ($x[1] < $startTime) {
$startTime = $x[1]; }
}
# Update total received packets' size and store packets arrival time if (($x[3] eq "AGT") && ($x[0] eq "r") && ($pkt_size >= 512)) { if ($x[1] > $stopTime) {
$stopTime = $x[1]; }
# Rip off the header
$hdr_size = $pkt_size % 512; $pkt_size -= $hdr_size; # Store received packet's size $recvdSize += $pkt_size;
} }
# ---
#print("Average Throughput[kbps] = ",($recvdSize/($stopTime-$startTime)) * (8/1000)," ",$startTime," ","$stopTime\n");
print STDOUT "$speed", " ", ($recvdSize/($stopTime-$startTime))*(8/1000),"\n"; close DATA;