Thursday, November 22, 2012

Bài 1. Cách tạo và xây dựng một topo mạng trong NS2

Chủ đề: "Mô phỏng mạng bằng công cụ NS2"

     Do vừa phải làm bài tập lớn về mô phỏng một hệ thống mạng bằng công cụ mô phỏng NS2 xong. Nên mình viết bài này để chia sẻ kinh nghiệm của mình sau một thời gian tìm hiểu để những bạn nào muốn tìm hiểu về công cụ NS2 trong mô phỏng các hệ thống mạng đơn giản có thể dễ dàng nắm bắt được cách thức để xây dựng, mô phỏng cũng như tính toán một mạng hàng đợi đơn giản!

    Trước tiên mình có sơ đồ mạng với các thông số mạng như sau:

Trong đó sơ đồ mạng có 5 Router ( Ri, i=1->5)
Có 3 luồng dữ liệu, S1, S2, S3 truyền đi với số lượng gói phát ra trên mỗi luồng tuân theo phân bố Poisson, 3 đích nhận dữ liệu D1, D2, D3.
Giả thiết định tuyến:
          S1 -> R1 -> R2 -> R3 -> D1
          S1  -> R1 -> R2 -> R4 -> R5 -> D2
          S2 -> R1 -> R2 -> R4 -> R5 -> D3
          S3 -> R1 -> R2 -> R3 -> D1
Ba nguồn dữ liệu Si phát ra các gói với tốc độ tuân theo phân bố Poisson với tham số lamda =100 (gói/s) trạm phục vụ các gói với tốc độ cố định  tải  =0.8
Trễ truyền lan trên các link là 10ms
    Yêu cầu:
           1.Dựng kịch bản mô phỏng hệ thống thông tin trên trong thời gian mô phỏng 140s
          2.Thu thập vẽ đồ thị số liệu chiều dài hàng đợi, tính chiều dài hàng đợi trung bình trên các link.
          3.Thu thập vẽ đồ thị số liệu, tính toán trễ toàn đường truyền, bỏ qua thời gian gói từ Si vào R1
Trong trường hợp không có lỗi đường truyền.
Trong phạm vi bài này tôi sẽ hướng dẫn các bạn hoàn thành yêu cầu 1: Dựng kịch bản mô phỏng hệ thống. Giao thức sử dụng ở đây là TCP các bạn phân biệt với mạng gói UDP.
Các bạn thực hiện theo đoạn code sau đây(Mỗi đoạn code sẽ được hướng dẫn cụ thể):
# Tao mot doi tuong mo phong
set ns [ new Simulator]
#Tao cac file Trace
#File out.tr bám vết các sự kiện diễn ra trong hệ thống mạng
set tracefile [open out.tr w]
$ns trace-all $tracefile
#Tao cac file Name trace để vẽ trên Nam
set namfile [open out.nam w]
$ns namtrace-all $namfile

#Kich thuoc hang doi:20
#Mặc định kích thước hàng đợi là 50
set queuesize 20

# Tao 1 co bao hieu viec gui du lieu:
# Co bao hieu ghi du lieu luong 1
set flag1  0
# Co bao hieu ghi du lieu luong 2
set flag2  0
# Co bao hieu ghi du lieu luong 3
set flag3  0

#--------------------Khai bao thu tuc "finish"-----------------------
proc finish {} {
   global ns tracefile namfile
   $ns flush-trace
# Đóng các file bám vết trên lại.
            close $tracefile
            close $namfile      
#Gọi thủ tục để vẽ file Nam
            exec nam out.nam &

   exit 0               
}
#----------------Tao ra topo mang------------------------------------

#Mau sac cac luong thong tin
$ns color 1 Red
$ns color 2 Green
$ns color 3 Blue

#Tao ra cac node nguon va node dich
#Nguon s1
set s1 [$ns node]
$s1 color Red
$s1 shape box
#Nguon s2
set s2 [$ns node]
$s2 color Red
$s2 shape box
#Nguon s3
set s3 [$ns node]
$s3 color Red
$s3 shape box
#Dich d1
set d1 [$ns node]
$d1 color Black
$d1 shape hexagon
#Dich d2
set d2 [$ns node]
$d2 color Black
$d2 shape hexagon
#Dich d3
set d3 [$ns node]
$d3 color Black
$d3 shape hexagon

#Tao cac Router mang Ri
set r1 [$ns node]
$r1 color blue
set r2 [$ns node]
$r2 color blue
set r3 [$ns node]
$r3 color blue
set r4 [$ns node]
$r4 color blue
set r5 [$ns node]
$r5 color blue

