NS-2 là một bộ mụ phỏng mạng mó nguồn mở và hoạt động theo kiểu hướng đối tượng và hướng sự kiện. NS-2 khỏ dễ để bắt đầu, khiến cho những người khụng chuyờn cú thể dễ dàng xõy dựng một chương trỡnh mụ phỏng đỏp ứng yờu cầu của mỡnh. Ngoài khả năng cung cấp rất nhiều cụng cụ thụng dụng, phổ biến khiến cho việc xõy dựng một chương trỡnh mụ phỏng khụng quỏ phức tạp và mất thời gian, NS-2 cũn tớch hợp sẵn rất nhiều chương trỡnh mụ phỏng đó được viết và đỏnh giỏ bởi cỏc chuyờn gia về mạng trờn thế giới, khiến cho người dựng thậm chớ khụng cần phải xõy dựng lại một chương trỡnh mụ phỏng mà vẫn cú thể khảo sỏt được những gỡ mỡnh cần. Mó nguồn mở cũng cho phộp những người dựng chuyờn sõu cú thể tự xõy dựng cỏc cụng cụ,
đối tượng, giao thức,... từ đầu hoặc từ cỏc cụng cụ, đối tượng đó cú, khiến cho người dựng cú khả năng đỏnh giỏ cỏc ý tưởng mới, cỏc thuật toỏn mới hoặc cải tiến những gỡ đó cú.
NS được phỏt triển tại phũng thớ nghiệm LBL (Lawrence Berkeley Laboratory) tại trường đại học Berkeley trong dự ỏn VINT (Virtual InterNetwork Testbed). Ngày nay NS-2 được sử dụng rất rộng rói trong cỏc trường đại học trờn thế giới và trở thành tiờu chuẩn, thành sự đảm bảo cho cỏc bài bỏo, nghiờn cứu cú liờn quan đến mụ phỏng mạng. Cỏc phiờn bản liờn tục được cập nhật, phỏt triển và phỏt hành miễn phớ trờn mạng càng tạo ra sức phỏt triển cho NS-2. Cho đến nay (11/2006) NS-2 đó được đưa ra trờn mạng với phiờn bản NS-2.30.
NS-2 dựa trờn hai ngụn ngữ C++ và OTcl. Trong đú C++ đúng vai trũ như là một bộ xử lý, tớnh toỏn cỏc sự kiện diễn ra, cũn OTcl đúng vai trũ cấu hỡnh và điều khiển. Tớnh hướng đối tượng của C++ cho phộp xõy dựng cỏc đối tượng theo cấu trỳc lớp. Việc xõy dựng một đối tượng mới cú thể kế thừa từ một số lớp cũ, hoặc xõy dựng mới hoàn toàn. Tớnh kịch bản (script) của OTcl cho phộp xõy dựng chương trỡnh mụ phỏng theo dạng kịch bản, tức là cú thể sắp xếp, lờn lịch cho cỏc sự kiện ở những thời điểm xỏc định trước. Núi cỏch khỏc, OTcl tạo ra một kịch bản cho chương trỡnh mụ phỏng, cũn C++ tạo ra kết quả hoạt động, chuyển giao giữa cỏc đối tượng, cỏc modul trong hệ thống. Việc kết hợp hai ngụn ngữ này cũn tạo ra một lợi ớch là khụng cần biờn dịch lại mó của cỏc đối tượng mụ phỏng giữa cỏc lần mụ phỏng khỏc nhau khi ta thay đổi topology, dải tần, tốc độ,... - tức là thay đổi cỏc thụng số của mạng - từ kịch bản OTcl.
Ngoài ra NS-2 cũn cung cấp thờm bộ hỡnh ảnh NAM (Network AniMator) để cho phộp quan sỏt những gỡ đó diễn ra trong khi mạng hoạt
động. Từ đú biết được hoạt động của cỏc trạm như thế nào, như: di động, xung đột xảy ra, định tuyến,…Cỏc phần mềm hỗ trợ theo NS-2 rất thụng dụng như xgraph, gnuplot (được dựng để vẽ đồ thị) cũng như cỏc ngụn ngữ lập trỡnh như Python, Perl, Tcl,… giỳp cho sự phõn tớch kết quả khỏ dễ dàng.
3.2 Một số lớp đối tƣợng trong NS-2
Cỏc đối tượng trong NS-2 đều bắt nguồn từ một lớp đối tượng đơn là
generic. Cỏc lớp con tạo nờn một hệ thống cấp bậc trong đú cỏc đối tượng thuộc lớp con kế thừa cỏc thuộc tớnh và phương thức của lớp cha. Cỏc đối tượng cú thể bị gọi đến bằng cỏc lời gọi thủ tục của Tcl. Cỏc tham số cấu hỡnh của một đối tượng cú thể (và thường) được đặt cố định trước khi chạy chương trỡnh mụ phỏng, hoặc cũng cú thể thay đổi động trong quỏ trỡnh chạy mụ phỏng. Nếu khụng được đặt trong chương trỡnh, chỳng sẽ nhận cỏc giỏ trị mặc định, và cỏc giỏ trị mặc định của đối tượng lớp con chớnh là giỏ trị được đặt, hoặc mặc định của lớp cha. Nghĩa là khi một tham số cấu hỡnh của một đối tượng nào đú được đặt, nú sẽ trở thành giỏ trị mặc định cho cỏc lớp con, trừ khi đối tượng lớp con đặt lại nú. Cỏc biến trạng thỏi của đối tượng thể hiện cho một đại lượng, thuộc tớnh nào đú của đối tượng và chương trỡnh mụ phỏng cú thể đọc được giỏ trị của nú, nhưng khụng thể đặt được nú - nú được đặt bởi chớnh đối tượng chứa nú. Cõy đối tượng trong NS-2 khỏ phong phỳ. Hỡnh 3.1 thể hiện một phần của cõy đối tượng đú.
Hỡnh 3.1 : Một phần cõy phõn lớp đối tượng trong NS generic agent tcp tcp-reno tcp-newreno tcp-sack1 tcp-fack tcp-fackrh tcp-sink tcp-sink-da sack1-tcp-sink sack1-tcp-sink-da tcp-source ftp telnet bursty link drop-tail red cbq wrr-cbq lossy trace node class flowmgr
Cỏc đối tượng, hay lớp đối tượng trong NS-2 rất đa dạng và phong phỳ, và khụng thể giới thiệu chi tiết tất cả chỳng trong khuụn khổ một chương luận văn. Mục tiờu của phần này là giới thiệu về một số đối tượng, lớp đối tượng liờn quan đến quỏ trỡnh mụ phỏng trong luận văn này, bao gồm một số đối tượng lớp agent liờn quan đến cỏc thuật toỏn điều khiển tắc nghẽn trờn TCP, một số đối tượng lớp Link liờn quan đến cỏc thuật toỏn điều khiển tắc nghẽn trờn gateway thụng qua việc tổ chức hàng đợi, đối tượng trace liờn quan đến việc thu thập và đỏnh giỏ kết quả mụ phỏng.
3.2.1 Lớp tcp
Lớp tcp là một lớp con của lớp agent, nú thực hiện giao thức lớp giao vận TCP với thuật toỏn Tahoe. Nú thừa kế tất cả cỏc phương thức và thuộc tớnh của lớp agent. Một phương thức đỏng được quan tõm của lớp đối tượng này là phương thức tạo một nguồn truyền tin dạng ftp, telnet hoặc bursty. Phương thức này trả về tờn của đối tượng Tcl tương ứng với nguồn truyền tin mới được tạo ra :
$tcp source ftp/telnet/bursty
Cỏc tham số cấu hỡnh của lớp này bao gồm :
Tờn thuộc tớnh í nghĩa/chức năng
window Ngưỡng trờn của kớch thước cửa sổ
window-init Kớch thước cửa sổ khởi động khi bắt đầu slow-start window-option Thuật toỏn sử dụng cho tổ chức cửa sổ
window-thresh Hằng số trong bộ lọc tớnh awnd dựng để nghiờn cứu cỏc
thuật toỏn tăng kớch thước cửa sổ khỏc nhau
overhead Phạm vi của một biến ngẫu nhiờn được chốn vào giữa quỏ
trỡnh phỏt cỏc gúi tin để tạo ra độ trễ giữa cỏc gúi tin
packet-size Kớch thước cỏc gúi tin từ nguồn truyền tin này tớnh theo byte
tcp-tick Khoảng thời gian tớnh RTT
bug-fix Cho phộp sửa lỗi khi nhiều gúi tin bị mất trong một cửa sổ
dữ liệu, gõy ra nhiều fast-retransmit
maxburst Số gúi tin lớn nhất cú thể gửi khi nhận được một ACK đơn
MWS
Kớch thước cửa sổ lớn nhất cho một kết nối TCP, mặc định là 1024 (gúi tin). Tham số window của Tahoe phải nhỏ hơn
MWS-1, của Reno nhỏ hơn (MWS-1)/2
Cỏc biến trạng thỏi bao gồm :
Tờn biến í nghĩa
dupacks Số ACK lặp kể từ ACK khụng lặp mới nhất
seqno Vị trớ hiện tại trong khụng gian số thứ tự gúi tin
ack ACK lớn nhất hiện tại
cwnd Giỏ trị hiện tại của cửa sổ xung đột
awnd Giỏ trị hiện tại của cửa sổ xung đột được đó lọc thụng thấp. Tham
số này dựng nghiờn cứu cỏc thuật toỏn tăng kớch thước cửa sổ.
ssthresh Giỏ trị ngưỡng hiện tại của slow-start rtt RTT dự đoỏn hiện tại
srtt RTT đó làm trơn (smoothed RTT)
rttvar Phương sai của RTT
backoff Hằng số RTT của thuật toỏn backoff
Tcp-reno, tcp-newreno, tcp-vegas là cỏc lớp con của tcp, tương ứng với cỏc thuật toỏn quản lớ cửa sổ khỏc nhau.
3.2.2 Lớp tcp-sink
Tcp-sink là một lớp con của lớp agent, nú thực hiện chức năng của một bộ thu cỏc gúi tin (TCP đớch). Khi nhận được cỏc gúi tin, tcp-sink tạo ra cỏc
hoặc biến trạng thỏi nào, chỉ cú một tham số cấu hỡnh packet-size là kớch thước của cỏc gúi tin ACK mà nú tạo ra. Ngoài ra nú thừa kế tất cả cỏc phương thức cũng như biến, tham số của lớp agent. Tcp-sink cú một lớp con là tcp-sink-da, là lớp thực hiện tcp-sink với ACK trễ (delayed-ACK)
3.2.3 Lớp link
Link là một lớp con của lớp agent, thực hiện chức năng như một đường kết nối truyền tin. Lớp này cú khỏ nhiều phương thức như tắt/bật kết nối (phương thức down/up), đặt độ mất mỏt gúi tin do lỗi (kết nối lossylink),... Đỏng chỳ ý hơn là cỏc tham số đặt cấu hỡnh và cỏc biến trạng thỏi.
Cỏc tham số cấu hỡnh của lớp này bao gồm :
Tờn thuộc tớnh í nghĩa/chức năng
bandwidth Băng thụng của kết nối, tớnh bằng bit/s
delay Độ trễ truyền dẫn trờn kết nối, tớnh bằng giõy
queue-limit Kớch thước hàng đợi tối đa, tớnh theo gúi tin
state Trạng thỏi hiện tại của kết nối (up hoặc down) Cỏc biến trạng thỏi bao gồm :
Tờn biến í nghĩa
queue-length Kớch thước hàng đợi hiện tại tớnh theo gúi tin
queue-size Kớch thước hàng đợi hiện tại tớnh theo byte
Link cú hai lớp con đỏng chỳ ý là DropTail và RED, thực hiện chức năng quản lớ hàng đợi tương ứng với cỏc thuật toỏn DropTail và RED (và cỏc biến thể của RED). DropTail là một hàng đợi kiểu FIFO và khụng cú phương thức, tham số cấu hỡnh hay biến trạng thỏi nào mới, toàn bộ kế thừa từ lớp
link. Lớp RED khụng cú phương thức nào mới, nhưng cú nhiều tham số cấu hỡnh và biến trạng thỏi mới.
Cỏc tham số cấu hỡnh của lớp RED bao gồm :
Tờn thuộc tớnh í nghĩa/chức năng
bytes Đặt chế độ hoạt động theo byte hay theo gúi tin
thresh Ngưỡng dưới của kớch thước hàng đợi trung bỡnh
maxthresh Ngưỡng trờn của kớch thước hàng đợi trung bỡnh
mean-pktsize
Kớch thước gúi tin trung bỡnh, tớnh theo byte. Tham số này dựng trong thủ tục cập nhật kớch thước hàng đợi trung bỡnh sau một chu kỡ rỗi.
q_weight Trọng số hàng đợi, dựng trong bộ lọc EWMV để tớnh kớch
thước hàng đợi trung bỡnh
wait Cho phộp hay khụng một khoảng thời gian giữa hai lần loại
bỏ gúi tin liờn tiếp
linterm Giỏ trị quyết định maxp: maxp=1/linterm
setbit Cho phộp đặt bit cảnh bỏo tắc nghẽn trong phần tiờu đề của
gúi tin chứ khụng loại bỏ gúi tin
drop-tail Đặt chế độ loại bỏ cỏc gúi tin mới đến hay loại bỏ ngẫu
nhiờn khi hàng đợi bị tràn.
doubleq Đặt chế độ ưu tiờn gúi tin cú kớch thước nhỏ
dqthresh Kớch thước lớn nhất của một gúi tin được coi là "nhỏ"
gentle Đặt chế độ hoạt động gentle cho RED
adaptive Đặt chế độ hoạt động thớch nghi cho RED, tức là biến RED
thành RED thớch nghi
alpha Giỏ trị trong RED thớch nghi
beta Giỏ trị trong RED thớch nghi Hai biến trạng thỏi quan trọng nhất của lớp RED bao gồm :
Tờn biến í nghĩa
avg Kớch thước hàng đợi trung bỡnh hiện tại
curq Kớch thước hàng đợi tức thời
Hai biến trạng thỏi này được tớnh theo gúi tin nếu RED hoạt động ở chế độ gúi tin, và được tớnh theo byte nếu RED hoạt động ở chế độ byte
3.2.4 Lớp trace
Trace là lớp đối tượng được sử dụng để ghi lại cỏc sự kiện trong chương trỡnh mụ phỏng ra một file hoặc đưa ra một hàm Tcl. Nú khụng cú biến trạng thỏi hay tham số cấu hỡnh mà chỉ cú ba phương thức :
$trace attach fileID: Gắn một file vào đối tượng trace để ghi lại cỏc sự kiện. fileID phải là một thẻ file được trả về bởi lệnh open của Tcl và phải được mở với chế độ cú thể ghi. File này được gọi là file trace (file theo dừi)
$trace detach : tỏch rời file khỏi đối tượng trace. Cỏc sự kiện sau này sẽ khụng được ghi vào file đú nữa.
$trace callback proc : Đặt chế độ để tự động gọi hàm proc (hàm Tcl) mỗi khi cú một sự kiện được ghi nhận bởi đối tượng trace. Cả fileID và proc
cựng cú thể hoạt động đồng thời. Việc gọi proc mỗi khi cú sự kiện được ghi nhận sẽ làm cho chương trỡnh mụ phỏng chạy chậm hơn.
Cỏc sự kiện được ghi vào file dưới dạng văn bản, mỗi dũng tương ứng với một sự kiện và cú cấu trỳc như sau :
<code><time><hsrc><hdst><packet>
Trong đú :
<code> là một trong cỏc kớ tự 'rd+-' tương ứng với cỏc sự kiện nhận được gúi tin (receive), loại bỏ gúi tin (drop), đưa vào hàng đợi (queue) và đưa ra khỏi hàng đợi (dequeue), tức là truyền đi.
<time> là thời điểm sự kiện xảy ra, tớnh theo giõy (s)
<hdst> là địa chỉ của nỳt mạng thứ hai của kết nối truyền gúi tin.
<packet> cú cấu trỳc:
<type><size><flag><class><src.sport><dst.dport><seqNum><pktID>
Trong đú:
<type> là loại gúi tin, bao gồm cỏc loại tcp,telnet,cbr,ack,...
<size> là kớch thước gúi tin tớnh theo byte
<flag> là cờ, bao gồm một số bit trạng thỏi như bit cảnh bỏo tắc nghẽn (C), bit đặt mức ưu tiờn (P),...
<class> là số nhận dạng (ID) của lớp
<scr.sport> là địa chỉ lớp giao vận của TCP nguồn, bao gồm địa chỉ TCP nguồn và địa chỉ cổng của TCP nguồn.
<dst.dport> là địa chỉ lớp giao vận của TCP đớch, cấu trỳc như địa chỉ TCP nguồn.
<seqNum> là số thứ tự của gúi tin
<pktID> là số nhận dạng của gúi tin.
Ngoài ra đối với gateway RED (và cỏc biến thể của RED) cũn cú file theo dừi hàng đợi với cấu trỳc mỗi hàng (mỗi sự kiện) như sau:
Trong đú :
<code> là mó sự kiện, [Q] là kớch thước hàng đợi tức thời, [a]là kớch thước hàng đợi trung bỡnh.
<time> là thời điểm ghi nhận sự kiện
<value> là giỏ trị tương ứng của a hoặc Q, tớnh theo byte nếu RED hoạt động ở chế độ byte và theo gúi tin nếu RED hoạt động ở chế độ gúi tin.
3.3 Cỏc bƣớc xõy dựng một chƣơng trỡnh mụ phỏng
Xõy dựng một chương trỡnh mụ phỏng mạng trờn NS-2 đầu tiờn cần tạo cỏc lớp đối tượng cũng như cỏc phương thức của nú trong C++, biờn dịch và đưa vào sử dụng với OTcl. Sau đú cần tạo một kịch bản trờn Tcl để diễn tả chương trỡnh mụ phỏng. Ở đõy chỉ đề cập đến giai đoạn tạo kịch bản Tcl, vỡ cỏc đối tượng sử dụng trong luận văn này đều đó được xõy dựng trờn NS-2. Tạo một kịch bản mụ phỏng trờn Tcl gồm cỏc bước chớnh sau:
1. Thiết lập topology mạng.
2. Thiết lập cỏc tham số cấu hỡnh cho cỏc đối tượng trong mạng 3. Sắp xếp, lờn lịch cỏc hoạt động của cỏc đối tượng.
Trong kịch bản sử dụng cỏc lệnh của NS-2 hoặc cỏc phương thức của cỏc đối tượng trong mạng. Cỏc lệnh hay dựng của NS-2 bao gồm :
$ns node: tạo một nỳt mạng
$ns link node1 node2 type : tạo kết nối giữa hai nỳt mạng node1, node2
với kiểu quản lớ hàng đợi type.
$ns at time proc : tại thời điểm time thực hiện hàm proc.
Ngoài ra cũn một số lệnh cơ bản khỏc của NS-2 như now, trace, random, run,... Cỏc phương thức của cỏc đối tượng tựy thuộc lớp của nú. Cú những cụng việc (lệnh) cú thể được diễn tả bằng lệnh của NS-2 hoặc phương thức của đối tượng đều được. Chỳng ta xem xột cụ thể cỏc bước này thụng qua một vớ dụ đơn giản trong trang kế tiếp. Cỏc vớ dụ phức tạp hơn chớnh là cỏc thớ nghiệm trong luận văn này, được liệt kờ trong phần phụ lục.
3.4 Khảo sỏt và đỏnh giỏ kết quả mụ phỏng
Kết quả mụ phỏng được ghi lại trong cỏc file trace. Cú nhiều cỏch xử lớ dữ liệu này như sử dụng chương trỡnh NAM trong bộ NS-2 để quan sỏt cỏc sự kiện được ghi lại này một cỏch trực quan. NAM khụng chỉ thể hiện cỏc sự kiện theo thời gian, mà cũn cho phộp thay đổi tốc độ chạy. Tuy nhiờn để cú thể xem được quỏ trỡnh mụ phỏng trờn NAM cần bổ xung một số lệnh vào kịch bản Tcl như cỏc lệnh đặt hướng của kết nối, màu của cỏc loại gúi tin, tạo file trace cho NAM... Ngoài ra cú thể sử dụng cỏc tiện ớch xgraph, gnuplot để vẽ đồ thị thể hiện một số thụng số. Để sử dụng cỏc tiện ớch này cần viết một