4.3.2.1. Lập trình tách biệt
NS2 sử dụng một mô hình lập trình phân tách làm hai phần. Phần thứ nhất sử dụng ngôn ngữ C++ để triển khai thực hiện hạt nhân của bộ mô phỏng. Phần thứ hai của bộ mô phỏng NS2 sử dụng ngôn ngữ Tcl để thực hiện các nhiệm vụ định nghĩa, định cấu hình và điểu khiển mô phỏng. Với việc sử dụng mô hình lập trình phân tách nhƣ trên, NS2 cho phép các nhà nghiên cứu bổ sung các chức năng mới, thử nghiệm các kịch bản khác nhau, nghiên cứu các giao thức mới. Hơn nữa, cách tiếp cận lập trình tách biệt này đem lại nhiều lợi ích to lớn
và lâu dài, nó giúp tách gánh nặng của việc thiết kế, bảo trì, mở rộng, và gỡ rối bộ mô phỏng khỏi mục đích của mô phỏng.
4.3.2.2. Lập trình hƣớng đối tƣợng
Vì việc tái sử dụng các mô đun chƣơng trình là rất quan trọng nên đã dẫn đến sự lựa chọn lập trình hƣớng đối tƣợng. Nhƣng với thiết kế ban đầu của NS, ngôn ngữ Tcl không hỗ trợ việc lập trình hƣớng đối tƣợng, nên một ngôn ngữ sử dụng các mở rộng hƣớng đối tƣợng của ngôn ngữ Tcl đã ra đời, ngôn ngữ này đƣợc gọi là Otcl.
4.3.3. Lập trình mô phỏng bằng NS2
Sau đây sẽ giới thiệu các bƣớc chính trong việc tiến hành mô phỏng mạng bằng bộ công cụ mô phỏng NS2.
4.3.3.1. Tạo bộ lập lịch các sự kiện (Creating Event Scheduler)
- Create scheduler
set ns [new Simulator] - Schedule event
$ns at <time> <event>
<event>: any legitimate ns/tcl command - Start scheduler
$ns run
4.3.3.2. Ghi lại vết các sự kiện của mạng mô phỏng (vào tệp “*.tr” và/hoặc “*.nam”) và/hoặc “*.nam”)
- Để có các tệp đầu ra chứa dữ liệu mô phỏng (tệp vết) hay các tệp sử dụng cho hiển thị (tệp nam) thì ta sử dụng câu lệnh:
# Mở tệp vết có tên là “out.tr” với con trỏ là “tracefile” Set tracefile [Open out.tr w]
$ns trace-all $tracefile
# Mở tệp hiển thị Nam có tên là “out.nam” với con trỏ là “namfile”. Set namfile [Open out.nam w]
$ns namtrace-all $namfile
- Các câu lệnh trace-all và namtrace-all có thể dẫn đến việc tạo ra các tệp có kích thƣớc lớn với dữ liệu dƣ thừa. Do đó ta có thể chỉ “trace” một số tham số, thí dụ:
$ns trace-queue $n0 $n1 $ns namtrace-queue $n0 $n1
4.3.3.3. Thiết lập mạng mô phỏng Thiết lập tô-pô Thiết lập tô-pô
- Tạo ra các nút mạng (Nodes) n0 và n1 ta dùng lệnh: set n0 [$ns node]
set n1 [$ns node]
- Tạo ra đƣờng truyền và chính sách phục vụ hàng đợi giữa hai nút mạng ta dùng lệnh:
$ns <phƣơng thức truyền> <nút 1> <nút 2> <băng thông> <độ trễ> <chính sách phục vụ tại hàng đợi>
Với:
<Phƣơng thức truyền> có thể lựa chọn là duplex-link hoặc simplex- link. Chọn Duplex-link khi đƣờng truyền là 2 chiều đồng thời, chọn Simplex-link khi đƣờng truyền chỉ có 1 chiều duy nhất.
<nút 1> <nút 2>: tham chiếu của 2 nút mạng tạo ra liên kết
<băng thông>: giá trị băng thông cụ thể, đơn vị tính là Mbps
<độ trễ>: giá trị trễ của đƣờng truyền, đơn vị tính là ms
<chính sách phục vụ tại hàng đợi>: có thể là một trong các chính sách sau DropTail, RED, FQ, DRR, SFQ, CBQ.
Ví dụ : $ns duplex-link $n0 $n1 10Mb 100ms DropTail - Định hƣớng các đƣờng truyền cho chƣơng trình NAM.
Đƣa mô hình lỗi vào đƣờng truyền
Nếu không khai báo đƣa mô hình lỗi vào, các đƣờng truyền đƣợng tạo ra sẽ không có lỗi. Các mô hình lỗi tuy đƣợc “đƣa vào đƣờng truyền”, nhƣng thực tế là đánh dấu các gói tin có lỗi ngay tại hàng đợi ở đầu vào của đƣờng truyền nối 2 nút mạng. Ví dụ:
- Tạo và thiết lập tham số cho mô hình sinh lỗi ta dùng các lệnh set loss_module [new ErrorModel]
$loss_module set rate_ 0.01 $loss_module unit pkt
$loss_module ranvar [new RandomVariable/Uniform] $loss_module drop-target [new Agent/Null]
- Chèn mô hình sinh lỗi ta dùng lệnh.
Chọn thuật toán định tuyến
Với mạng có dây không cần khai báo thuật toán định tuyến nên NS2 sẽ sử dụng giá trị ngầm định. Với mạng không dây thì cần khai báo thuật toán định tuyến trƣớc khi sử dụng.
4.3.3.4. Tạo ra các kết nối ở tầng giao vận (giao thức TCP, UDP...) Tạo ra các kết nối TCP Tạo ra các kết nối TCP
- Tạo ra các thực thể gửi và nhận của TCP (source and sink) ta dùng lệnh set tsrc [new Agent/TCP]
set tdst [new Agent/TCPSink] - Gắn các thực thể TCP với nút mạng
$ns attach-agent $n0 $tsrc $ns attach-agent $n1 $tdst
- Tạo ra kết nối giữa thực thể gửi và nhận TCP $ns connect $tsrc $tdst
Tạo ra các kết nối UDP
-Tạo ra các thực thể gửi và nhận của UDP (source and NULL) dùng các lệnh set usrc [new Agent/UDP]
set udst [new Agent/NULL] - Gắn các thực thể UDP với nút mạng
$ns attach-agent $n0 $usrc $ns attach-agent $n1 $udst
- Tạo ra kết nối giữa thực thể gửi và nhận UDP $ns connect $usrc $udst
4.3.3.5. Tạo ra các nguồn sinh lƣu lƣợng
Lƣu lƣợng đƣợc xét ở đây có thể thuộc một trong ba loại là lƣu lƣợng đƣợc sinh ra bởi mô hình Toán học: mô phỏng lƣu lƣợng do các ứng dụng sử dụng dịch vụ vận chuyển của giao thức giao vận sinh ra hoặc lƣu lƣợng đƣợc sinh ra dựa vào lƣu lƣợng trên mạng thực, đã đƣợc ghi vào tệp, nhƣ “trace tệp”, hoặc lƣu lƣợng của mạng thực đang hoạt động, tƣơng tác với bộ mô phỏng NS-2. Ở đây chỉ xét đến loại lƣu lƣợng thứ nhất.
Lƣu lƣợng do TCP vận chuyển
set ftp [new Application/FTP] $ftp attach-agent $tsrc
$ns at <time> “$ftp start”
- Tạo lƣu lƣợng của ứng dụng Telnet ta dùng lệnh set telnet [new Application/Telnet]
$telnet attach-agent $tsrc
Lƣu lƣợng do UDP vận chuyển
-Tạo lƣu lƣợng của các loại nguồn sinh với tốc độ không đổi – CBR (Constant Bit Rate) ta dùng lệnh
set src [new Application/Traffic/CBR]
- Tạo lƣu lƣợng của các nguồn sinh gói tin theo phân bố Exponential hoặc Pareto on-off ta dùng lệnh
set src [new Application/Traffic/Exponential] set src [new Application/Traffic/Pareto]
4.3.3.6. Xác định thời gian mô phỏng
Thời gian mô phỏng nên thiết lập vừa đủ, vì nếu kéo dài thời gian mô phỏng thì cũng sẽ không thu đƣợc thêm kết quả gì hoặc không tăng thêm đƣợc độ chính xác của kết quả, hoặc nếu độ chính xác có tăng lên thêm thì cũng không tƣơng xứng với giá phải trả (giá ở đây có thể là thời gian đợi cho đến khi mô phỏng hoàn thành, hoặc có thể là dung lƣợng đĩa cứng mà tệp vết chiếm dụng).
4.3.4. Mô hình truyền radio
Sử dụng mô hình truyền radio đƣợc triển khai trong NS để dự đoán công suất tín hiệu nhận đƣợc của mỗi gói tin. Ở tầng vật lý của một nút mạng không dây sẽ thiết đặt một ngƣỡng nhận. Khi một gói tin đƣợc nhận, nếu công suất tín hiệu của gói tin nhỏ hơn ngƣỡng nhận thì gói tin đó sẽ bị đánh dấu là lỗi và bị hủy tại tầng MAC.
Cho đến nay, NS hỗ trợ ba mô hình truyền radio, đó là mô hình Free Space, mô hình two-ray ground reflection và mô hình shadowing. Các mô hình này đƣợc triển khai trong NS thông qua các tệp ~ns/propagation.{cc,h}, ~ns/tworayground.{cc,h} và ~ns/shadowing.{cc,h}.
4.3.5. Mô hình năng lƣợng
Mô hình năng lƣợng đƣợc thực hiện trong NS là một thuộc tính của nút. Nó cho biết mức năng lƣợng có trong một nút mạng. Mô hình năng lƣợng trong một
nút mạng có giá trị khởi tạo là mức năng lƣợng của nút mạng đó khi bắt đầu mô phỏng. Giá trị này đƣợc gọi là initialEnergy_. Khi thực hiện truyền và nhận dữ liệu, một phần năng lƣợng của nút mạng bị tiêu hao và chúng đƣợc gọi tƣơng ứng là txPower_ và rxPower_. Các tệp nơi mô hình năng lƣợng đƣợc định nghĩa có trong thƣ mục ns/energymodel [.cc và .h]. Các chức năng và phƣơng thức mô tả khác về năng lƣợng có thể tìm thấy trong ns/wireless-phy.cc, ns/cmu-trace.cc và ns/tcl (lib [ns-lib.tcl, ns-node.tcl, ns-mobilenode.tcl].
4.3.6. NAM
NAM (Network Animator) là một công cụ hiển thị hoạt hình dựa trên Tcl/TK để xem các vết mô phỏng mạng và vết số liệu về gói tin của mạng thực. Công cụ NAM đƣợc thiết kế để có khả năng đọc số liệu từ các tệp kết quả có kích thƣớc rất lớn, vì vậy nó chỉ đọc số liệu về từng sự kiện hoạt hình để tránh sử dụng quá nhiều bộ nhớ. Hình 4.1 là giao diện đồ họa của công cụ NAM.
Hình 4.1 Giao diện đồ họa của NAM
Để sử dụng công cụ NAM, trƣớc hết phải tạo ra tệp vết cho NAM (tệp có phần mở rộng là .nam), bằng cách viết câu lệnh trong script để NS thực hiện.
Tệp vết cho NAM bao gồm các thông tin về tô-pô mạng, các đƣờng truyền cũng nhƣ vết của các gói tin.
Khi cho chạy NAM, nó sẽ đọc dữ liệu từ tệp vết, tạo ra tô-pô mạng, sắp xếp các nút và đƣờng truyền và tạm dừng (pause) tại thời điểm 0 để chờ ngƣời sử dụng điều khiển.
NAM có một giao diện để ngƣời sử dụng có thể điều khiển nhiều khía cạnh của hoạt hình. Giao diện này rất dễ sử dụng và trông gần giống với giao diện của chƣơng trình “Window Media Player”đƣợc cài đặt sẵn trong hệ điều hành Window.
4.4. Một số công cụ hỗ trợ việc phân tích và hiển thị kết quả mô phỏng [1]
Với tệp vết ghi lại các sự kiện trong mạng có cấu trúc đƣợc định nghĩa một cách rõ ràng, ngƣời phân tích có thể xử lý và kết xuất thông tin bằng mọi công cụ có thể, nhƣ các ngôn ngữ lập trình hoặc các phần mềm chuyên dụng. Dƣới đây là các phần mềm và ngôn ngữ thƣờng đƣợc sử dụng, trong đó phần lớn là các sản phẩm thuộc dự án GNU. Dự án GNU đƣợc bắt đầu vào năm 1984 nhằm phát triển một hệ điều hành hoàn toàn giống Unix, nhƣng là một phần mềm tự do, đó là hệ thống GNU. Nhân của GNU chƣa đƣợc hoàn thành nên GNU sử dụng nhân của Linux. Sự kết hợp này tạo thành hệ điều hành GNU/Linux, và nó thƣờng bị gọi không đúng là hệ điều hành Linux. Hiện tại hệ điều hành này đƣợc hàng triệu ngƣời trên thế giới sử dụng và có nhiều biến thể của GNU/Linux đƣợc sử dụng trên thế giới. Thuật ngữ “GNU” đƣợc đặt theo kiểu đệ quy, đƣợc hiểu là “GNU's Not Unix”.
Có rất nhiều sản phẩm phần mềm GNU, sau đây liệt kê một số sản phẩm có thể đƣợc sử dụng để phân tích kết quả mô phỏng.
Grep (Global Regular Expression Parser)
Grep là một lệnh trong Unix|Linux. Grep hoạt động giống nhƣ là một bộ lọc, nó tìm và hiển thị (hoặc kết xuất kiểu pipling) các dòng trong input có chứa mẫu ký tự (pattern) mà ngƣời sử dụng chỉ ra. Có 2 cách chính để sử dụng grep:
Cách 1: lọc output của một chƣơng trình khác. Cú pháp là: <command> | grep <pattern>. Cách 2: lọc tệp.
Awk
Awk là một ngôn ngữ lập trình đƣợc đồng sáng tạo bởi ba tác giả là Alfred Aho, Peter Weinberger, và Brian Kernighan. Chƣơng trình gawk đƣợc tích hợp trong Linux là ứng dụng GNU của ngôn ngữ lập trình awk.
Không chỉ là một ngôn ngữ lập trình, ngôn ngữ awk còn là một công cụ hầu nhƣ không thể thiếu đƣợc đối với nhiều ngƣời quản trị hệ thống và ngƣời lập trình UNIX. Awk có ƣu điểm là ngôn ngữ dễ học, dễ dùng và rất mềm dẻo.
Awk đƣợc thiết kế để xử lý thông tin chứa trong tệp hoặc thông tin do chƣơng trình khác đƣa ra truyền cho nó theo kiểu đƣờng ống (pipe). Sức mạnh của awk đƣợc thể hiện ở các khả năng sau:
− Cho phép hiển thị một phần hoặc toàn bộ tệp, có thể trích chọn để hiển thị dòng, cột hoặc trƣờng theo các tiêu chuẩn đƣợc chỉ rõ.
− Có thể phân tích văn bản để tính tần suất các word…
− Chuẩn bị các báo cáo đƣa ra có định dạng, dựa trên các thông tin của tệp.
− Cho phép lọc văn bản theo một cách thức rất mạnh. − Thực hiện tính toán trên các thông tin số trong tệp.
Perl (Practical Extraction and Report Language)
Perl là một ngôn ngữ lập trình và là chƣơng trình ứng dụng tự do, nó đƣợc phát triển bởi tác giả là Larry Wall. Perl đi kèm với các phiên bản của Linux và chính Perl cũng đƣợc hoàn thiện qua nhiều phiên bản.
Perl là một chƣơng trình ứng dụng rất mạnh, nó kết hợp các đặc điểm của awk, grep, sed và ngôn ngữ C. Chƣơng trình viết cho perl thực hiện cũng tƣơng tự nhƣ shell script và cũng đƣợc gọi là script. Phần mềm soạn thảo GNU Emacs có “perl mode” dùng để soạn thảo perl script.
Gnuplot
Gnunot là một chƣơng trình chuyên dùng để vẽ đồ thị. Chƣơng trình Gnuplot có thể chạy đƣợc trên cả hệ điều hành Windows và Unix|Linux. Gnuplot có thể nhận đầu vào là tệp văn bản có nhiều cột, khi đó ta cần chỉ ra hai cột để lấy số liệu phục vụ việc vẽ đồ thị. Ngoài ra Gnuplot còn có thể nhận đầu vào từ nhiều tệp và vẽ trên cùng một đồ thị, điều này rất thuận lợi cho việc so sánh các kết quả cần nghiên cứu, đặc biệt là so sánh các giao thức mạng theo các tiêu chí nào đấy.
Xgraph
Xgraph là phần mềm ứng dụng để vẽ đồ thị, luôn luôn đi kèm với NS2. Đầu vào của nó là một hoặc một số tệp dạng văn bản, trên mỗi dòng là cặp số liệu có dạng “x y” cho một điểm trên đồ thị.
Trace graph
Đây là một phần mềm mã nguồn mở và miễn phí với các phiên bản ban đầu, nhƣng đã thƣơng mại hoá các phiên bản ra đời từ khoảng năm 2004. Tác giả của Trace graph là Jaroslaw Malek Phần mềm này có khả năng phân tích và hiển thị kết quả mô phỏng khá tốt với đầu vào là tệp vết. Với các nhà nghiên cứu muốn có kết quả nhanh thì phần mềm này là một lựa chọn khá tốt.
CHƢƠNG 5. MÔ PHỎNG VÀ ĐÁNH GIÁ KẾT QUẢ 4.1. Các độ đo thƣờng dùng
Để đánh giá kết quả mô phỏng thu đƣợc, có nhiều loại độ đo đƣợc sử dụng, trong đó có ba loại độ đo hay đƣợc dùng là thời gian sống của mạng, mức năng lƣợng tiêu thụ và lƣợng dữ liệu nhận đƣợc tại BS. Ý nghĩa các độ đo đƣợc trình bày sau đây:
Thời gian sống của mạng đƣợc hiểu là thời gian mạng còn tồn tại, hay là khoảng thời gian từ khi các nút mạng bắt đầu hoạt động cho đến khi nút mạng cuối cùng trong mạng ngừng hoạt động (nút mạng bị chết) hay nói cách khác nó đƣợc biểu diễn là tỷ lệ nút mạng còn sống theo thời gian.
Mức năng lƣợng tiêu hao đƣợc hiểu là tỷ lệ tổng năng lƣợng tiêu hao của toàn mạng (của tất cả các nút mạng) theo thời gian.
Lƣợng dữ liệu nhận đƣợc tại BS đƣợc hiểu là lƣợng dữ liệu nhận đƣợc ở BS trong thời gian mạng còn tồn tại.
4.2. Mô phỏng
Tiến hành mô phỏng bằng công cụ NS2, phiên bản ns-allinone-2.34, chạy trên hệ điều hành Ubutu 10.04.4
4.2.1. Các công việc chuẩn bị
Tác giả sử dụng phần mở rộng NS cho giao thức LEACH đƣợc triển khai trong dự án của MIT uAMPS (MIT’s project) để mô phỏng. Hình 5.1 là kiến trúc của MIT.
Để có thể sử dụng đƣợc MIT, ngoài các lớp đối tƣợng và tài nguyên đƣợc cung cấp sẵn trong NS2, cần thêm một số tệp nữa, bao gồm: app.[cc,h], channel.cc, cmu-trace.[cc,h], mac.cc, packet.[cc,h], phy.[cc,h], và các tệp wireless-phya.[cc,h], mac-sensor.[cc,h], mac-sensor-timers.[cc,h].
Với MIT, các tệp để thiết lập năng lƣợng của các nút, các tác nhân và các chức năng của tầng liên kết đƣợc đặt ở trong thƣ mục mit/rca bao gồm: ns- ranode.tcl, rcagent.[cc,h], rca-ll[cc,h], resource.[cc,h] và energy.[cc,h].
Trong thƣ mục mit/uAMPS chứa một số giao thức định tuyến, bao gồm: ns- leach.tcl, ns-leach-c.tcl và ns-stat-clus.tcl. Để có thể mô phỏng đƣợc giao thức LEACH-DE, và giao thức do tác giả đề xuất, tác giả đã bổ sung thêm các giao thức này vào thƣ mục mit/uAMPS. Ngoài ra, các tệp ns-bsapp.tcl, extras.tcl và stats.tcl chứa các chức năng cần thiết để chạy các giao thức định tuyến, còn các tệp bsagent.[cc,h] chứa các chức năng của trạm gốc BS. Để thuận tiện cho việc
phân tích kết quả mô phỏng, tác giả đã thực hiện một số sửa đổi trong tệp stats.tcl
Hình 5.1 Kiến trúc của MIT
4.2.2. Các thông số mô phỏng
Các giao thức đƣợc mô phỏng đều sử dụng các thông số mô phỏng đầu vào