Tính tốc độ các luồng dữ liệugửi qua mạng để các luồng chia sẽ băng thông kênh truyền dựa theo nguyên lý công bằng cực đại cực tiểu (maxmin fairness) và dựng kịch bản mô phỏng bằng công cụ NS2
          
        
            
               
            
 
            
                
                    Một trong những vấn đề khó khăn nhất của thực hiện điều khiển luồng và 
kiểm soát tắc nghẽn là đảm báo tính công bằng cho các kết nối hoặc người dùng 
khi xảy ra tắc nghẽn. Khái niệm tính côngbằng thể hiện ở chỗ các kết nối, người 
dùng được sử dụng tài nguyên mạng với cơ hội như nhau
Việc sử dụng tài nguyên mạng hiệu quả nhất có thể trong khi vẫn có thể đảm 
bảo được tính công bằng cho các kết nối được thực hiện bởi cơ chế điều khiển 
luồng cực đại –cực tiểu (max–min flow control). Cơ chế này được xây dựng trên 
mô hình công bằng cực đại –cực tiểu (max-min fairness).
                
              
                                            
                                
            
 
            
                 12 trang
12 trang | 
Chia sẻ: lylyngoc | Lượt xem: 2898 | Lượt tải: 2 
              
            Bạn đang xem nội dung tài liệu Tính tốc độ các luồng dữ liệugửi qua mạng để các luồng chia sẽ băng thông kênh truyền dựa theo nguyên lý công bằng cực đại cực tiểu (maxmin fairness) và dựng kịch bản mô phỏng bằng công cụ NS2, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
