Các luồng đều là XCP

Một phần của tài liệu nghiên cứu điều khiển tắc nghẽn trong ngn (Trang 72 - 93)

3 nguồn 0, 1, 2 là 3 nguồn XCP lần lượt xuất phát từ 3 nút 0, 1, 2. Mô phỏng trực quan được thể hiện rõ trên cửa sổ NAM. Trong đó, cửa sổ monitors cho ta kích thước cửa sổ của các nguồn. Thời gian các luồng bắt đầu truyền được thể hiện trong cửa sổ dưới cùng.

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

61

Hình 4.11 Mô phỏng 3 luồng XCP cùng chia sẻ đường truyền.

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

62

Hình 4.12 cho ta thấy hiệu quả sử dụng đường truyền của các luồng XCP trong mô phỏng trên là rất cao. Khi có 1 đường truyền nhánh từ nút 0 đến router thắt cổ chai ngừng truyền thì hiệu quả vẫn được đảm bảo như trong hình 4.13

Hình 4.13 Hiệu quả vẫn bảo đảm khi 1 luồng ngừng truyền đột ngột.

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

63

Hình 4.15 Số gói tại hàng đợi nhỏ.

4.3.2.2 Khi XCP và TCP cùng tồn tại

Trong trường hợp này, ta có 3 luồng XCP xuất phát từ 3 nguồn 0, 1, 2 (lần lượt ứng với các node 0, 1, 2 trong topo mạng hình 4.10) và luồng TCP xuất phát từ nút 0 Trong đó, thời gian các luồng bắt đầu truyền các đoạn dữ liệu được đưa ra trong cửa sổ dưới cùng trong NAM. Router có khả năng XCP sẽ phân biệt các luồng TCP và XCP và xếp hàng chúng 1 cách tách biệt nhau.

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

64

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

65

Hình 4.17 Biểu diễn cwnd của 2 loại lưu lượng TCP và XCP.

Chương 4: Chương trình mô phỏng điều khiển tắc nghẽn dùng thuật toán tăng giảm

66

Hình 4.19 Trạng thái hàng XCP.

Như vậy, qua các kết quả mô phỏng như trên ta thấy XCP cho ta hiệu quả sử dụng đường truyền cao trong khi đảm bảo số gói tại hàng đợi nhỏ. Ngoài ra nó còn đảm bảo các luồng hội tụ nhanh đến điểm tối ưu. Luồng XCP nhanh chiếm băng thông đường truyền nhanh hơn TCP.

4.4 Kết luận chương

Trong chương này, sinh viên mô phỏng thuật toán tăng giảm truyền thống để cho thấy thuật toán AIMD sử dụng trong các giao thức hiệu quả như thế nào. Từ đó sinh viên mô phỏng XCP với các ưu điểm về tính bình đẳng và hiệu quả trong khi sự mất gói là rất hiếm. Phần mô phỏng này được thực hiện với phần mềm nguồn mở ns2.

Các file OTcl Scripts thực hiện mô phỏng trình bày trong phần phụ lục của luận văn.

67

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỂ TÀI

Đề tài đã trình bày được những khái niệm cơ sở về mạng NGN, các đặc trưng cũng như cấu trúc mạng. Bài toán điều khiển tắc nghẽn sử dụng các giao thức, thuật toán để tối ưu hóa việc sử dụng tài nguyên, đạt được hiệu suất mạng thực sự. Đặc biệt, đề tài tập trung nhiều vào các khía cạnh như sau:

 Các tiêu chí đánh giá phương pháp điều khiển tắc nghẽn.

 Các phương pháp điều khiển tắc nghẽn truyền thống và mới.

 Xây dựng các kịch bản mô phỏng từ phương pháp điều khiển tắc nghẽn sử dụng XCP để đánh giá hiệu quả khi sử dụng giao thức này. Đây thực sự là ứng cử viên cho mạng dựa trên cơ sở IP.

Tuy nhiên, điều khiển chống tắc nghẽn là 1 vấn đề phức tạp, nhất là khi mạng ngày càng phát triển rộng lớn, dịch vụ gia tăng nhanh, các dịch vụ mới ngày càng nhiều, số lượng người sử dụng tăng vọt và biến đổi động…Vì vậy đề tài khó tránh khỏi những thiếu sót, cụ thể là:

 Một số khái niệm, thuật ngữ mới chưa được thống nhất khi dịch thuật.

 Chưa đề cập đến thuật toán tăng giảm phi tuyến và các thuật toán cải thiện thuật toán tăng giảm tuyến tính, chẳng hạn như EIMD.

 Trong khuôn khổ đề tài, chỉ nêu mô phỏng XCP mà chưa đi sâu vào mô phỏng tất cả các phương pháp điều khiển tắc nghẽn

 Chưa đề cập nhiều vấn đề khi sử dụng XCP trong thực tế như bảo mật, triển khai, ...

 Phần mềm mô phỏng mạng NS-2 rất khó can thiệp một cách đầy đủ mà thường chỉ kế thừa và sử dụng tập lệnh của nó cung cấp. Một số hàm, thủ tục trong thư viện do NS-2 hỗ trợ không ổn định và không mô phỏng đầy đủ các hoạt động của giao thức thật sự; do vậy, kết quả mô phỏng thu được chỉ đạt được độ tin cậy tương đối.