#Thiet lap lien ket giua cac node mang
$ns duplex-link $s1 $r1 100Mb 10ms DropTail
$ns duplex-link $s2 $r1 100Mb 10ms DropTail
$ns duplex-link $s3 $r1 100Mb 10ms DropTail
$ns duplex-link $r1 $r2 6Mb 10ms DropTail
$ns duplex-link $r2 $r3 7Mb 10ms DropTail
$ns duplex-link $r2 $r4 4Mb 10ms DropTail
$ns duplex-link $r4 $r5 4Mb 10ms DropTail
$ns duplex-link $r3 $d1 27Mb 10ms DropTail
$ns duplex-link $r5 $d2 15Mb 10ms DropTail
$ns duplex-link $r5 $d3 20Mb 10ms DropTail
#Truong hop khac co the su dung hang doi SFQ

#Sap xep topo mang(dung cho hien thi NAM)
$ns duplex-link-op $s1 $r1 orient right-down     
$ns duplex-link-op $s2 $r1 orient right
$ns duplex-link-op $s3 $r1 orient right-up     
$ns duplex-link-op $r1 $r2 orient right
$ns duplex-link-op $r2 $r4 orient down
$ns duplex-link-op $r4 $r5 orient right
$ns duplex-link-op $r2 $r3 orient right    
$ns duplex-link-op $r3 $d1 orient right
$ns duplex-link-op $r5 $d2 orient right-up
$ns duplex-link-op $r5 $d3 orient right-down

#Kich thuoc hang doi
$ns queue-limit $r1 $r2 $queuesize
$ns queue-limit $r2 $r3 $queuesize
$ns queue-limit $r2 $r4 $queuesize
$ns queue-limit $r4 $r5 $queuesize

#Quan li hang doi
$ns duplex-link-op $r1 $r2 queuePos 0.5
$ns duplex-link-op $r2 $r3 queuePos 0.5
$ns duplex-link-op $r2 $r4 queuePos 0.5
$ns duplex-link-op $r4 $r5 queuePos 0.5

#-----------Tao nguon TCP1 cho node s1 va ket noi voi dich d1 & d2------

#Nguon TCP1
set tcp1 [new Agent/TCP]
$ns attach-agent $s1 $tcp1
$tcp1 set class_ 1
$tcp1 set fid_ 1
#Dich d1-sink1
set sink1 [new Agent/TCPSink]
$ns attach-agent $d1 $sink1
$ns connect $tcp1 $sink1
#Dich d2-sink2
set sink2 [new Agent/TCPSink]
$ns attach-agent $d2 $sink2
$ns connect $tcp1 $sink2

set tcp2 [new Agent/TCP]
$ns attach-agent $s2 $tcp2
$tcp2 set class_ 2
$tcp2 set fid_ 2
#Dich d3-sink3
set sink3 [new Agent/TCPSink]
$ns attach-agent $d3 $sink3
$ns connect $tcp2 $sink3

#-------------Tao nguon TCP3 cho node s3 ket noi voi dich d1-------------

#Nguon s3-TCP3
set tcp3 [new Agent/TCP]
$ns attach-agent $s3 $tcp3
$tcp3 set class_ 3
$tcp3 set fid_ 3
#Dich d1-sink1
$ns connect $tcp3 $sink1

#Lap lich cac su kien mo phong

$ns at 0.0 "$s1 label \"S1\""
$ns at 0.0 "$s2 label \"S2\""
$ns at 0.0 "$s3 label \"S3\""
$ns at 0.0 "$r1 label \"R1\""
$ns at 0.0 "$r2 label \"R2\""
$ns at 0.0 "$r3 label \"R3\""
$ns at 0.0 "$r4 label \"R4\""
$ns at 0.0 "$r5 label \"R5\""
$ns at 0.0 "$d1 label \"D1\""
$ns at 0.0 "$d2 label \"D2\""
$ns at 0.0 "$d3 label \"D3\""

# Thiet lap thoi gian mo phong
$ns at 140.0      " finish "
#Chay
$ns run
#Ket thuc
#Tất cả đoạn code trên các bạn lưu vào 1 file có đuôi .tcl: ở đây mình lưu thành file BTL.tcl

Sau đó bạn chạy file này bằng cách dẫn đường dẫn đến file chứa thư mục các bạn vừa tạo rồi sau đó dùng câu lệnh: ns BTL.tcl
Sau khi chạy bạn sẽ nhận được kết quả là một hình ảnh mô phỏng trên NAM như sau:


Tài liệu tham khảo tiếng Việt về mô phỏng trong NS2:
 -> Tài liệu 1: Tải về 
 -> Tài liệu 2: Tải về

Bài 2: Chạy mô phỏng truyền dữ liệu trong NS2
 -> Download file chạy .tcl và file .awk của Project này:
-> Download file .awk: Tải về
-> Download file .tcl: Tải về