BÁO CÁO MÔN 
CƠ SỞ MẠNG THÔNG TIN 
tính tốc độ các luồng dữ liệu gửi qua mạng để các luồng chia sẽ băng 
thông kênh truyền dựa theo nguyên lý công bằng cực đại cực tiểu (max-
min fairness) và dựng kịch bản mô phỏng bằng công cụ NS2. 
Mục đích 
Trong môn Cơ sở mạng thông tin, chúng ta đã làm quen với phương pháp 
đánh giá hoạt động của một hệ thống thông tin bằng phương pháp phân tích 
toán học, đặc biệt là các mô hình liên quan đến hệ thống hàng đợi đơn, mạng 
hàng đợi,cơ sở cho các cơ chế điều khiển luồng và định tuyến trong mạng. 
Trong phần bài tập lớn này, chúng ta sẽ được làm quen với một phương pháp 
khác để đánh giá hiệu năng, đó là phương pháp mô phỏng. 
Bài tập lớn này có một số mục đích sau: 
- Kiểm nghiệm các kết quả phân tích, đánh giá hệ thống khi dùng phương 
pháp phân tích toán học và phương pháp mô phỏng 
- Làm quen với công cụ mô phỏng NS-2 – công cụ mô phỏng mạng thông 
dụng nhất hiện nay 
- Làm quen với hệ điều hành Linux và lập trình trong môi trường GNU. 
- Phát triển kỹ năng làm việc theo nhóm. 
- Phát triển kỹ năng làm việc độc lập. 
Yêu cầu của BTL: 
BTL của nhóm yêu cầu tính tốc độ các luồng dữ liệu gửi qua mạng để các 
luồng chia sẽ băng thông kênh truyền dựa theo nguyên lý công bằng cực đại cực 
tiểu (max-min fairness) và dựng kịch bản mô phỏng bằng công cụ NS2. 
Các thành viên trong nhóm và nhiệm vụ của từng thành viên 
1.Lương Xuân Tiến 
Tìm hiểu nguyên lý công bằng cực đại cực tiểu Max-min fairness và tính toán 
các tham số S1, S2, S3 dựa theo nguyên lý trên . 
2.Lê Duy Tân 
Tìm hiểu công cụ mô phỏng NS-2 và dựng kịch bản mô phỏng dựa theo các 
thông số S1, S2, S3 đã tính. 
3.Võ Văn Thế 
Tìm hiểu công cụ mô phỏng NS-2 và dựng kịch bản mô phỏng. 
4.Trần Hải Anh 
Vẽ đồ thị băng thông và vẽ đồ thị tốc độ mất gói. 
Thực hiện bài tập lớn: 
I.Tìm hiểu về nguyên lý công bằng cực đại cực tiểu (max-min fairness) 
Trong trao đổi thông tin, khi phía phát truyền dữ liệu đến phía thu thì dữ liệu 
đầu tiên được lưu trong bộ đêm phía thu. Dữ liệu trong bộ đệm này sau khi được 
xử lý và chuyển lên các lớp phía trên thì sẽ được xóa đi, để dành bộ đệm cho các 
dữ liệu kế tiếp. 
Trên thực tế trao đổi thông tin trong mạng, có thể xảy ra tình trạng phía phát 
truyền dữ liệu với tốc độ cao hơn khả năng xử lý của phía thu, dẫn đến bộ đệm của 
phía thu sẽ đầy dần và bị tràn. Trong trường hợp này, phía thu không thể nhận 
thêm các gói dữ liệu từ phía phát dẫn đến việc phía phát phải thực hiện truyền lại 
dữ liệu, gây lãng phí băng thông trên đường truyền. 
Nhằm giảm thiểu việc phải truyền lại thông tin và mất gói do tràn hàng đợi, 
cần có cơ chế thực hiện kiểm soát và điều khiển lưu lượng thông tin đi đến một 
thiết bị/mạng. Chức năng này được thực hiện bởi kỹ thuật điều khiển luồng và 
kiểm soát tắc nghẽn. 
Một trong những vấn đề khó khăn nhất của thực hiện điều khiển luồng và 
kiểm soát tắc nghẽn là đảm báo tính công bằng cho các kết nối hoặc người dùng 
khi xảy ra tắc nghẽn. Khái niệm tính công bằng thể hiện ở chỗ các kết nối, người 
dùng được sử dụng tài nguyên mạng với cơ hội như nhau 
Việc sử dụng tài nguyên mạng hiệu quả nhất có thể trong khi vẫn có thể đảm 
bảo được tính công bằng cho các kết nối được thực hiện bởi cơ chế điều khiển 
luồng cực đại – cực tiểu (max–min flow control). Cơ chế này được xây dựng trên 
mô hình công bằng cực đại – cực tiểu (max-min fairness). 
Nguyên tắc hoạt động cơ bản của cơ chế điều khiển luồng cực đại – cực tiểu 
như sau: 
Nguyên tắc : 
 Sau khi người dùng với yêu cầu ít nhất về tài nguyên đó được đáp ứng công 
bằng, các tài nguyên còn lại được tiếp tục phân chia (một cách công bằng) cho 
những người dùng còn lại. Trong nhóm người dùng này, tài nguyên lại được phân 
chia sao cho người dùng có yêu cầu ít nhất được đáp ứng, và quá trình cứ tiếp tục 
đến hết. Nói một cách khác, việc cấp phát tài nguyên mạng cho một người dùng i 
không được làm ảnh hưởng đến tài nguyên đó cấp các ngườii dùng khác với yêu 
cầu ít hơn i. 
Thuật toán: 
1.Khởi tạo tất cả các kết nối với tốc độ = 0 
 Tăng tốc độ của tất cả các kết nối với một lượng nhỏ bằng nhau , lặp lại quá 
trình này cho đến khi tồn tại các liên kết có tổng băng thông đạt đến giá trị băng 
thông cực đại (Fa = Ca). Lúc này: 
Tất cả các kết nối chia sẻ liên kết này đều sử dụng băng thông bằng nhau 
Liên kết này là điểm tắc nghẽn đối với tất cả các kết nối sử dụng liên kết này 
Ngừng việc tăng băng thông cho các kết nối này vỡ các kết nối này đạt đến 
trạng thái cân bằng cực đại – cực tiểu 
2.Lặp lại quá trình tăng tốc độ cho các kết nối khác chưa đạt đến điểm tắc 
nghẽn cho đến khi lại tìm thấy các điểm tắc nghẽn ứng với các kết nối khác (lặp lại 
bước này) 
3.Thuật toán kết thúc khi tất cả các kết nối đều đó tìm được điểm tắc nghẽn 
k
an := số lượng đường kp P với ( ) 1p a  
1: ( ) /min
k
k k k
a a a
a A
r C F n
  