Qua đề tài này, sinh viên mong muốn nắm bắt được nền tảng kiến thức về mạng thế hệ sau, điều khiển tắc nghẽn và sử dụng các giao thức điều khiển tắc nghẽn. Hiện nay, giao thức được sử dụng rộng rãi là TCP. Tuy nhiên, nó còn phù

68

hợp khi tích hợp các dịch vụ vào một mạng thống nhất, yêu cầu của người dùng về chất lượng dịch vụ ngày càng cao. XCP là giao thức được cho là ứng cử viên sáng giá cho sự phát triển sau này, tuy nhiên còn có 2 câu hỏi lớn là:

Liệu XCP có đảm bảo hiệu quả cho tất cả các dịch vụ hay không?

Yêu cầu về router khi sử dụng XCP là rất cao, liệu chúng ta có nên triển khai XCP trong thực tế hay không?

Khái niệm FXCP được đưa ra với FXCP dùng bộ điều khiển mờ (fuzzy- based controller) liên quan đến bộ điều khiển dùng trong FEWA để thay thế cho bộ điều khiển hiệu quả trong router XCP. Liệu FXCP có tối ưu hơn XCP?

Ngoài ra nhất thiết phải nghiên cứu sâu hơn nữa về các phương pháp điều khiển tắc nghẽn khác để ngày càng nâng cao hơn nữa hiệu quả của việc điều khiển tắc nghẽn trong NGN. Đó cũng là những hướng phát triển mà đề tài này vươn tới.

Phụ lục

PHẦN PHỤ LỤC

Thuật toán tăng giảm

 Tăng cộng giảm nhân AIMD

#define_param a range 0.1 to 1 default 0.1 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0; if(traffic > 1){ rate = rate * b; } else{ rate = rate + a;

rate = min(rate, maxrate); }

 Tăng cộng giảm cộng AIAD

#define_param a range 0.1 to 0.9 default 0.2 #define_param b range 0.1 to 0.9 default 0.3 maxrate = 1.0;

minrate = 0.0; if(traffic > 1){

rate = rate - b;

rate = max(rate, minrate); }

else{

rate = rate + a;

rate = min(rate, maxrate); }

 Tăng nhân giảm cộng MIAD #define_param a range 1 to 2 default 1.2 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0;

minrate = 0.0; if(traffic > 1){

rate = rate - b;

rate = max(rate, minrate); }

else{

rate = rate * a;

rate = min(rate, maxrate); }

Phụ lục

 Tăng nhân giảm nhân MIMD #define_param a range 1 to 2.0 default 1.2 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0; if(traffic > 1){ rate = rate * b; } else{ rate = rate * a;

rate = min(rate, maxrate); }

Kịch bản xây dựng trong ns2

#--- So do ket noi mang ---# # n0 # \ Bottleneck Dich # n1--R0---R1 # / # n2 #

# Cac luong xcp va tcp dung chung router xcp Queue/XCP set tcp_xcp_on_ 1

Agent/TCP set minrto_ 1 # Tao doi tuong mo phong set ns [new Simulator] $ns use-scheduler Heap # Tao file trace

set f_all [open out.tr w] $ns trace-all $f_all

#--- # Dinh nghia cac ham su dung trong chuong trinh chinh #--- # Tao tham so cho hang RED

proc set-red-params { qsize } {

Queue/RED set thresh_ [expr 0.6 * $qsize] Queue/RED set maxthresh_ [expr 0.8 * $qsize]

Phụ lục

Queue/RED set q_weight_ 0.001 Queue/RED set linterm_ 10 Queue/RED set bytes_ false ;

Queue/RED set queue_in_bytes_ false ; Agent/TCP set old_ecn_ true

Queue/RED set setbit_ true }

#--- # Tao topo mang

proc create-topology2 { BW delay qtype qsize numSideLinks deltaDelay } { global ns

# Thiet lap kich co hang den kich co duong truyen # Gia su rang kich co goi la 1000Bytes

if { $qsize == 0 } { set qsize [expr round([expr ($BW / 8) * 2 * $delay])] }

#Khai bao 2 nut R0 R1 set i 0

while { $i < 2 } { global R$i

set R$i [$ns node] incr i

}

$R0 color red $R1 color blue

$R0 label "That co chai" $R1 label "Dich"

# Khai bao link: nodes bw delay queue $ns duplex-link $R0 $R1 [set BW]Mb [set delay]ms $qtype $ns queue-limit $R0 $R1 $qsize

$ns queue-limit $R1 $R0 $qsize

# Xu li hang bi that co chai, cho phep thiet lap cac tham so RED global Bottleneck rBottleneck

set Bottleneck [[$ns link $R0 $R1] queue] set rBottleneck [[$ns link $R1 $R0] queue] global l rl

set l [$ns link $R0 $R1] set rl [$ns link $R1 $R0] global all_links

Phụ lục

# Duong truyen nha'nh co cung bang thong nhu duong that co chai set i 0

while { $i < $numSideLinks } { global n$i q$i rq$i l$i rl$i set n$i [$ns node]

$ns duplex-link [set n$i] $R0 [set BW]Mb [expr $delay + $i* $deltaDelay]ms $qtype

$ns queue-limit [set n$i] $R0 $qsize $ns queue-limit $R0 [set n$i] $qsize set q$i [[$ns link [set n$i] $R0] queue] set rq$i [[$ns link $R0 [set n$i]] queue] set l$i [$ns link [set n$i] $R0]

set rl$i [$ns link $R0 [set n$i]]

set all_links "$all_links [set l$i] [set rl$i]" incr i

} }

