Thu thập và vẽ đồ thị các số liệu trễ xếp hàng của các gói tại các nút mạng.. Trong một phiên chạy mô phỏng, giả thiết cứ sau 30s, băng thông của mỗi liên kết lại giảm đi 25%, hãy thu th
Trang 1
-******* -Đề bài: Mô phỏng mạng thông tin cho trước bằng phần mềm
chuyên dùng NS-2
Giảng viên hướng dẫn: TS Phạm Văn Tiến
Sinh viên thực hiện:
Cù Xuân Toản 20092786 Phạm Xuân Trung 20092890 Phạm Khánh Thiện 20092580 Đặng Văn Tình 20109582
Trang 2NỘI DUNG……… Trang
Đề bài……… 3
Công cụ mô phỏng……… 4
Phân chia công việc……… 4
Bài giải……….5
Câu 1 Xây dựng kịch bản mô phỏng trong thời gian không ngắn hơn 5’……….5
Câu 2 Thu thập số liệu và vẽ đồ thị trễ xếp hàng tại từng nút mạng……….9
Câu 3 Thu thập, vẽ đồ thị khả thông mỗi luồng sau khi giả thiết cứ sau 30s băng thông tất cả các liên kết giảm 25% 13
Câu 4 Thay đổi kích thước gói và làm lại ý 2 Nhận xét……… …15
Phụ lục 1 Đồ thị các kết quả……….16
Phụ lục 2 Codes toàn bài……… 24
Trang 3Đề bài:
Bài tập 3:
Cho mạng thông tin có cấu hình như Hình 3 Nút s gắn với hai nguồn lưu lượng tcp1
và tcp2 gửi các gói đến nút d, dựa trên giao thức truyền TCP Cả hai nguồn gửi ra các gói có chiều dài cố định là 1300byte Nguồn tcp1 phát ra các gói đều đặn theo thời gian với tốc độ 600 gói/s Số lượng gói phát ra từ nguồn tcp2 tuân theo phân bố Poisson, tốc độ 200 gói/s.
Hình 3
1 Viết kịch bản và chạy mô phỏng hệ thống thông tin nói trên trong khoảng thời
gian không ngắn hơn 5 phút
2 Thu thập và vẽ đồ thị các số liệu trễ xếp hàng của các gói tại các nút mạng
3 Trong một phiên chạy mô phỏng, giả thiết cứ sau 30s, băng thông của mỗi liên
kết lại giảm đi 25%, hãy thu thập số liệu và vẽ đồ thị biểu diễn khả thông của mỗi luồng trong mỗi khoảng thời gian đó
4 Thay đổi kích thước gói rồi làm lại các thao tác trong mục 2 Nhận xét kết quả thu
được.
Trang 4Công cụ mô phỏng:
Phần mềm NS-2 (network Simulator v2) Đây là phần mềm mã nguồn mở, mô phỏng các sự kiện rời rạc nhằm mục đích nghiên cứu mạng, nó hỗ trợ các giao thức mạng như: TCP, UDP,… hoạt động của những tài nguyên mạng như FTP, Telnet, Web, CRB và VBR, các cơ chế quản lý hàng đợi router như Drop Tail, RED và CBQ các thuật toán định tuyến… NS2 được viết trên ngôn ngữ C++ và Otcl.
Nhóm đã cài đặt NS2 bản 2.35 all-in-one trên hệ điều hành Ubuntu 12.04 Cách cài đặt
và download phần mềm có đầy đủ tại: http://forum.cntt2a2.com/showthread.php? tid=28&pid=149#pid149
II Phạm Xuân Trung:
Tìm hiểu lí thuyết, viết thuật toán thu thập số liệu và vẽ đồ thị số liệu trễ tại từng nút mạng Tổng hợp codes của các thành viên, thu thập kết quả và viết báo cáo chung.
III Đặng Văn Tình, Lê Đình Trung:
Tìm hiểu lý thuyết, cách dùng NS-2, viết thuật toán xử lý sự kiện sau 30s băng thông các liên kết giảm, viết thủ tục thu thập số liệu khả thông từng luồng.
IV Phạm Khánh thiện, Lê Văn Tuấn:
Đọc lý thuyết, cách dùng NS-2, viết code, thuật toán thu thập số liệu trễ các node mạng, thay đổi số liệu là số gói, đưa ra nhận xét.
Trang 5Bài giải:
Câu 1:
Thực hiện câu 1 đơn giản là ta làm quen với NS-2 và công cụ NAM (Network Animator).
Đó là việc tạo các node mạng, nguồn theo giao thức TCP, tạo các liên kết, thiết lập các băng thông, thời gian mô phỏng 5 phút.
Giả Thiết :
- Độ dài hàng đợi : K=50.
- Trễ lan truyền trên các liên kết là 10ns
- Chiều dài cố định của gói la 1300 bytes
- Tcp1 phát ra gói đều đặn tốc độ 600 gói/s
- Tcp2 tuân theo phân bố Poisson tốc độ 200 gói/s
Sau khi tạo các node chúng ta tạo liên kết giữa các node với nhau Chúng ta có kết nối giữa nguồn phát tin với các node gần nhất và giữa đích cuối và node đích d là kết nối 100Base-T Ethernet tức là 100Mbps , các liên kết nối các node còn lại có băng thông là lần lượt là 20Kbps, 40Kbps, 2Mbps, 20Kbps, 15Kbps, 1Mbps, độ trễ truyền lan giữa hai node là 10ns Chúng ta có thể sử dụng các chế độ hàng đợi khác nhau:
+ Với hàng đợi DropTail là chế độ ngắt đuôi.Tức là khi hàng đợi đầy, các gói đến sau sẽ
bị Drop.
+ Hàng đợi SFQ(Stochastic Fair Queue).Hàng đợi này cũng thực hiện quá trình ngắt đuôi như DropTail.Tuy nhiên nó cho phép ngắt bỏ công bằng tức số lượng các gói bị ngắt bỏ thuộc mỗi luồng là giống nhau.
+ Hàng đợi RED( Random Early Discard) – Loại trừ ngẫu nhiên sớm.Tức gói nào đến trước thì nó sẽ loại trừ.
+ Hàng đợi CBQ(Class Based Queue) – Hàng đợi theo lớp
Ở đây nhóm sử dụng hàng đợi DropTail.
Bộ giao thức TCP/IP (Internet Protocol Suite hoặc IP suite hoặc TCP/IP protocol suite
- Bộ giao thức liên mạng) Đó là 2 giao thức đầu tiên được định nghĩa Đó là bộ các giao thức truyền thông cài đặt chồng giao thức mà Internet và hầu hết các mạng máy tính thương mại đang chạy trên đó Bộ giao thức này được đặt tên theo hai giao thức
chính của nó là TCP (Giao thức Điều khiển Giao vận) và IP (Giao thức Liên mạng).
Như nhiều bộ giao thức khác, bộ giao thức TCP/IP có thể được coi là một tập hợp các tầng, mỗi tầng giải quyết một tập các vấn đề có liên quan đến việc truyền dữ liệu, và cung cấp cho các giao thức tầng cấp trên một dịch vụ được định nghĩa rõ ràng dựa trên việc sử dụng các dịch vụ của các tầng thấp hơn Về mặt lôgic, các tầng trên gần với người dùng hơn và làm việc với dữ liệu trừu tượng hơn, chúng dựa vào các giao thức tầng cấp dưới để biến đổi dữ liệu thành các dạng mà cuối cùng có thể được truyền đi một cách vật lý.
Tổng quan giao thức TCP/IP @wikipedia.com
Nguồn: http://vi.wikipedia.org/wiki/TCP/IP
Trang 6# Tạo đối tượng mô phỏng
set ns [new Simulator]
# Tạo màu cho luồng dữ liệu
$ns color 1 green
$ns color 2 red
# Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf
# Open the trace files
set tf [open out.tr w]
Trang 7# Tạo các liên kết giữa các nodes và với nguồn s1, s2
$ns duplex-link $s1 $n1 [expr $band1]Mb 10ns DropTail
$ns duplex-link $s2 $n1 [expr $band2]Mb 10ns DropTail
$ns duplex-link $n1 $n2 [expr $band3]Kb 10ns DropTail
$ns duplex-link $n1 $n3 [expr $band4]Kb 10ns DropTail
$ns duplex-link $n1 $n4 [expr $band5]Mb 10ns DropTail
$ns duplex-link $n2 $n4 [expr $band6]Kb 10ns DropTail
$ns duplex-link $n2 $n3 [expr $band7]Kb 10ns DropTail
$ns duplex-link $n4 $n3 [expr $band8]Mb 10ns DropTail
$ns duplex-link $n3 $d [expr $band9]Mb 10ns DropTail
# Sắp sếp các nodes & nguồn
$ns duplex-link-op $s1 $n1 orient right
$ns duplex-link-op $s2 $n1 orient right
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n1 $n3 orient right
$ns duplex-link-op $n1 $n4 orient right-down
$ns duplex-link-op $n2 $n4 orient down
$ns duplex-link-op $n2 $n3 orient right-down
$ns duplex-link-op $n4 $n3 orient right-up
Trang 8$ns duplex-link-op $n3 $d orient right
# Thiết lập kích thước hàng đợi bằng qsize = 50
$ns queue-limit $s1 $n1 [expr $qsize]
$ns queue-limit $s2 $n1 [expr $qsize]
$ns queue-limit $n1 $n2 [expr $qsize]
$ns queue-limit $n1 $n3 [expr $qsize]
$ns queue-limit $n1 $n4 [expr $qsize]
$ns queue-limit $n2 $n4 [expr $qsize]
$ns queue-limit $n2 $n3 [expr $qsize]
$ns queue-limit $n4 $n3 [expr $qsize]
$ns queue-limit $n3 $d [expr $qsize]
# Định giá (cost) cho các liên kết
# Tạo nguồn tcp1 và tcp2 nối với đích
set tcp1 [new Agent/TCP]
# Set Sink agents
set sink1 [new Agent/TCPSink]
$cbr set PacketSize_ [expr $pksize]
$cbr set rate_ [expr $pksize * $lambda1] #0.78Mb/s
$cbr set fid_ 1
$cbr attach-agent $tcp1
# Tạo nguồn dạng poission và nối tới tcp2
set pois [new Application/Traffic/Exponential]
$pois attach-agent $tcp2
$pois set packetSize_ [expr $pksize]
Trang 9$pois set burst_time_ 0
$pois set idle_time_ 500ms
$pois set rate_ [expr $pksize * $lambda2] #0.26Mb/s
$pois set fid_ 2
code câu hỏi 1 hoàn
thành Chú ý: Ở đây tạo nguồn TCP1 và TCP2 theo giao thức TCP cùng các Agent tương ứng Tiến trình CBR (Constant Bit Rate - Tốc độ bit cố định) được tạo và gắn cho nguồn TCP1.
Tiến trình POS (Poisson) được tạo và gắn cho nguồn TCP2.
Các kết nối giữa các nodes phải là liên kết 2 chiều do sử dụng giao thức TCP (Khác với UDP sử dụng liên kết 1 chiều).
Câu 2:
Yêu cầu ở đây là thu thập số liệu và vẽ đồ thị thể hiện trễ xếp hàng tại các nút mạng Để
thu thập được chính xác các thông số liên quan ta sẽ sử dụng dữ liệu của file trace được
xuất ra trong quá trình mô phỏng Ở đây, chương trình sẽ được thiết lập kịch bản xuất ra
file trace có tên là out.tr File sẽ được tạo ra sau lệnh:
set tf [open out.tr w]
$ns trace-all $tf
File out.tr được xuất ra sẽ có nội dung như sau:
Gồm tất cả 12 cột:
Trang 10Trong đó:
· event : thao tác được thực hiện trong mô phỏng
· time : thời gian xuất hiện sự kiện
· from node : là node đầu vào gói tin
· src addr : địa chỉ node nguồn
· dst addr : địa chỉ node đích
- 0.172323 4 6 tcp 40 - 1 0.0 6.0 0 0
r 0.182326 4 6 tcp 40 - 1 0.0 6.0 0 0+ 0.182326 6 4 ack 40 - 1 6.0 0.0 0 1
- 0.182326 6 4 ack 40 - 1 6.0 0.0 0 1
r 0.19233 6 4 ack 40 - 1 6.0 0.0 0 1+ 0.19233 4 2 ack 40 - 1 6.0 0.0 0 1
- 0.19233 4 2 ack 40 - 1 6.0 0.0 0 1
r 0.21033 4 2 ack 40 - 1 6.0 0.0 0 1+ 0.21033 2 0 ack 40 - 1 6.0 0.0 0 1
- 0.21033 2 0 ack 40 - 1 6.0 0.0 0 1
r 0.220333 2 0 ack 40 - 1 6.0 0.0 0 1+ 0.220333 0 2 tcp 1040 - 1 0.0 6.0 1 2
- 0.220333 0 2 tcp 1040 - 1 0.0 6.0 1 2
Trang 11Các giá trị của cột event (cột $1) Thống kê cột đầu tiên (cột chỉ ra hoạt động của hàng đợi) có: Thao tác thêm vào hàng đợi (‘+’), thao tác lấy ra khỏi hàng đợi (‘-’), sự kiện nhận gói tin (‘r’) – tức là được phục vụ và sự kiện huỷ packet (‘d’)
Ta tạo ra các file AWK dùng ngôn ngữ AWK để lấy dữ liệu từ file trace này lưu vào một
file khác dạng file.tr Kiến thức về ngôn ngữ này được tham khảo trên wikipedia, link tham khảo phần cuối code bên dưới Các file awk đặt cùng thư mục với file chính tcl
Ở đây xét trễ tại node 1 ta tạo file delay_N1.awk để xuất các thông tin cần thiết từ cột $1
và cột $4 của file trace out.tr Thuật toán như sau:
Thời gian trễ tại từng node là Tdelay = Treceived - Tsend Sau đó các số liệu sẽ được lưu vào một mảng
Nhiệm vụ của file delay_N1.awk là sẽ lọc các thời gian ứng với các sự kiện nhận gói và
gửi gói đi Nội dung như sau:
Delay_N1.awk thu thập số liệu trễ node 1
của ta là out.tr Khi gói tin được gửi đi ($1 == “+”) và điểm gửi đi là nút 1 ($4 == “2”) ta
sẽ lưu thời điểm gửi($2) vào mảng tggui Khi gói tin đến đích ($1 == “r”) và điểm đến là nút 1 ($4 == “1”) ta sẽ lưu thời điểm nhận ($2) vào mảng tgnhan Thời gian truyền của chúng ta tại node 1 (chính là trễ truyền lan) chính bằng thời điểm nhận tin trừ đi thời điểm gửi tin.
Tương tự ta có các file thu thập số liệu cho các trễ node 2, 3, 4
Trang 12Delay_N2.awk thu thập số liệu trễ node 2
Ta viết tương tự cho node 3 và node 4 (Ở đây em chỉ đưa ra tiêu biểu cho node 1 và 2)
Delay_N3.awk thu thập số liệu trễ node 3
Delay_N4.awk thu thập số liệu trễ node 4
Sau khi thực hiện viết code các file.awk ta sẽ dùng câu lệnh sau trong thủ tục finish{} của hàm chính:
exec awk -f delay_N1.awk out.tr > delayn1.tr
exec awk -f delay_N2.awk out.tr > delayn2.tr
exec awk -f delay_N3.awk out.tr > delayn3.tr
exec awk -f delay_N4.awk out.tr > delayn4.tr
Các câu lệnh này sẽ thực thi xuất dữ liệu từ file trace out.tr ra 2 cột là thời gian mô phỏng
và độ trễ tại từng thời điểm Các giá trị này được lưu tương ứng vào các file
delayn1.tr, delayn2.tr, delayn3.tr, delayn4.tr Trước thủ tục finish{}
đó ta dùng các câu lệnh sau để open lấy dữ liệu vẽ đồ thị:
set delayn1 [open delayn1.tr w]
set delayn2 [open delayn2.tr w]
set delayn3 [open delayn3.tr w]
set delayn4 [open delayn4.tr w]
Và để vẽ được đồ thị ta dùng chức năng Xgraph của NS2
exec xgraph delayn1.tr -geometry 800x400 -t "Tre tai node 1"\
Trang 13Trước hết là ta viết thủ tục xử lý giả thiết: “Sau 30s thì băng thông tất cả các liên kết giảm đi 25%” Tức là lúc này băng thông chỉ còn lại 75% so với trước đó.
Thủ tục này như sau:
# Thủ tục bw_reduce xử lý sau 30s băng thông tất cả lien kết giảm25%
proc bw_reduce {} {
global ns s1 s2 n1 n2 n3 n4 d bw band1 band2 band3 band4 band5band6 band7 band8 band9 dem
set time 30
set dem [expr $dem+1]
set now [$ns now]
$ns rtmodel-at [expr $time+$now] down $s1 $n1
$ns rtmodel-at [expr $time+$now] down $s2 $n1
$ns rtmodel-at [expr $time+$now] down $n1 $n2
$ns rtmodel-at [expr $time+$now] down $n1 $n3
$ns rtmodel-at [expr $time+$now] down $n1 $n4
$ns rtmodel-at [expr $time+$now] down $n2 $n4
$ns rtmodel-at [expr $time+$now] down $n2 $n3
$ns rtmodel-at [expr $time+$now] down $n4 $n3
$ns rtmodel-at [expr $time+$now] down $n3 $d
$ns duplex-link $s1 $n1 [expr $band1]Mb 10ns DropTail
$ns duplex-link $s2 $n1 [expr $band2]Mb 10ns DropTail
$ns duplex-link $n1 $n2 [expr $band3]Kb 10ns DropTail
$ns duplex-link $n1 $n3 [expr $band4]Kb 10ns DropTail
$ns duplex-link $n1 $n4 [expr $band5]Mb 10ns DropTail
$ns duplex-link $n2 $n4 [expr $band6]Kb 10ns DropTail
$ns duplex-link $n2 $n3 [expr $band7]Kb 10ns DropTail
$ns duplex-link $n4 $n3 [expr $band8]Mb 10ns DropTail
$ns duplex-link $n3 $d [expr $band9]Mb 10ns DropTail
set band1 [expr $band1*0.75]
set band2 [expr $band2*0.75]
set band3 [expr $band3*0.75]
set band4 [expr $band4*0.75]
set band5 [expr $band5*0.75]
Trang 14set band6 [expr $band6*0.75]
set band7 [expr $band7*0.75]
set band8 [expr $band8*0.75]
set band9 [expr $band9*0.75]
puts "Bang thong sau khi giam lan thu $dem:"
puts " band1 = $band1"
puts " band2 = $band2"
puts " band3 = $band3"
puts " band4 = $band4"
puts " band5 = $band5"
puts " band6 = $band6"
puts " band7 = $band7"
puts " band8 = $band8"
puts " band9 = $band9"
puts "\n"
# Sau 30s băng thông mọi liên kết giảm 25%
$ns at [expr $time+$now] "bw_reduce"
# Get an instance simulator
set ns [Simulator instance ]
# Set the time after which the pro can be called again - Chu kìrecord
set time 0.2
# Count how many bytes which S1 and S2 have received and
retransmited
set b_tcp1_sent [$tcp1 set ndatabytes_ ]
set b_tcp2_sent [$tcp2 set ndatabytes_ ]
set b_tcp1_retrans [$tcp1 set nrexmitbytes_]
set b_tcp2_retrans [$tcp2 set nrexmitbytes_]
set bw1 [expr $b_tcp1_sent - $b_tcp1_retrans]
set bw2 [expr $b_tcp2_sent - $b_tcp2_retrans]
set now [$ns now]
# Calculate bandwith of tcp1-d flow and tcp2-d flow (Mbit/s) after that write to tcp1 ,tcp2
puts $Tcp1 "$now [expr $bw1/$time*8/1000000] "
puts $Tcp2 "$now [expr $bw2/$time*8/1000000] "
# After calculate , need reset the parameter byte_ to zero
Trang 15$ns at [expr $now+$time] "recordbw"
}
Trước thủ tục finish{} ta cần tạo file trace để lấy dữ liệu vẽ đồ thị:
set Tcp1 [open Tcp1.tr w]
set Tcp2 [open Tcp2.tr w]
Tiếp theo là lệnh thực hiện vẽ đồ thị khả thông:
exec xgraph Tcp1.tr -geometry 800x400 -t "Kha thong luong
Thay đổi kích thước gói, làm lại các thao tác câu 2 và đưa ra nhận xét.
Khi tăng kích thước gói lên ta nhận thấy sự thay đổi diễn ra trên các đồ thị đã thu thập được nhưng vì dung lượng phát ra của các nguồn khá lớn để xảy ra hiện tượng thiếu nguyên nên nhóm em đã lựa chọn cách giảm số package của hàng đợi để xảy ra hiện tượng thiếu nguyên, lúc này đồ thị trễ tại 1 số node ko còn ổn định.
Và ở đây nhóm em chọn giảm số package đi 5 lần, tức là từ 50 về 10 và tăng kích thước gói lên 100 lần từ 1300 lên 130000 Nhận xét chi tiết có sau phân hình ảnh các đồ thị.
Trang 16Phụ lục 1 Đồ thị các kết quả
1 Kịch bản mô phỏng
2 Trễ tại node 1
2.1 Trễ node 1 sau 300s (5 phút)