1
1
( )
( )
k k k
pk
p k k
p
r r p P
r
r p P
  
 
: ( ).k ka p p
a A
F a r
 
 k+1A : | 0ka aa C F   
 1 k+1: | ( ) 0, or all a Ak pP p a f    
: 1k k  
Nếu Pk là tập hợp rỗng thì dừng lại, nếu không thì quay lại bước 1. 
II. Thực hiện: 
1. Yêu cầu: 
Với các tham số: 
Đường nối L1 có dung lượng là C1= 1MB/s trễ lan truyền 100ms 
Đường nối L2 có dung lượng l à C2=0,6MB/s, trễ lan truyền 50ms 
Nút 1, 2, 3 là các hàng đợi đơn hoạt động theo nguyên tắc FIFO với độ lớn 
hàng đợi K=5 gói. 
Các nguồn Si phát gói với độ dài cố định 125byte,tuân theo phân bố Poisson. 
Băng thông đối đa tổng cộng mà các luồng được chiếm trên một kênh truyền 
vật lý là bằng 95% dung lượng kênh truyền => C1sd=95%*1MB/s=0.95MB/s 
 C2sd=95%*0.6MB/s=0.57MB/s 
S1, S2, S3 =? 
Tính toán: 
-Các đường liên kết (1,2),(2,3) 
-Các kết nối (S1,D1),(S2,D2),(S3,D3) 
-Pk là tập hợp các kết nối không đi qua liên kết bão hòa nào, tính tại lúc bắt đầu 
của bước k 
 -nka là số lượng kết nối trong Pk sử dụng liên kết a 
 Liên kết (1,2) nka =2 
 Liên kết (2,3) nka =2 
 - kr là phần băng thông tăng lên cho mỗi kết nối trong Pk tại bước thứ k 