#--- #---Lop GeneralSender: can thiet cho phia goi ftp--- Class GeneralSender -superclass Agent

GeneralSender instproc init { id node rcvrTCP otherparams } { global ns

$self next

$self instvar tcp_ id_ ftp_ node_ tcp_rcvr_ tcp_type_ set id_ $id

set node_ $node

if { [llength $otherparams] > 1 } { set TCP [lindex $otherparams 1] } else {

set TCP "TCP/Reno" }

set tcp_type_ $TCP

set tcp_ [new Agent/$TCP] $tcp_ set packetSize_ 1000 $tcp_ set class_ $id

set ftp_ [new Source/FTP] $ftp_ set agent_ $tcp_

$ns attach-agent $node $tcp_ $ns connect $tcp_ $rcvrTCP set tcp_rcvr_ $rcvrTCP

Phụ lục

set startTime [lindex $otherparams 0] $ns at $startTime "$ftp_ start"

puts " Khoi tao phia goi $id_ tai thoi gian t= $startTime s" }

GeneralSender instproc trace-xcp parameters { $self instvar tcp_ id_ tcpTrace_

global ftracetcp$id_ ns

set ftracetcp$id_ [open xcp$id_.tr w] set tcpTrace_ [set ftracetcp$id_] $tcp_ attach-trace [set ftracetcp$id_]

if { -1 < [lsearch $parameters cwnd] } { $tcp_ tracevar cwnd_ } }

#--- #---Thuc hien chuc nang ve do thi---# # do thi bien trace xcp

proc plot-xcp { TraceName nXCPs PlotTime what } {

exec rm -f xgraph_cwnd.tcp set f [open xgraph_cwnd.tcp w] set a cwnd

puts $f "TitleText: $TraceName" puts $f "Device: Postscript" foreach i $nXCPs {

# trace TCP duoc flushed khi cac nguon ngung exec rm -f temp.tcp

exec touch temp.tcp global ftracetcp$i

if [info exists ftracetcp$i] { flush [set ftracetcp$i] }

set result [exec awk -v PlotTime=$PlotTime -v what=$what { {

if (( $6 == what ) && ($1 > PlotTime)) { print $1, $7 >> "temp.tcp";

} } } xcp$i.tr]

puts $f \"$what$i exec cat temp.tcp >@ $f

Phụ lục

puts $f "\n" flush $f }

close $f

exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "cwnd (KBytes)" xgraph_$a.tcp &

return }

#--- proc plot-xcp-queue { PlotTime traceFile } {

exec rm -f xcp_queue

exec rm -f temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y

exec touch temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y

exec awk -v PT=$PlotTime { {

if (($1 == "q" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.q"

}

else if (($1 == "a" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.a"

}

else if (($1 == "p" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.p"

} } } $traceFile

set ff [open xcp_queue w]

puts $ff "TitleText: Trang thai hang DROPTAIL XCP" puts $ff "Device: Postscript \n"

puts $ff \"queue

exec cat temp.q >@ $ff puts $ff \n\"ave_queue exec cat temp.a >@ $ff puts $ff \n\"prob_drop exec cat temp.p >@ $ff close $ff

exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "Queue (goi)" xcp_queue &

Phụ lục

}

#--- proc plot-red-queue { PlotTime traceFile } {

exec rm -f red_queue

exec rm -f temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y

exec touch temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y

exec awk -v PT=$PlotTime { {

if (($1 == "Q" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.q"

}

else if (($1 == "a" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.a"

}

else if (($1 == "p" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.p"

} } } $traceFile

set ff [open red_queue w]

puts $ff "TitleText: Trang thai hang RED TCP" puts $ff "Device: Postscript \n"

puts $ff \"queue

exec cat temp.q >@ $ff puts $ff \n\"ave_queue exec cat temp.a >@ $ff puts $ff \n\"prob_drop exec cat temp.p >@ $ff close $ff

exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "Queue (goi)" red_queue &

}

#---

Một phần của tài liệu nghiên cứu điều khiển tắc nghẽn trong ngn (Trang 72 - 93)

Tải bản đầy đủ (PDF)

(93 trang)