Chú ý: Để máy tính hoạt động trơn tru và được bảo dưỡng tự động thường xuyên, các bạn nên cài một số phần mềm chăm sóc hệ thống. Mình đã và đang sử dụng phần mềm chăm sóc hệ thống Glary Utilities Pro và thấy rất tốt, các bạn có thể Download và cài đặt bản full có kèm theo Key (serial) đầy đủ ( đã test) rất đơn giản tại đây: Tải về 
- Để bảo vệ máy tính tốt hơn chống lại các phần mềm gián điệp, virus độc hại mà không ngốn quá nhiều tài nguyên máy tính ngay cả ở chế độ hoạt động và chế độ chờ, mình khuyến nghị các bạn cài đặt và sử dụng phần mềm diệt Virus Avast internet security( Kèm theo key/Serial đã test): Tại đây

19 comments:

  1. Em chào Anh. Em hiện là SV ngành CNTT. Em đang làm tiểu luận về đánh giá hiệu năng mạng. Em đang tìm code của giao thức SFED, PFED, FED để mô phỏng trên NS2. Anh có thể hướng dẫn em địa chỉ để tìm kiếm các code của các giao thức này và cho em tài liệu hướng dẫn để em thêm các giao thức này vào NS2. Em tên Thế Phương ở Bến Tre,email của em: thephuongvn0483@yahoo.com.vn. Được sự giúp đỡ của anh em thành thật biết ơn!

    ReplyDelete
    Replies
    1. Mình không tìm hiểu về lĩnh vực của bạn nên không thể giúp bạn được, có gì bạn google search nhé.
      Chúc vui!

      Delete
  2. Em chào anh, anh cho e hỏi là e tạo trước 1 file.tcl sau đó viết đoạn code trên vào có đúng k ạ nhưng sau khi viết xong thì lại có thêm 2 file .nam và .tr. Em chạy nhưng cứ báo thiếu file .nam là thế nào ạ. Em mới tìm hiểu về NS2 nên mong a chỉ giúp e với ạ, Thanks a nhìu!

    ReplyDelete
    Replies
    1. Bạn chạy đã xuất hiện file .nam rồi đúng không. Bạn thử vào trang này copy code vào file.tcl của bạn và chạy thử xem sao, nếu có vấn đề thì mình sẽ hỗ trợ bạn sau: http://khoanhkhaccuocsongviet.blogspot.com/2012/12/bai-5-file-btltcl-cho-mo-hinh-trong-bai.html

      Delete
  3. anh oi! cho em hoi, em hoc k55 a! :-D.
    ki nay em hoc mon co so truyen so lieu lop thay Hung, thay cung giao bai tap lon tuong tu nhu vay nhung em chua hieu la.
    Tinh :
    Chieu dai hang doi trung binh tai Ri la tinh N hay Nq
    Thoi gian doi trung binh tai Ri la tinh T hay Tq
    thanks anh nhieu :-)

    ReplyDelete
    Replies
    1. Em cũng học thầy hưng k58,A có kinh nghiệm chỉ giùm e ạ, bài tập lớn thầy hỏi nhiều k a :)

      Delete
  4. các bạn cho mình hỏi là tại sao khi mình viết code lưu ở định dạng tenfile.tcl rồi ở lưu ngoài window, nhưng khi copy dán đoạn code vào trong ubutun ko được hả các bạn , hay là 2 hệ điều hành này ko cho phép lẫn nhau . ctrl + c ko được

    ReplyDelete
  5. minh cai ns2 xong test thanh cong n khi chay thu file mcast.tcl bi bao loi. ban xem sua giup minh voi
    hoalee@hoalee-desktop:~/ns-allinone-2.35/ns-2.35/tcl/ex$ ns mcast.tcl
    running nam...
    hoalee@hoalee-desktop:~/ns-allinone-2.35/ns-2.35/tcl/ex$ Can't find a usable init.tcl in the following directories:
    /home/hoalee/ns-allinone-2.35/tcl8.5.10/library:/usr/lib /root/ns-allinone-2.35/lib/tcl8.5 ./lib/tcl8.5 ./lib/tcl8.5 ./library ./library ./tcl8.5.10/library ./tcl8.5.10/library



    This probably means that Tcl wasn't installed properly.

    ReplyDelete
  6. Mình đang học môn này thầy cho bài tập mà mình chưa hình dung bài tập này làm thế nào, bạn có thể huớng dẫn mình đuợc không ạ, do mình học CNTT từ xa của Học viện bưu chính viễn thông !
    Bài tập thực hành NS-2

    1. Tìm hiểu về ngôn ngữ OtcL thông qua (Otcl: The User Language) http://nile.wpi.edu/NS/
    2. Đọc hiểu và chạy ví dụ mô phỏng đơn giản (Simple Simulation Example)
    3. Đọc hiểu về Event Scheduler, Network Components, và Packet
    4. Đọc hiểu về phân tích file Trace và hàng đợi:
    a. Trace Analysis Example http://nile.wpi.edu/NS/
    b. RED Queue Monitor Example http://nile.wpi.edu/NS/
    c. Hiểu rõ cách rút trích và lọc dữ liệu đọc Chương 3 tài liệu http://www-sop.inria.fr/members/Eitan.Altman/COURS-NS/n3.pdf

    5. Mô hình quả tạ (dumb-bell) đơn giản với 1 flow FTP hoạt động trên TCP







    a. Kích thước Queue = BDP (DropTail). Hiển thị kết quả sự thay đổi congestion window size, và throughput.
    b. Giảm kích thước Queue đi một nửa (DropTail). Hiển thị kết quả sự thay đổi congestion window size, và throughput.
    c. Dùng RED với thông số mặt định. Hiển thị kết quả sự thay đổi congestion window size, và throughput.
    d. Phân tích và so sánh các kết quả trên, và đưa ra nhận xét.

    6. Sử dụng lại mô hình như câu 5, thay đổi delay giữa R1 và R2, biến thiên từ 5ms – 200ms, queue size = BDP, và dùng Droptail.
    a. Hiển thị kết quả sự thay đổi congestion window size, throughput, và RTT.
    b. So sánh các kết quả, và đưa ra nhận xét.
    7. Sử dụng lại mô hình như câu 5, thay đổi delay giữa R1 và R2, biến thiên từ 5ms – 200ms, queue size = BDP, và dùng Droptail.
    a. Hiển thị kết quả sự thay đổi congestion window size, throughput, và RTT.
    b. So sánh các kết quả, và đưa ra nhận xét.








    8. Mô hình quả tạ (dumb-bell) đơn giản với 2 flows FTP hoạt động trên TCP








    Bottleneck queue size = max BDP, vẽ hình congestion window size, throughput của 2 flows và cho nhận xét.

    9. Mô hình quả tạ (dumb-bell) đơn giản với 5 flows TCP với queue size = BDP. Tất cả các TCP flow được start đồng thời








    a. Dùng Drop-tail, hãy vẽ hình congestion window và throughput. (Chú ý vấn đề global synchronization)
    b. Dùng RED, hãy vẽ hình congestion window và throughput. So sánh với câu a. Cho nhận xét.

    10. Cho mô hình như hình vẽ sau: 5 flows TCP, 1 UDP (rate = 2Mbps)






    a.
    b. Dùng Drop-tail, hãy vẽ hình congestion window và throughput.
    c. Dùng RED, hãy vẽ hình congestion window và throughput. So sánh với câu a. Cho nhận xét.

    ReplyDelete
  7. Chào bạn Thứ lễ: Mình đang có đề tài về tìm hiểu luồng video video truyền qua mạng không dây. Mình cần bạn giúp liên hệ sdt mình: 01675587820 , sẽ hậu tạ bạn nếu ok.

    ReplyDelete
  8. ban cho minh hoi doan tao cac tcp sao ban lai ket noi s1 vs dich d1 va d2; tao tcp2 cho s2 ket noi dich d3 ; tao tcp3 cho s3 ket noi voi dich d1. Minh nghi theo so do thi cac topo phai khac chu s1-d1 s2-d2 s3-d3 co ma.

    ReplyDelete
    Replies
    1. vì đề thầy Hưng cho như thế cậu ơi, nhưng code của ad bị thiếu. có n luồng thì cần n tác nhân

      Delete
  9. This comment has been removed by the author.

    ReplyDelete
  10. Ad cho mình hỏi ý nghĩa câu lệnh BEGIN {sent[5000];receiv[5000];delay[5000]} là gì với. Tks ad.

    ReplyDelete
  11. Em chao anh anh oi em co gap van de la file cua em bai8.tlc nhung khi thuc hien lenh tren terminal no bao ko co duong link cua bai8.tlc. nhung em kiem tra thi co duong link ay va no co chua file bai8.tlc. Anh giup em voi aj. Em cam on Anh a

    ReplyDelete
  12. anh ơi em em cài nam rồi nhưng chạy nó toàn báo lỗi phân khuc: core dumped là bị làm sao ạ?

    ReplyDelete
  13. a ơi e đang có một bài tập lớn về mô phỏng hàng đợi RED sử dụng NS2. e đã cài đặt xong ns2 nhưng cẫn chưa hiểu được cách sử dụng các thành phần trong ns2 và cách mở code của bài mô phỏng
    a giúp e với ạ
    cảm ơn a nhìu nhìu

    ReplyDelete
  14. em có bài tập mô phỏng trace driven trong ns2 , ai có thẻ giúp đỡ em không ạ

    ReplyDelete
  15. Great and I have a neat supply: Where Is Charlotte Church House Renovation home addition builders near me

    ReplyDelete