Bước 1: k = 1, F01 = 0, F02 =0, r0p = 0, P1 =[(S1,D1),(S2,D2),(S3,D3)] và A1 = A 
kr =min((0.57-0)/2,(0.95-0)/2)= 0.285 MB/s 
sMBr /285.011  
sMBr /285.012  
sMBr /285.013  
Bước 2: k=2, 
1
1F =0.285+0.285=0.57 MB/s 
1
2F =0.285+0.285=0.57 MB/s 
2P =[(S1,D1),(S2,D2)] 
Liên kết (2,3) đã bão hòa do vậy các đặt giá trị 
S1 =0.285 MB/s 
S3 =0.285 MB/s 
Để liên kết (1,2) bão hòa tăng S2 lên giá trị 
S2=0.95-0.285=0.665 MB/s 
Như vậy ta đã tính được các tham số S1, S2, S3 theo nguyên lý max-min 
fairness 
2. Mô phỏng 
Tạo đối tượng mô phỏng: 
set ns [new Simulator] 
Tạo namfile lưu dữ liệu hệ thống khi mô phỏng 
set nf [open out.nam w] 
$ns namtrace-all $nf 
Tạo tracefile lưu dữ liệu để vẽ đồ thị băng thông 
set f0 [open S1_D1_Band.tr w] 
set f1 [open S2_D2_Band.tr w] 
set f2 [open S3_D3_Band.tr w] 
và đồ thị tốc độ mất gói 
set l0 [open S1_D1_Lost.tr w] 
set l1 [open S2_D2_Lost.tr w] 
set l2 [open S3_D3_Lost.tr w] 
Tạo 9 nút 
set s1 [$ns node] 
set d1 [$ns node] 
set s2 [$ns node] 
set d2 [$ns node] 
set s3 [$ns node] 
set d3 [$ns node] 
set n1 [$ns node] 
set n2 [$ns node] 
set n3 [$ns node] 
Tạo liên kết cho các nút với băng thông (MBits/s) và trễ truyền dẫn (ms): 
$ns duplex-link $s1 $n1 1Mb 10ms DropTail 
$ns duplex-link $n1 $n2 1Mb 100ms DropTail 
$ns duplex-link $n2 $n3 0.6Mb 50ms DropTail 
$ns duplex-link $n3 $d1 1Mb 10ms DropTail 
$ns duplex-link $n1 $s2 1Mb 10ms DropTail 
$ns duplex-link $n2 $d2 1Mb 10ms DropTail 
$ns duplex-link $n2 $s3 1Mb 10ms DropTail 
$ns duplex-link $n3 $d3 1Mb 10ms DropTail 
Thiết lập vị trí cho các nút như trên 
$ns duplex-link-op $s1 $n1 orient right 
$ns duplex-link-op $n1 $n2 orient right 
$ns duplex-link-op $n2 $n3 orient right 
$ns duplex-link-op $n3 $d1 orient right 
$ns duplex-link-op $n1 $s2 orient down 
$ns duplex-link-op $n2 $d2 orient down 
$ns duplex-link-op $n2 $s3 orient up 
$ns duplex-link-op $n3 $d3 orient up 
Thiết lập vị trí hàng đợi và kích thước hàng đợi 
$ns duplex-link-op $n2 $n1 queuePos 1.5 
$ns duplex-link-op $n3 $n2 queuePos 1.5 
$ns queue-limit $n1 $n2 5 
$ns queue-limit $n2 $n3 5 
Xây dựng Agent cho các nút s1, s2, s3, d1, d2, d3 
#Create a UDP agent and attach it to node s1 
set udp0 [new Agent/UDP] 
$udp0 set class_ 1 
$ns attach-agent $s1 $udp0 
#Create a UDP agent and attach it to node s2 
set udp1 [new Agent/UDP] 
$udp1 set class_ 2 
$ns attach-agent $s2 $udp1 
#Create a UDP agent and attach it to node s3 
set udp2 [new Agent/UDP] 
$udp2 set class_ 3 
$ns attach-agent $s3 $udp2 
#Create a Sink agent (a traffic sink) and attach it to node d1, d2, d3 
set sink0 [new Agent/LossMonitor] 
$ns attach-agent $d1 $sink0 
set sink1 [new Agent/LossMonitor] 
$ns attach-agent $d2 $sink1 
set sink2 [new Agent/LossMonitor] 
$ns attach-agent $d3 $sink2 
Liên kết các nguồn và đích tương ứng 
#Connect the traffic sources with the traffic sink 
$ns connect $udp0 $sink0 
$ns connect $udp1 $sink1 
$ns connect $udp2 $sink2 
Các gói truyền đi từ các nút s1, s2, s3 tuân theo phân bố Poisson được thiết lập 
bởi các hàm sendpacket: 
proc sendpacket0 {} { 
 global ns udp0 ArrivalTime1 pksize 
 set time [$ns now] 
 $ns at [expr $time + [$ArrivalTime1 value]] "sendpacket0" 
 $udp0 send $pksize 
} 
proc sendpacket1 {} { 
 global ns udp1 ArrivalTime2 pksize 
 set time [$ns now] 
 $ns at [expr $time + [$ArrivalTime2 value]] "sendpacket1" 
 $udp1 send $pksize 
} 
proc sendpacket2 {} { 
 global ns udp2 ArrivalTime1 pksize 
 set time [$ns now] 
 $ns at [expr $time + [$ArrivalTime1 value]] "sendpacket2" 
 $udp2 send $pksize 
} 
Với tốc độ phát gói của các nút được xác định bởi các biến sau, đơn vị gói/s: 
set lambda1 300.0 
set lambda2 500.0 
thời gian để phát đi một gói sẽ là: 
Set ArrivalTime1 [new RandomVariable/Exponential] 
$ArrivalTime1 set avg_ [expr 1/$lambda1] 
set ArrivalTime2 [new RandomVariable/Exponential] 
$ArrivalTime2 set avg_ [expr 1/$lambda2] 
kích thước mỗi gói (bytes) xác định bởi 
set pksize 125.0 
Các hàm sau lọc dữ liệu và lưu vào tracefile để vẽ đồ thị băng thông và đồ thị tốc 
độ mất gói: 
proc recordbw {} { 
 global sink0 sink1 sink2 f0 f1 f2 
 #Get an instance of the simulator 
 set ns [Simulator instance] 
 #Set the time after which the procedure should be called again 
set time 0.5 
 #How many bytes have been received by the traffic sinks? 
set bw0 [$sink0 set bytes_] 
set bw1 [$sink1 set bytes_] 
set bw2 [$sink2 set bytes_] 
 #Get the current time 
set now [$ns now] 
 #Calculate the bandwidth (in MBit/s) and write it to the files 
puts $f0 "$now [expr $bw0/$time*8/1000000]" 
puts $f1 "$now [expr $bw1/$time*8/1000000]" 
puts $f2 "$now [expr $bw2/$time*8/1000000]" 
 #Reset the bytes_ values on the traffic sinks 
$sink0 set bytes_ 0 
$sink1 set bytes_ 0 
$sink2 set bytes_ 0 
 #Re-schedule the procedure 
$ns at [expr $now+$time] "recordbw" 
} 
proc recordlost {} { 
 global sink0 sink1 sink2 l0 l1 l2 
 #Get an instance of the simulator 
 set ns [Simulator instance] 
 #Set the time after which the procedure should be called again 
set time 0.5 
 #How many packet have been lost? 
set lost0 [$sink0 set nlost_] 
set lost1 [$sink1 set nlost_] 
set lost2 [$sink2 set nlost_] 
 #Get the current time 
set now [$ns now] 
 #Calculate number of packet lost 
puts $l0 "$now [expr $lost0]" 
puts $l1 "$now [expr $lost1]" 
puts $l2 "$now [expr $lost2]" 
 #Reset the nlost_ values on the traffic sinks 
$sink0 set nlost_ 0 
$sink1 set nlost_ 0 
$sink2 set nlost_ 0 
 #Re-schedule the procedure 
$ns at [expr $now+$time] "recordlost" 
} 
Hàm finish dùng để kết thúc chương trình và vẽ đồ thị: 
proc finish {} { 
 global ns nf f0 f1 f2 
 $ns flush-trace 
 #Close the output files 
 close $f0 
 close $f1 
 close $f2 
 close $nf 
 #Execute nam on the trace file 
 exec nam out.nam & 
 #Call xgraph to display the results 
 exec xgraph S1_D1_Band.tr S2_D2_Band.tr S3_D3_Band.tr -geometry 800x400 
-t "BandWidth" -x "s" -y "Mbit/s" & 
 exec xgraph S1_D1_Lost.tr B2_D2_Lost.tr S3_D3_Lost.tr -geometry 800x400 -t 
"LostPacket" -x "s" -y "Packet" & 
 exit 0 
} 
Thực hiện chạy mô phỏng trong 100s 
#Schedule events for the CBR agents 
$ns at 0.0 "recordbw" 
$ns at 0.0 "recordlost" 
$ns at 0.5 "sendpacket0" 
$ns at 0.5 "sendpacket1" 
$ns at 0.5 "sendpacket2" 
#Call the finish procedure 
$ns at 100 "finish" 
#Run the simulation 
$ns run 
3. Kết quả mô phỏng: 
Kết quả mô phỏng trên nam 
Đồ thị băng thông của các luồng 
Tốc độ mất gói 
            Các file đính kèm theo tài liệu này:
 ns2_8792.pdf ns2_8792.pdf