tổng quan đánh giá hiệu năng mạng

105
CHƯƠNG 1. TỔNG QUAN ĐÁNH GIÁ HIỆU NĂNG MẠNG 1.1. Khái niệm hiệu năng mạng Hiệu năng mạng là một vấn đề phức tạp do các yếu tố có thể tổng hợp đưa ra nhằm đánh giá vấn đề hiệu năng chưa thực sự rõ ràng. Đã có nhiều khái niệm, tham số được đưa ra nhằm minh chứng cho bản chất của vấn đề hiệu năng, lý giải cho việc truyền thông tin hiệu quả hay kém hiệu quả giữa các hệ thống trong mạng. Tuy nhiên, trong thực tế rất cần có những khái niệm bản chất và sát thực tiễn với mục tiêu đánh giá được toàn bộ vấn đề hiệu năng bao gồm cả các yếu tố đo đạc, theo dõi, điều khiển đều được tính đến. Có thể sơ lược khái niệm hiệu năng mạng như sau: Hiệu năng mạng là hiệu quả và năng lực hoạt động của hệ thống mạng. Như vậy, việc đánh giá hiệu năng mạng chính là tính toán và xác định hiệu quả, năng lực thực sự của hệ thống mạng trong các điều kiện khác nhau. Các điều kiện được sử dụng trong đánh giá hiệu năng là rất quan trọng, chúng ảnh hưởng trực tiếp tới các kết quả thu được. Trong các điều kiện ảnh hưởng tới quá trình đánh giá hiệu năng thì kịch bản mô tả là yếu tố then chốt quyết định giá trị hiệu năng tại điểm cần 1

Upload: kazuki0210

Post on 11-Dec-2014

120 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: tổng quan đánh giá hiệu năng mạng

CHƯƠNG 1 TỔNG QUAN ĐAacuteNH GIAacute HIỆU NĂNG MẠNG

11Khaacutei niệm hiệu năng mạng

Hiệu năng mạng lagrave một vấn đề phức tạp do caacutec yếu tố coacute thể tổng hợp đưa

ra nhằm đaacutenh giaacute vấn đề hiệu năng chưa thực sự rotilde ragraveng Đatilde coacute nhiều khaacutei niệm

tham số được đưa ra nhằm minh chứng cho bản chất của vấn đề hiệu năng lyacute

giải cho việc truyền thocircng tin hiệu quả hay keacutem hiệu quả giữa caacutec hệ thống trong

mạng Tuy nhiecircn trong thực tế rất cần coacute những khaacutei niệm bản chất vagrave saacutet thực

tiễn với mục tiecircu đaacutenh giaacute được toagraven bộ vấn đề hiệu năng bao gồm cả caacutec yếu tố

đo đạc theo dotildei điều khiển đều được tiacutenh đến Coacute thể sơ lược khaacutei niệm hiệu

năng mạng như sau Hiệu năng mạng lagrave hiệu quả vagrave năng lực hoạt động của hệ

thống mạng Như vậy việc đaacutenh giaacute hiệu năng mạng chiacutenh lagrave tiacutenh toaacuten vagrave xaacutec

định hiệu quả năng lực thực sự của hệ thống mạng trong caacutec điều kiện khaacutec

nhau

Caacutec điều kiện được sử dụng trong đaacutenh giaacute hiệu năng lagrave rất quan trọng

chuacuteng ảnh hưởng trực tiếp tới caacutec kết quả thu được Trong caacutec điều kiện ảnh

hưởng tới quaacute trigravenh đaacutenh giaacute hiệu năng thigrave kịch bản mocirc tả lagrave yếu tố then chốt

quyết định giaacute trị hiệu năng tại điểm cần đo Trong kịch bản cần xaacutec định caacutec

tham số đầu vagraveo rotilde ragraveng như caacutec nuacutet tham gia hệ thống thiết bị kết nối taacutec nhacircn

tham gia giao thức hoạt động ứng dụng triển khai thời gian thực hiện vagrave rất

nhiều yếu tố khaacutec kết hợp tạo ra một kịch bản hoagraven thiện

12Caacutec phương phaacutep đaacutenh giaacute hiệu năng

121 Phương phaacutep toaacuten học

Việc sử dụng caacutec phương phaacutep toaacuten trong tiacutenh toaacuten hiệu năng mạng đatilde

được thực hiện từ lacircu trong đoacute caacutec cocircng cụ toaacuten học đatilde được sử dụng rất linh

hoạt vagrave đa dạng như xaacutec suất thống kecirc đồ thị quy hoạch luồng để giải quyết

nhiều vấn đề trong hiệu năng Ưu điểm chiacutenh của phương phaacutep toaacuten học lagrave coacute

1

thể xaacutec định caacutec ngưỡng giaacute trị của hệ thống qua việc xaacutec định mối tương quan

giữa caacutec yếu tố trước khi tồn tại hệ thống Nhưng khi aacutep dụng trong thực tế việc

mocirc tả đầy đủ caacutec yếu tố đầu vagraveo cho bagravei toaacuten lagrave cực kỳ khoacute khăn do vậy kết quả

của phương phaacutep nagravey cograven nhiều hạn chế

122 Phương phaacutep đo thực tế

Sau khi hệ thống mạng đatilde được xacircy dựng đacircy lagrave một hệ thống tổng thể

kết nối của caacutec thiết bị với những cocircng nghệ khaacutec nhau do vậy việc đo đạc để

đưa ra kết quả từ mocirc higravenh thật lagrave rất quan trọng Khi thực hiện đo thực tế người

đo phải dựng ra được caacutec kịch bản cần đo từ đoacute tạo ra những điều kiện giống với

kịch bản thực tế vagrave sử dụng caacutec cocircng cụ đo như phần mềm thiết bị đo để thu

nhận caacutec kết quả thực tế từ hoạt động của hệ thống theo kịch bản Thocircng thường

với phương phaacutep đo thực tế cho chuacuteng ta kết quả với độ chiacutenh xaacutec rất cao tuy

nhiecircn việc đầu tư quaacute lớn trước khi biết kết quả hoạt động nhiều khi gacircy ra sự

latildeng phiacute vigrave vậy giải phaacutep đo thực tế chỉ được sử dụng để giaacutem saacutet hoạt động

mạng Để đo được giaacute trị hiệu năng quan trọng nhất lagrave lấy thocircng tin chiacutenh xaacutec về

hệ thống Hiện nay phổ biến coacute 3 phương phaacutep lấy thocircng tin sau

Truy vấn caacutec nuacutet mạng để lấy trực tiếp thocircng tin đang lưu trữ

Theo dotildei luồng thocircng tin thực tế trecircn hệ thống

Xacircy dựng kịch bản với dữ liệu thử nghiệm để đo hệ thống

123 Phương phaacutep mocirc phỏng

Để giảm sai số của phương phaacutep toaacuten học giảm chi phiacute đầu tư cho hệ

thống trước khi đo trong thực tế phương phaacutep mocirc phỏng đatilde được sử dụng Việc

mocirc phỏng hệ thống đogravei hỏi phải mocirc tả chiacutenh xaacutec chacircn thực tiacutenh năng kỹ thuật

yếu tố ragraveng buộc giữa caacutec nhacircn tố tham gia vagrave ảnh hưởng tới hệ thống trong thực

tế khi xacircy dựng Như vậy để kết quả chiacutenh xaacutec đogravei hỏi cocircng taacutec mocirc tả kịch bản

phải rất chuẩn xaacutec Trong khuocircn khổ mocircn học chuacuteng ta sẽ đi sacircu vagraveo tigravem hiểu vagrave

2

aacutep dụng phương phaacutep mocirc phỏng vagraveo đaacutenh giaacute hiệu năng mạng Coacute hai phương

phaacutep chiacutenh được sử dụng trong mocirc phỏng hệ thống mạng lagrave mocirc phỏng thời gian

thực vagrave mocirc phỏng rời rạc Để mocirc phỏng theo thời gian thực lagrave rất khoacute do vậy

phương phaacutep phổ biến hiện nay lagrave mocirc phỏng rời rạc tức lagrave caacutec sự kiện được xaacutec

định rotilde ragraveng vagrave coacute thời điểm mocirc tả trecircn trục thời gian

13Caacutec tham số đaacutenh giaacute hiệu năng

Để lượng hoacutea vấn đề hiệu năng mạng cần thiết phải coacute bộ tham số tiecircu biểu

đặc trưng cho vấn đề nagravey Trong đoacute 5 tham số sau đacircy được sử dụng như những

khaacutei niệm điển higravenh magrave nhigraven vagraveo chuacuteng coacute thể cho thấy kết quả của đaacutenh giaacute

hiệu năng mạng

131 Tiacutenh sẵn sagraveng (Availability)

Tiacutenh sẵn sagraveng lagrave thước đo đầu tiecircn khi xaacutec định vagrave đaacutenh giaacute hiện trạng mạng

coacute khả năng phục vụ đaacutep ứng yecircu cầu hay khocircng Tham số nagravey cho pheacutep chỉ ra

luồng thocircng tin coacute đang được chuyển tiếp qua hệ thống mạng hay bị tắc nghẽn

cần phải xử lyacute caacutec dịch vụ mạng đang được cung cấp coacute sẵn sagraveng cho việc trả

lời caacutec yecircu cầu đưa ra Vấn đề liecircn thocircng giữa caacutec hệ thống trong mạng cũng

được đề cập trong tiacutenh sẵn sagraveng

Một trong caacutec cocircng cụ phương phaacutep đơn giản thường được sử dụng khi

kiểm tra tiacutenh sẵn sagraveng của hệ thống mạng lagrave sử dụng chương trigravenh ping Chương

trigravenh khi thực hiện sẽ gửi caacutec goacutei tin dưới giao thức ICMP tới phiacutea maacutey cần kiểm

tra vagrave đợi kết quả trả lời nếu coacute kết quả trả lời chuacuteng ta coacute thể xaacutec định được

tiacutenh sẵn sagraveng của hệ thống điacutech

3

Higravenh 11 Kiểm tra tiacutenh sẵn sagraveng với chương trigravenh ping

Trong viacute dụ trecircn yecircu cầu gửi đi đatilde coacute kết quả đaacutep ứng trong một số trường

hợp vagrave tigravenh huống thực tế việc mất goacutei tin thường xuyecircn xảy ra điều nay coacute thể

do nhiều nguyecircn nhacircn khaacutec nhau trong đoacute coacute một số nguyecircn nhacircn điển higravenh sau

- Xung đột xảy ra giữa caacutec phacircn đoạn mạng Caacutec giao thức điều khiển

truy cập đoacuteng vai trograve quan trọng trong quaacute trigravenh kiểm soaacutet xung đột

việc lựa chọn giao thức phugrave hợp ảnh hưởng lớn tới xử lyacute caacutec goacutei tin

khi hệ thống gặp vấn đề

- Caacutec goacutei tin bị hủy bởi caacutec thiết bị mạng Mỗi thiết bị đều coacute những bộ

đệm nhằm lưu trữ những goacutei tin chưa kịp xử lyacute Để kiểm soaacutet bộ đệm

thocircng thường caacutec thiết bị sẽ sử dụng một số giải thuật nhằm duy trigrave

trật tự của bộ đệm như giải thuật DropTail RED DDR trong caacutec

giải thuật nagravey luocircn tồn tại phương aacuten hủy goacutei tin khi thỏa matilden điều

kiện hủy nhằm duy trigrave hoạt động tốt nhất cho thiết bị traacutenh tắc nghẽn

vagrave quaacute thời gian xử lyacute

4

Higravenh 12 Hiện tượng hủy goacutei tin trecircn bộ đệm của thiết bị

132 Thời gian đaacutep ứng (Response time)

Khi yecircu cầu được gửi tới sẽ coacute một khoảng thời gian dagravenh cho việc xử lyacute

trước khi trả về kết quả khoảng thời gian nagravey được gọi lagrave thời gian đaacutep ứng bao

gồm thời gian đi thời gian xử lyacute yecircu cầu vagrave thời gian về Đacircy lagrave tham số rất quan

trọng ảnh hưởng tới quaacute trigravenh đaacutenh giaacute khả năng giải quyết vấn đề khi coacute yecircu cầu

vagrave hạ tầng truyền thocircng Thời gian đaacutep ứng chậm thường do khả năng giải quyết

vấn đề của ứng dụng hạn chế trong truyền vagrave nhận thocircng tin trecircn giao thức vagrave hạ

tầng truyền thocircng tin Coacute thể chỉ ra một số caacutec yếu tố ảnh hưởng trực tiếp tới thời

gian đaacutep ứng như sau

Quaacute tải trong caacutec phacircn đoạn mạng

Caacutec lỗi xuất hiện trecircn mạng

Khiếm khuyết khi mở rộng mạng

Xử lyacute caacutec thocircng tin quảng baacute trecircn mạng chưa tốt

Thiết bị mạng keacutem chất lượng

Quaacute tải trecircn caacutec nuacutet mạng

5

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 2: tổng quan đánh giá hiệu năng mạng

thể xaacutec định caacutec ngưỡng giaacute trị của hệ thống qua việc xaacutec định mối tương quan

giữa caacutec yếu tố trước khi tồn tại hệ thống Nhưng khi aacutep dụng trong thực tế việc

mocirc tả đầy đủ caacutec yếu tố đầu vagraveo cho bagravei toaacuten lagrave cực kỳ khoacute khăn do vậy kết quả

của phương phaacutep nagravey cograven nhiều hạn chế

122 Phương phaacutep đo thực tế

Sau khi hệ thống mạng đatilde được xacircy dựng đacircy lagrave một hệ thống tổng thể

kết nối của caacutec thiết bị với những cocircng nghệ khaacutec nhau do vậy việc đo đạc để

đưa ra kết quả từ mocirc higravenh thật lagrave rất quan trọng Khi thực hiện đo thực tế người

đo phải dựng ra được caacutec kịch bản cần đo từ đoacute tạo ra những điều kiện giống với

kịch bản thực tế vagrave sử dụng caacutec cocircng cụ đo như phần mềm thiết bị đo để thu

nhận caacutec kết quả thực tế từ hoạt động của hệ thống theo kịch bản Thocircng thường

với phương phaacutep đo thực tế cho chuacuteng ta kết quả với độ chiacutenh xaacutec rất cao tuy

nhiecircn việc đầu tư quaacute lớn trước khi biết kết quả hoạt động nhiều khi gacircy ra sự

latildeng phiacute vigrave vậy giải phaacutep đo thực tế chỉ được sử dụng để giaacutem saacutet hoạt động

mạng Để đo được giaacute trị hiệu năng quan trọng nhất lagrave lấy thocircng tin chiacutenh xaacutec về

hệ thống Hiện nay phổ biến coacute 3 phương phaacutep lấy thocircng tin sau

Truy vấn caacutec nuacutet mạng để lấy trực tiếp thocircng tin đang lưu trữ

Theo dotildei luồng thocircng tin thực tế trecircn hệ thống

Xacircy dựng kịch bản với dữ liệu thử nghiệm để đo hệ thống

123 Phương phaacutep mocirc phỏng

Để giảm sai số của phương phaacutep toaacuten học giảm chi phiacute đầu tư cho hệ

thống trước khi đo trong thực tế phương phaacutep mocirc phỏng đatilde được sử dụng Việc

mocirc phỏng hệ thống đogravei hỏi phải mocirc tả chiacutenh xaacutec chacircn thực tiacutenh năng kỹ thuật

yếu tố ragraveng buộc giữa caacutec nhacircn tố tham gia vagrave ảnh hưởng tới hệ thống trong thực

tế khi xacircy dựng Như vậy để kết quả chiacutenh xaacutec đogravei hỏi cocircng taacutec mocirc tả kịch bản

phải rất chuẩn xaacutec Trong khuocircn khổ mocircn học chuacuteng ta sẽ đi sacircu vagraveo tigravem hiểu vagrave

2

aacutep dụng phương phaacutep mocirc phỏng vagraveo đaacutenh giaacute hiệu năng mạng Coacute hai phương

phaacutep chiacutenh được sử dụng trong mocirc phỏng hệ thống mạng lagrave mocirc phỏng thời gian

thực vagrave mocirc phỏng rời rạc Để mocirc phỏng theo thời gian thực lagrave rất khoacute do vậy

phương phaacutep phổ biến hiện nay lagrave mocirc phỏng rời rạc tức lagrave caacutec sự kiện được xaacutec

định rotilde ragraveng vagrave coacute thời điểm mocirc tả trecircn trục thời gian

13Caacutec tham số đaacutenh giaacute hiệu năng

Để lượng hoacutea vấn đề hiệu năng mạng cần thiết phải coacute bộ tham số tiecircu biểu

đặc trưng cho vấn đề nagravey Trong đoacute 5 tham số sau đacircy được sử dụng như những

khaacutei niệm điển higravenh magrave nhigraven vagraveo chuacuteng coacute thể cho thấy kết quả của đaacutenh giaacute

hiệu năng mạng

131 Tiacutenh sẵn sagraveng (Availability)

Tiacutenh sẵn sagraveng lagrave thước đo đầu tiecircn khi xaacutec định vagrave đaacutenh giaacute hiện trạng mạng

coacute khả năng phục vụ đaacutep ứng yecircu cầu hay khocircng Tham số nagravey cho pheacutep chỉ ra

luồng thocircng tin coacute đang được chuyển tiếp qua hệ thống mạng hay bị tắc nghẽn

cần phải xử lyacute caacutec dịch vụ mạng đang được cung cấp coacute sẵn sagraveng cho việc trả

lời caacutec yecircu cầu đưa ra Vấn đề liecircn thocircng giữa caacutec hệ thống trong mạng cũng

được đề cập trong tiacutenh sẵn sagraveng

Một trong caacutec cocircng cụ phương phaacutep đơn giản thường được sử dụng khi

kiểm tra tiacutenh sẵn sagraveng của hệ thống mạng lagrave sử dụng chương trigravenh ping Chương

trigravenh khi thực hiện sẽ gửi caacutec goacutei tin dưới giao thức ICMP tới phiacutea maacutey cần kiểm

tra vagrave đợi kết quả trả lời nếu coacute kết quả trả lời chuacuteng ta coacute thể xaacutec định được

tiacutenh sẵn sagraveng của hệ thống điacutech

3

Higravenh 11 Kiểm tra tiacutenh sẵn sagraveng với chương trigravenh ping

Trong viacute dụ trecircn yecircu cầu gửi đi đatilde coacute kết quả đaacutep ứng trong một số trường

hợp vagrave tigravenh huống thực tế việc mất goacutei tin thường xuyecircn xảy ra điều nay coacute thể

do nhiều nguyecircn nhacircn khaacutec nhau trong đoacute coacute một số nguyecircn nhacircn điển higravenh sau

- Xung đột xảy ra giữa caacutec phacircn đoạn mạng Caacutec giao thức điều khiển

truy cập đoacuteng vai trograve quan trọng trong quaacute trigravenh kiểm soaacutet xung đột

việc lựa chọn giao thức phugrave hợp ảnh hưởng lớn tới xử lyacute caacutec goacutei tin

khi hệ thống gặp vấn đề

- Caacutec goacutei tin bị hủy bởi caacutec thiết bị mạng Mỗi thiết bị đều coacute những bộ

đệm nhằm lưu trữ những goacutei tin chưa kịp xử lyacute Để kiểm soaacutet bộ đệm

thocircng thường caacutec thiết bị sẽ sử dụng một số giải thuật nhằm duy trigrave

trật tự của bộ đệm như giải thuật DropTail RED DDR trong caacutec

giải thuật nagravey luocircn tồn tại phương aacuten hủy goacutei tin khi thỏa matilden điều

kiện hủy nhằm duy trigrave hoạt động tốt nhất cho thiết bị traacutenh tắc nghẽn

vagrave quaacute thời gian xử lyacute

4

Higravenh 12 Hiện tượng hủy goacutei tin trecircn bộ đệm của thiết bị

132 Thời gian đaacutep ứng (Response time)

Khi yecircu cầu được gửi tới sẽ coacute một khoảng thời gian dagravenh cho việc xử lyacute

trước khi trả về kết quả khoảng thời gian nagravey được gọi lagrave thời gian đaacutep ứng bao

gồm thời gian đi thời gian xử lyacute yecircu cầu vagrave thời gian về Đacircy lagrave tham số rất quan

trọng ảnh hưởng tới quaacute trigravenh đaacutenh giaacute khả năng giải quyết vấn đề khi coacute yecircu cầu

vagrave hạ tầng truyền thocircng Thời gian đaacutep ứng chậm thường do khả năng giải quyết

vấn đề của ứng dụng hạn chế trong truyền vagrave nhận thocircng tin trecircn giao thức vagrave hạ

tầng truyền thocircng tin Coacute thể chỉ ra một số caacutec yếu tố ảnh hưởng trực tiếp tới thời

gian đaacutep ứng như sau

Quaacute tải trong caacutec phacircn đoạn mạng

Caacutec lỗi xuất hiện trecircn mạng

Khiếm khuyết khi mở rộng mạng

Xử lyacute caacutec thocircng tin quảng baacute trecircn mạng chưa tốt

Thiết bị mạng keacutem chất lượng

Quaacute tải trecircn caacutec nuacutet mạng

5

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 3: tổng quan đánh giá hiệu năng mạng

aacutep dụng phương phaacutep mocirc phỏng vagraveo đaacutenh giaacute hiệu năng mạng Coacute hai phương

phaacutep chiacutenh được sử dụng trong mocirc phỏng hệ thống mạng lagrave mocirc phỏng thời gian

thực vagrave mocirc phỏng rời rạc Để mocirc phỏng theo thời gian thực lagrave rất khoacute do vậy

phương phaacutep phổ biến hiện nay lagrave mocirc phỏng rời rạc tức lagrave caacutec sự kiện được xaacutec

định rotilde ragraveng vagrave coacute thời điểm mocirc tả trecircn trục thời gian

13Caacutec tham số đaacutenh giaacute hiệu năng

Để lượng hoacutea vấn đề hiệu năng mạng cần thiết phải coacute bộ tham số tiecircu biểu

đặc trưng cho vấn đề nagravey Trong đoacute 5 tham số sau đacircy được sử dụng như những

khaacutei niệm điển higravenh magrave nhigraven vagraveo chuacuteng coacute thể cho thấy kết quả của đaacutenh giaacute

hiệu năng mạng

131 Tiacutenh sẵn sagraveng (Availability)

Tiacutenh sẵn sagraveng lagrave thước đo đầu tiecircn khi xaacutec định vagrave đaacutenh giaacute hiện trạng mạng

coacute khả năng phục vụ đaacutep ứng yecircu cầu hay khocircng Tham số nagravey cho pheacutep chỉ ra

luồng thocircng tin coacute đang được chuyển tiếp qua hệ thống mạng hay bị tắc nghẽn

cần phải xử lyacute caacutec dịch vụ mạng đang được cung cấp coacute sẵn sagraveng cho việc trả

lời caacutec yecircu cầu đưa ra Vấn đề liecircn thocircng giữa caacutec hệ thống trong mạng cũng

được đề cập trong tiacutenh sẵn sagraveng

Một trong caacutec cocircng cụ phương phaacutep đơn giản thường được sử dụng khi

kiểm tra tiacutenh sẵn sagraveng của hệ thống mạng lagrave sử dụng chương trigravenh ping Chương

trigravenh khi thực hiện sẽ gửi caacutec goacutei tin dưới giao thức ICMP tới phiacutea maacutey cần kiểm

tra vagrave đợi kết quả trả lời nếu coacute kết quả trả lời chuacuteng ta coacute thể xaacutec định được

tiacutenh sẵn sagraveng của hệ thống điacutech

3

Higravenh 11 Kiểm tra tiacutenh sẵn sagraveng với chương trigravenh ping

Trong viacute dụ trecircn yecircu cầu gửi đi đatilde coacute kết quả đaacutep ứng trong một số trường

hợp vagrave tigravenh huống thực tế việc mất goacutei tin thường xuyecircn xảy ra điều nay coacute thể

do nhiều nguyecircn nhacircn khaacutec nhau trong đoacute coacute một số nguyecircn nhacircn điển higravenh sau

- Xung đột xảy ra giữa caacutec phacircn đoạn mạng Caacutec giao thức điều khiển

truy cập đoacuteng vai trograve quan trọng trong quaacute trigravenh kiểm soaacutet xung đột

việc lựa chọn giao thức phugrave hợp ảnh hưởng lớn tới xử lyacute caacutec goacutei tin

khi hệ thống gặp vấn đề

- Caacutec goacutei tin bị hủy bởi caacutec thiết bị mạng Mỗi thiết bị đều coacute những bộ

đệm nhằm lưu trữ những goacutei tin chưa kịp xử lyacute Để kiểm soaacutet bộ đệm

thocircng thường caacutec thiết bị sẽ sử dụng một số giải thuật nhằm duy trigrave

trật tự của bộ đệm như giải thuật DropTail RED DDR trong caacutec

giải thuật nagravey luocircn tồn tại phương aacuten hủy goacutei tin khi thỏa matilden điều

kiện hủy nhằm duy trigrave hoạt động tốt nhất cho thiết bị traacutenh tắc nghẽn

vagrave quaacute thời gian xử lyacute

4

Higravenh 12 Hiện tượng hủy goacutei tin trecircn bộ đệm của thiết bị

132 Thời gian đaacutep ứng (Response time)

Khi yecircu cầu được gửi tới sẽ coacute một khoảng thời gian dagravenh cho việc xử lyacute

trước khi trả về kết quả khoảng thời gian nagravey được gọi lagrave thời gian đaacutep ứng bao

gồm thời gian đi thời gian xử lyacute yecircu cầu vagrave thời gian về Đacircy lagrave tham số rất quan

trọng ảnh hưởng tới quaacute trigravenh đaacutenh giaacute khả năng giải quyết vấn đề khi coacute yecircu cầu

vagrave hạ tầng truyền thocircng Thời gian đaacutep ứng chậm thường do khả năng giải quyết

vấn đề của ứng dụng hạn chế trong truyền vagrave nhận thocircng tin trecircn giao thức vagrave hạ

tầng truyền thocircng tin Coacute thể chỉ ra một số caacutec yếu tố ảnh hưởng trực tiếp tới thời

gian đaacutep ứng như sau

Quaacute tải trong caacutec phacircn đoạn mạng

Caacutec lỗi xuất hiện trecircn mạng

Khiếm khuyết khi mở rộng mạng

Xử lyacute caacutec thocircng tin quảng baacute trecircn mạng chưa tốt

Thiết bị mạng keacutem chất lượng

Quaacute tải trecircn caacutec nuacutet mạng

5

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 4: tổng quan đánh giá hiệu năng mạng

Higravenh 11 Kiểm tra tiacutenh sẵn sagraveng với chương trigravenh ping

Trong viacute dụ trecircn yecircu cầu gửi đi đatilde coacute kết quả đaacutep ứng trong một số trường

hợp vagrave tigravenh huống thực tế việc mất goacutei tin thường xuyecircn xảy ra điều nay coacute thể

do nhiều nguyecircn nhacircn khaacutec nhau trong đoacute coacute một số nguyecircn nhacircn điển higravenh sau

- Xung đột xảy ra giữa caacutec phacircn đoạn mạng Caacutec giao thức điều khiển

truy cập đoacuteng vai trograve quan trọng trong quaacute trigravenh kiểm soaacutet xung đột

việc lựa chọn giao thức phugrave hợp ảnh hưởng lớn tới xử lyacute caacutec goacutei tin

khi hệ thống gặp vấn đề

- Caacutec goacutei tin bị hủy bởi caacutec thiết bị mạng Mỗi thiết bị đều coacute những bộ

đệm nhằm lưu trữ những goacutei tin chưa kịp xử lyacute Để kiểm soaacutet bộ đệm

thocircng thường caacutec thiết bị sẽ sử dụng một số giải thuật nhằm duy trigrave

trật tự của bộ đệm như giải thuật DropTail RED DDR trong caacutec

giải thuật nagravey luocircn tồn tại phương aacuten hủy goacutei tin khi thỏa matilden điều

kiện hủy nhằm duy trigrave hoạt động tốt nhất cho thiết bị traacutenh tắc nghẽn

vagrave quaacute thời gian xử lyacute

4

Higravenh 12 Hiện tượng hủy goacutei tin trecircn bộ đệm của thiết bị

132 Thời gian đaacutep ứng (Response time)

Khi yecircu cầu được gửi tới sẽ coacute một khoảng thời gian dagravenh cho việc xử lyacute

trước khi trả về kết quả khoảng thời gian nagravey được gọi lagrave thời gian đaacutep ứng bao

gồm thời gian đi thời gian xử lyacute yecircu cầu vagrave thời gian về Đacircy lagrave tham số rất quan

trọng ảnh hưởng tới quaacute trigravenh đaacutenh giaacute khả năng giải quyết vấn đề khi coacute yecircu cầu

vagrave hạ tầng truyền thocircng Thời gian đaacutep ứng chậm thường do khả năng giải quyết

vấn đề của ứng dụng hạn chế trong truyền vagrave nhận thocircng tin trecircn giao thức vagrave hạ

tầng truyền thocircng tin Coacute thể chỉ ra một số caacutec yếu tố ảnh hưởng trực tiếp tới thời

gian đaacutep ứng như sau

Quaacute tải trong caacutec phacircn đoạn mạng

Caacutec lỗi xuất hiện trecircn mạng

Khiếm khuyết khi mở rộng mạng

Xử lyacute caacutec thocircng tin quảng baacute trecircn mạng chưa tốt

Thiết bị mạng keacutem chất lượng

Quaacute tải trecircn caacutec nuacutet mạng

5

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 5: tổng quan đánh giá hiệu năng mạng

Higravenh 12 Hiện tượng hủy goacutei tin trecircn bộ đệm của thiết bị

132 Thời gian đaacutep ứng (Response time)

Khi yecircu cầu được gửi tới sẽ coacute một khoảng thời gian dagravenh cho việc xử lyacute

trước khi trả về kết quả khoảng thời gian nagravey được gọi lagrave thời gian đaacutep ứng bao

gồm thời gian đi thời gian xử lyacute yecircu cầu vagrave thời gian về Đacircy lagrave tham số rất quan

trọng ảnh hưởng tới quaacute trigravenh đaacutenh giaacute khả năng giải quyết vấn đề khi coacute yecircu cầu

vagrave hạ tầng truyền thocircng Thời gian đaacutep ứng chậm thường do khả năng giải quyết

vấn đề của ứng dụng hạn chế trong truyền vagrave nhận thocircng tin trecircn giao thức vagrave hạ

tầng truyền thocircng tin Coacute thể chỉ ra một số caacutec yếu tố ảnh hưởng trực tiếp tới thời

gian đaacutep ứng như sau

Quaacute tải trong caacutec phacircn đoạn mạng

Caacutec lỗi xuất hiện trecircn mạng

Khiếm khuyết khi mở rộng mạng

Xử lyacute caacutec thocircng tin quảng baacute trecircn mạng chưa tốt

Thiết bị mạng keacutem chất lượng

Quaacute tải trecircn caacutec nuacutet mạng

5

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 6: tổng quan đánh giá hiệu năng mạng

Trong higravenh 11 khi sử dụng chương trigravenh ping cho chuacuteng ta kết quả như

sau

64 bytes from 1921681100 icmp_seq=0 ttl=255

time=0712 ms

Thời gian đaacutep ứng được đo bằng milli giacircy (ms) Thocircng thường với caacutec

kết nối mạng LAN thigrave thời gian đaacutep ứng nhỏ hơn 1 hoặc 2 milli giacircy với caacutec kết

nối mạng WAN thời gian đaacutep ứng coacute thể lecircn tới 200 hoặc 300 milli giacircy lagrave chấp

nhận được giaacute trị cụ thể tugravey thuộc vagraveo tốc độ đường truyền giữa caacutec hệ thống

Trong minh họa trecircn thời gian đaacutep ứng trung bigravenh khi sử dụng chương

trigravenh ping đatilde được xaacutec định

round-trip minavgmaxstddev =

2940299231330060 ms

133 Khả năng sử dụng mạng (Network utilization)

Khi hệ thống mạng hoạt động việc đaacutenh giaacute khả năng sử dụng mạng lagrave

yếu tố quan trọng khi cần đaacutenh giaacute hiệu năng mạng Hệ thống mạng coacute thể hoạt

động ở trạng thaacutei bigravenh thường trong đa số thời gian tuy nhiecircn trong thực tế thigrave hệ

thống coacute thể chưa hoạt động hết cocircng suất vagrave khả năng như vậy phần dư thừa

khi xacircy dựng mạng chưa tiacutenh đến cũng lagrave yếu tố giảm đi hiệu năng của hệ thống

Để tiacutenh tham số khả năng sử dụng mạng thocircng thường cocircng thức chiacutenh được sử

dụng lagrave phần trăm thời gian sử dụng mạng trong suốt thời gian hoạt động mạng

Trong rất nhiều tigravenh huống coacute những thời điểm hệ thống sử dụng 100 cocircng

suất nhưng coacute những thời điểm lagrave về 0 cho trạng thaacutei khocircng coacute yecircu cầu Để

tăng tiacutenh chiacutenh xaacutec khi xaacutec định khả năng sử dụng mạng việc tiacutenh toaacuten lưu

lượng dữ liệu được truyền qua hệ thống trong tổng thời gian hoạt động đatilde được

sử dụng Giaacute trị cụ thể khi tiacutenh toaacuten cograven phụ thuộc nhiều vagraveo phương thức truyền

trecircn caacutec kết nối được sử dụng tại caacutec giao diện mạng Viacute dụ ở chế độ truyền baacuten

6

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 7: tổng quan đánh giá hiệu năng mạng

song cocircng (Half duplex) chỉ coacute dữ liệu một chiều tại một thời điểm vagrave như vậy

việc tiacutenh khả năng sử dụng mạng liecircn quan tới tỷ lệ tổng lượng vagraveo ra trong suốt

thời gian trecircn khả năng của thiết bị tại thời điểm đo Cocircng thức tiacutenh khả năng sử

dụng mạng như sau

NU = 100(DS + DR) (TP ST)

NU (Network Ultilization) Khả năng sử dụng mạng

được đo bằng tỉ lệ phần trăm

DS (Data send) Lượng dữ liệu được gửi đi trong

thực tế

DR (Data receive) Lượng dữ liệu nhận về trong thực

tế

TP (Throughput) Thocircng lượng cho pheacutep của kết nối

ST (Sample Time) Thời gian hoạt động

Viacute dụ Với thocircng lượng cho pheacutep 10MB ở chế độ kết nối baacuten song cocircng

thực hiện đo trong thời gian 5 giacircy lượng dữ liệu gửi đi lagrave 700000 bytes vagrave dữ

liệu nhận về lagrave 175000 bytes chuacuteng ta coacute

NU = 1008(700000 + 175000) (1010241024 5) =

14

Trong viacute dụ trecircn việc tiacutenh toaacuten khả năng sử dụng mạng tại một nuacutet coacute thể

được thực hiện rất đơn giản tuy nhiecircn trong trường hợp cần tiacutenh toaacuten khả năng

sử udngj mạng giữa 2 hay nhiều nuacutet thigrave độ phức tạp của bagravei toaacuten đatilde khaacutec biệt

Bạn phải tiacutenh khả năng sử dụng mạng trecircn từng phacircn đoạn mạng trong toagraven bộ

kết nối cần đo aacutep dụng caacutec phương phaacutep toaacuten học thống kecirc trong việc xaacutec

định vagrave lựa chọn cocircng thức phugrave hợp cho từng trường hợp Nhưng trong trường

hợp nagravey thocircng thường người ta khocircng tiacutenh toaacuten thocircng số khả năng sử dụng

mạng magrave xaacutec định giaacute trị thocircng lượng mạng tại 2 điểm cần đo

7

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 8: tổng quan đánh giá hiệu năng mạng

134 Thocircng lượng mạng (Network throughput)

Về bản chất khả năng sử dụng mạng chiacutenh lagrave tỉ lệ lagravem việc thực tế của hệ

thống cograven thocircng lượng mạng lagrave tổng lượng dữ liệu chuyển tiếp qua caacutec nuacutet cần

đo trong một thời điểm xaacutec định

Người quản trị hệ thống mạng coacute thể xaacutec định thocircng lượng mạng bằng

phương phaacutep tigravem nuacutet cổ chai giữa 2 điểm cần đo Đồng thời trong một số tigravenh

huống nhiều người sẽ khẳng định thocircng lượng của hai điểm sẽ được xaacutec định

bằng giaacute trị băng thocircng (Bandwidth) tại 2 điểm đoacute Những điểm necircu trecircn lagrave hoagraven

toagraven khocircng chiacutenh xaacutec bởi 2 lyacute do chiacutenh sau đacircy

- Giaacute trị băng thocircng khocircng phụ thuộc vagraveo thời gian đo vagrave đacircy lagrave khaacutei

niệm khaacutec hoagraven toagraven với thocircng lượng

- Thocircng lượng thực tế phụ thuộc rất nhiều vagraveo tổng thể kết nối thiết bị

sử dụng ứng dụng hoạt động dịch vụ cung cấp của hệ thống tại thời

điểm cần đo

Higravenh 13 Độ phức tạp khi xaacutec định thocircng lượng giữa client vagrave server

135 Khả năng của băng thocircng mạng (Network bandwidth capacity)

Khả năng của băng thocircng lagrave một trong những yếu tố để xaacutec định thocircng

lượng mạng trong thời điểm cần đo Tổng dung lượng băng thocircng coacute khả năng

giữa hai nuacutet mạng sẽ ảnh hưởng lớn tới hiệu năng của mạng điều nagravey lagrave khaacute hiển

8

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 9: tổng quan đánh giá hiệu năng mạng

nhiecircn khi ta kết nối mạng 100BaseTX thigrave đương nhiecircn luocircn nhanh hơn với kết

nối T1 Tuy nhiecircn việc xaacutec định khẳ năng của băng thocircng giữa 2 điểm cần đo

thường rất phức tạp do tổng thể kết nối của hệ thống taacutec động (mocirc tả tại higravenh

13) do vậy đogravei hỏi phải coacute kỹ thuật cụ thể trong việc xaacutec định giaacute trị lớn nhất

trong khả năng của băng thocircng mạng khi hoạt động Coacute 2 kỹ thuật chiacutenh được sử

dụng để xaacutec định khả năng băng thocircng đoacute lagrave kỹ thuật packet pairpacket train vagrave

kỹ thuật thống kecirc goacutei tin

Higravenh 14 Minh họa kỹ thuật packet pairpacket train

14Phần mềm đaacutenh giaacute hiệu năng

141 Ns2

Đacircy lagrave phần mềm mocirc phỏng mạng được phaacutet triển từ đại học California

Berkeley nhằm thay thế cho phương phaacutep đo đạc trecircn hệ thống thực Ns2 lagrave goacutei

phần mềm mocirc phỏng theo phương phaacutep rời rạc đacircy lagrave phần mềm tổng thể coacute sự

tham gia của ngocircn ngữ C++ Tcl oTcl Hiện tại số lượng caacutec module đatilde được

xacircy dựng trong goacutei phần mềm Ns2 lagrave rất lớn như nam ns xgraph awk

142 SSFNet

SSFNet ứng dụng bộ cocircng cụ phaacutet triển SSF (Scalable Simulation

Framework) đacircy lagrave ngocircn ngữ mocirc phỏng tương đối chuẩn coacute khả năng triển khai

mocirc higravenh hoacutea mocirc phỏng của nhiều yếu tố mạng lưu lượng mạng Ngoagravei SSFNet

sử dụng trong SSF để mocirc phỏng mạng cograven coacute phần mềm DaSSF (Dartmouth

SSF) Cả hai goacutei trecircn đều coacute thể triển khai mocirc higravenh mạng khi mocirc phỏng caacutec

9

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 10: tổng quan đánh giá hiệu năng mạng

mạng cỡ lớn Goacutei DaSSF sử dụng ngocircn ngữ C++ để mocirc phỏng thiết bị kết nối

sự kiện Goacutei SSFNet sử dụng ngocircn ngữ Java

143 Một số phần mềm

Ngoagravei hai phần mềm becircn trecircn cograven coacute nhiều phần mềm mocirc phỏng mạng

viễn thocircng vệ tinh giao thức như OPNET OmNet++ Packet Tracer Tuy

nhiecircn mỗi phần mềm thường tập trung riecircng biệt cho caacutec đối tượng sử dụng cụ

thể vagrave chạy trecircn hệ điều hagravenh đatilde xaacutec định do vậy chuacuteng đều coacute những hạn chế

nhất định Để đaacutep ứng nhu cầu mocirc phỏng hệ thống trecircn caacutec cấp độ khaacutec nhau thigrave

phần mềm NS2 được đaacutenh giaacute lagrave hagraveng đầu bởi tiacutenh mở cũng như khả năng

chuyecircn sacircu của hệ thống

10

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 11: tổng quan đánh giá hiệu năng mạng

CHƯƠNG 2 COcircNG CỤ MOcirc PHỎNG MẠNG - NS2

21 Tổng Quan NS2

NS (Network Simulator) lagrave phần mềm mocirc phỏng mạng theo phương thức

điều khiển sự kiện rời rạc vagrave hướng đối tượng Được phaacutet triển tại đại học

California Berkeley viết bằng ngocircn ngữ C++ vagrave OTcl Tcl NS rất hữu iacutech cho

việc mocirc phỏng mạng diện rộng (WAN) vagrave mạng nội bộ (LAN) ngoagravei ra NS cograven

coacute khả năng mocirc phỏng rất nhiều lĩnh vực như mạng thocircng tin di động thocircng tin

vệ tinh Khi sử dụng NS chuacuteng ta coacute thể thực hiện được một số khả năng sau

Khả năng kiểm tra tiacutenh ổn định của caacutec giao thức mạng

Khả năng đaacutenh giaacute caacutec giao thức mới trước khi đưa vagraveo sử dụng

Khả năng thực thi những mocirc higravenh mạng lớn magrave gần như ta khocircng thể triển

khai được trong thực tế

Khả năng mocirc phỏng nhiều loại mạng khaacutec nhau

Đatilde coacute nhiều phiecircn bản NS khaacutec nhau nhưng hiện nay phổ biến lagrave phiecircn bản

Ns2 coacute thể cagravei đặt vagrave hoạt động cả trecircn Windows32 vagrave Linux

22 Một số lớp trong mocirci trường NS2

221 TclObject

Lớp TclObject lagrave lớp cơ sở đối cho hầu hết caacutec lớp khaacutec trong trigravenh thocircng

dịch vagrave trigravenh biecircn dịch phacircn cấp Mỗi đối tượng trong lớp TclObject được tạo ra

bởi người dugraveng từ becircn trong trigravenh thocircng dịch Một đối tượng boacuteng (shadow

object) tương đương được tạo ra trong trigravenh biecircn dịch phacircn cấp Hai đối tượng coacute

quan hệ chặt chẽ với nhau Lớp TclClass bao gồm caacutec cơ chế dugraveng để thực thi

đối tượng boacuteng (shadow) nagravey

Điểm khaacutec biệt với NS v1 lớp TclObject được đưa vagraveo sớm hơn lớp NsObject

Vigrave thế noacute lưu trữ giao diện caacutec kết nối thay đổi kết nối caacutec đặc tiacutenh khaacutec nhau

trong caacutec đối tượng thocircng dịch sao cho phugrave hợp với caacutec biến thagravenh viecircn của đối

11

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 12: tổng quan đánh giá hiệu năng mạng

tượng biecircn dịch Quaacute trigravenh kết nối mạnh hơn trong NS v1 vigrave bất kỳ sự thay đổi

nagraveo liecircn quan đến caacutec biến của OTcl đều được giữ lại vagrave caacutec giaacute trị hiện tại của

C++ vagrave OTcl đều được nhất quaacuten sau mỗi truy suất trong trigravenh thocircng dịch Sự

nhất quaacuten được thực hiện thocircng qua lớp InstVar Vagrave cũng khocircng giống NS v1

caacutec đối tượng trong lớp TclObject khocircng lưu trữ dagravei như trong một danh saacutech

liecircn kết chung Thay vigrave vậy chuacuteng được lưu trữ trong bảng phacircn cấp (hash table)

becircn trong lớp Tcl

Minh họa cấu higravenh của một đối tượng TclObject Viacute dụ sau đacircy minh họa cho

quaacute trigravenh cấu higravenh một taacutec nhacircn SRM (lớp AgentSRMAdaptive)

set srm [new AgentSRMAdaptive]

$srm set packetSize_ 1024

$srm traffic-source $s0

Quy ước trong NS lớp AgentSRMAdaptive lagrave lớp con của AgentSRM

AgentSRM lagrave lớp con của Agent Agent lagrave lớp con của TclObject Tương ứng

với lớp biecircn dịch phacircn cấp lagrave ASRMAgent lagrave lớp con của SRMAgent

SRMAgent lagrave lớp con của Agent Agent lagrave lớp con của TclObject

Dograveng lệnh đầu tiecircn cho biết caacutech một đối tượng TclObject được tạo ra (hay hủy

bỏ)

Dograveng lệnh thứ hai cấu higravenh một biến giới hạn (bound variable)

Dograveng lệnh cuối cugraveng trigravenh bagravey quaacute trigravenh đối tượng thocircng dịch gọi phương thức

C++ khi chuacuteng đatilde lagrave một thủ tục đặc tiacutenh (instance)

222 TclClass

Lớp biecircn dịch nagravey (TclClass) lagrave một lớp ảo hogravean togravean Caacutec lớp nagravey xuất phaacutet từ

lớp cơ sở cung cấp hai chức năng sau

12

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 13: tổng quan đánh giá hiệu năng mạng

Tạo cấu truacutec cho lớp trigravenh trigravenh thocircng dịch phacircn cấp để phản aacutenh lớp biecircn dịch

phacircn cấp

Cung cấp caacutec phương thức để minh họa đối tượng TclObject mới

Mỗi lớp con đoacute coacute quan hệ chặt chẽ với mocirct lớp biecircn dịch đặc biệt trong lớp biecircn

dịch phacircn cấp vagrave coacute thể minh họa cho caacutec đối tượng mới trong caacutec lớp kết hợp

(associated)

Viacute dụ xem xeacutet lớp RenoTcpClass Noacute lagrave xuất phaacutet từ lớp TclClass vagrave được coacute

quan hệ chặt chẽ với lớp RenoTcpClass Noacute sẽ minh họa cho caacutec đối tượng mới

trong lớp RenoTcpAgent Lớp biecircn dịch phacircn cấp của RenoTcpAgent lagrave lớp xuất

phaacutet từ TcpAgent magrave lagrave lớp xuất phaacutet từ Agent magrave lagrave lớp xuất phaacutet TlcObject

RenoTcpClass được định nghĩa như sau

static class RenoTcpClass public TclClass

public

RenoTcpClass() TclClass(AgentTCPReno)

TclObject create(int argc const charconst argv)

return (new RenoTcpAgent())

class_reno

Chuacuteng ta coacute thể theo dotildei từ những định nghĩa sau

Lớp chỉ xaacutec định một quaacute trigravenh tạo cấu truacutec vagrave một phương thức thecircm vagraveo

để tạo ra caacutec đặc tiacutenh cho caacutec đối tượng liecircn kết TclObject

NS sẽ tiến hagravenh tạo cấu truacutec cho RenoTcpClass với biến tĩnh class_reno vagraveo

luacutec bắt đầu Noacute sẽ cagravei đặt caacutec phương thức vagrave lớp thocircng dịch phacircn cấp phugrave

hợp

Quaacute trigravenh tạo cấu truacutec ghi rotilde lớp thocircng dịch như AgentTCPReno Điều nagravey

cũng được chỉ định rotilde trong lớp thocircng dịch phacircn cấp

13

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 14: tổng quan đánh giá hiệu năng mạng

Quaacute trigravenh tạo cấu truacutec trong lớp TclClass tạo ra 3 lớp AgentTCPReno lagrave lớp

con của AgentTCP lagrave lớp con của lớp Agent lagrave lớp con của lớp TclObject

Nhớ rằng quy ước trong NS sử dụng kyacute hiệu ldquordquođể phacircn taacutech Viacute dụ ABCD

lagrave lớp con của ABC ABC lagrave lớp con của AB hellip

Lớp nagravey liecircn kết chặt chẽ với lớp RenoTcpAgent noacute tạo ra caacutec đối tượng mới

trong lớp liecircn kết nagravey

Phương thức The RenoTcpClasscreate trả về đối tượng TclObjects trong lớp

RenoTcpAgent

Khi người sử dụng ghi rotilde new AgentTCPReno thủ tục

RenoTcpClasscreate đựơc gọi

Caacutec đối số vector (argv) gồm coacute

argv[0] lưu trữ tecircn của đối tượng

s argv[13] lưu trữ $self $class and $proc Vigrave create được gọi thocircng

qua thủ tục đặc tiacutenh create-shadow

argv[3] lưu trữ create-shadow

argv[4] lưu trữ bất kỳ đối số được thecircm vagraveo (đưa vagraveo một chuỗi) cung

cấp bởi người sử dụng

Lớp Trace minh hoạ caacutec đối số điều khiển bởi caacutec phương thức TclClass

class TraceClass public TclClass

public

TraceClass() TclClass(Trace)

TclObject create(int args const charconst argv)

if (args gt= 5)

return (new Trace(argv[4]))

else

return NULL

14

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 15: tổng quan đánh giá hiệu năng mạng

trace_class

Một đối tượng Trace mới được tạo như sau

new Trace ldquoXrdquo

Cuối cugraveng thực chất của vấn đế lagrave lagravem thế nagraveo để lớp thocircng dịch phacircn cấp được

cấu truacutec hoacutea

1 Quaacute trigravenh tạo cấu truacutec đối tượng được thực thi khi NS bắt đầu

2 Quaacute trigravenh tạo cấu truacutec nagravey gọi quaacute trigravenh tạo cấu truacutec lớp TclClass với tecircn của

lớp thocircng dịch như đối số của noacute

3 Cấu truacutec của lớp Tcl lưu trữ tecircn của lớp vagrave thecircm đối tượng nagravey vagraveo trong một

danh saacutech liecircn kết của caacutec đối tượng TclClass

4 Trong suốt quaacute trigravenh khởi tạo của trigravenh mocirc phỏng Tcl_AppInit(void) gọi

TclClassbind(void)

5 Đối với mỗi đối tượng trong danh saacutec caacutec đối tượng TclClass bind() gọi

register ghi rotilde tecircn của lớp thocircng dịch như đối số của noacute

6 register thiết lập lớp phacircn cấp quaacute trigravenh tạo lớp được yecircu cầu vagrave chưa được

tạo

7 Cuối cugraveng bind() xaacutec định caacutec thủ tục đặc tiacutenh (instance) create-shadow vagrave

delete-shadow cho lớp mới nagravey

223 TclCommand

Lớp nagravey cung cấp cơ chế để NS đưa caacutec lệnh đơn giản đến trigravenh thocircng dịch sau

đoacute coacute thể được thi becircn trong một ngữ cảnh chung (context) bởi trigravenh thocircng dịch

224 EmbeddedTcl

NS cho pheacutep phaacutet triển caacutec chức năng ở trong matilde trigravenh biecircn dịch hay thocircng qua

matilde thocircng dịch điều đoacute được xaacutec định tại quaacute trigravenh khởi tạo

225 InstVar

15

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 16: tổng quan đánh giá hiệu năng mạng

Phần nagravey mocirc tả caacutec phần becircn trong lớp InstVar Lớp nagravey định nghĩa caacutec phương

thức vagrave caacutec cơ chế để kết nối một biến thagravenh viecircn C++ trong đối tượng của trigravenh

biecircn dịch shadow đến biến đặc tả OTcl trong đối tượng tương đương của trigravenh

thocircng dịch Quaacute trigravenh kết nối được cagravei đặt sao cho giaacute trị của biến coacute thể được

tập hợp hay truy suất trong cả trigravenh thocircng dịch lẫn trigravenh biecircn dịch tại tất cả caacutec

thời điểm Coacute 5 lớp biến

- Lớp InstVarReal

- Lớp InstVarTime

- Lớp InstVarBandwidth

- Lớp InstVarInt

- Lớp InstVarBool

Tương đương với quaacute trigravenh kết nối caacutec biến coacute giaacute trị real time bandwidth

interger vagrave Boolean theo thứ tự

Bacircy giờ chuacuteng ta mocirc tả cơ chế thocircng qua quaacute trigravenh cagravei đặt caacutec biến Chuacuteng ta sử

dụng lớp InstVarReal cho mocirc tả cơ sở Tuy nhiecircn cơ chế nagravey coacute thể ứng dụng

với cả 5 dạng của caacutec biến

Khi cagravei đặt một biến cho trigravenh thocircng dịch để truy suất đến một biến thagravenh viecircn

caacutec hagravem thagravenh viecircn của lớp InstVar thực thi becircn trong quaacute trigravenh thực thi caacutec

phương phaacutep tiếp cận Vigrave vậy chuacuteng khocircng yecircu cầu trigravenh thocircng dịch phải xaacutec

định ngữ cảnh nagraveo biến nagravey phải tồn tại

Để đảm bảo mức chiacutenh xaacutec trong quaacute trigravenh thực thi một biến chỉ biecircn dịch khi

loacutep của noacute sẵn sagraveng thiết lập becircn trong trigravenh thocircng dịch vagrave trigravenh thocircng dịch phải

đang được tiến hagravenh trecircn một đối tượng trong lớp đoacute Chuacute yacute rằng những nhagrave phaacutet

minh yecircu cầu khi một phương thức được đưa ra trong một lớp phải lagravem cho caacutec

biến coacute thể truy suất thocircng qua trigravenh thocircng dịch ở đoacute phải lagrave lagrave lớpliecircn kết

16

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 17: tổng quan đánh giá hiệu năng mạng

TclClass Phương thức tiếp cận quaacute trigravenh thực thi coacute thể được tạo ra bởi một hay

hai caacutech

- Caacutech thứ nhất lagrave khi một đối tượng TclObject được tạo ra becircn trong trigravenh thocircng

dịch Từ đacircy cagravei đặt quaacute trigravenh thực thi phương thức becircn trong trigravenh thocircng dịch

Khi biecircn dịch đối tượng shadow của trigravenh thocircng dịch đối tượng TclObject được

tạo ra Quaacute trigravenh tạo ra cấu truacutec magrave đối tượng biecircn dịch coacute thể kết nối caacutec biến

thagravenh viecircn của đối tượng đoacute để thocircng dịch caacutec biến trong khi tạo ra đối tượng

thocircng dịch mới hơn

- Caacutech thứ hai lagrave định nghĩa một biến kết hợp becircn trong một hagravem lệnh sau đoacute

được gọi thocircng qua phương thức cmd Quaacute trigravenh thực thi phương thức một caacutech

chiacutenh xaacutec được thiết lập để magrave thực thi phương thức cmd Ngược lại matilde trigravenh

biecircn dịch được đang thực thi trecircn quaacute trigravenh tiếp cận đối tượng shadow vagrave coacute thể

vigrave vậy kết nối một caacutech cẩn thận caacutec biến thagravenh viecircn yecircu cầu

Một biến được tạo ra bằng caacutech chỉ ra tecircn của biến thocircng dịch vagrave địa chỉ của caacutec

biến thagravenh viecircn trong quaacute trigravenh biecircn dịch Quaacute trigravenh tạo cấu truacutec cho lớp cơ sở

InstVar tạo ra một biến cụ thể trong trigravenh thocircng dịch vagrave sau đoacute cagravei đặt thủ tục giữ

lại (trap) để bắt tất cả caacutec truy suấ đến biến thocircng qua trigravenh thocircng dịchl

Bất cứ khi nagraveo biến được đọc thocircng qua trigravenh thocircng dịch thủ tục trap cũng được

gọi trước khi đọc Thủ tục gọi một tập caacutec hagravem thiacutech hợp trả về giaacute trị hiện tại

của biến Giaacute trị nagravey sau đoacute được sử dụng để tập hơp giaacute trị của biến trigravenh thocircng

dịch sau đoacute được đọc bởi trigravenh thocircng dịch

Ngược lại bất cứ khi nagraveo biết được tập hợp thocircng qua quaacute trigravenh thocircng dịch thủ

tục trap được gọi sau khi tập hợp giaacute trị của thagravenh viecircn biecircn dịch đến giaacute trị hiện

được tập hợp becircn trong trigravenh thocircng dịch

23 Mocirc phỏng (Simulation)

17

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 18: tổng quan đánh giá hiệu năng mạng

Toagraven bộ việc mocirc phỏng được mocirc tả bởi Tclclass Simulation Noacute cung cấp một

tập hợp giao diện để cấu higravenh một mocirc phỏng vagrave lựa chọn kiểu lập trigravenh sự kiện

thường dugraveng điều khiển mocirc phỏng Một tập lệnh mocirc phỏng thường bắt đầu bằng

việc tạo một trường hợp cụ thể của lớp nagravey vagrave gọi caacutec phương thức khaacutec nhau để

tạo nuacutet caacutec cấu higravenh (topologies) vagrave cấu higravenh diện mạo becircn ngoagravei của việc mocirc

phỏng

231 Khởi tạo mocirc phỏng

Khi một đối tượng mocirc phỏng mới được tạo ra trong Tcl caacutec thủ tục khởi tạo

thực thi caacutec hoạt động sau

- Khởi tạo định dạng goacutei tin ( gọi create_packetformat)

- Tạo một lịch lập trigravenh( mặc định tới một lịch lập trigravenh)

- Tạo một ldquonull agentrdquo taacutec nhacircn rỗng (loại bỏ vugraveng đatilde được sử dụng trong caacutec

nơi khaacutec nhau )

Việc khởi tạo định dạng goacutei sẽ thiết lập vugraveng offset trong phạm vi caacutec goacutei đatilde

được sử dụng bởi toagraven bộ việc mocirc phỏng Noacute được mocirc tả chi tiết hơn trong caacutec

chương tiếp theo Lịch lập trigravenh chạy mocirc phỏng theo caacutech điều khiển sự kiện vagrave

coacute thể được thay thế bởi caacutec lịch lập trigravenh luacircn phiecircn được cung cấp với ngữ

nghĩa khaacutec(Xem phần tiếp theo để biết chi tiết hơn)

Taacutec nhacircn rỗng (null agent) được tạo với việc gọi

set nullAgent_ [new AgentNull]

Taacutec nhacircn nagravey noacutei chung rất coacute iacutech như một vugraveng cho việc loại bỏ caacutec goacutei hay

như một điacutech đến cho caacutec goacutei khocircng coacute giaacute trị hay khocircng ghi lại được

232 Lịch lập trigravenh vagrave caacutec sự kiện

Việc mocirc phỏng lagrave một mocirc phỏng điều khiển sự kiện Hiện nay coacute 4 kiểu

lịch lập trigravenh mỗi caacutei sử dụng một cấu truacutec dữ liệu khaacutec nhau một danh saacutech

liecircn kết đơn heap (vun đống) hagraveng đợi lịch vagrave một kiểu đặc biệt được gọi lagrave

18

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 19: tổng quan đánh giá hiệu năng mạng

ldquothời gian thựcrdquo (real-time) Mỗi caacutei sẽ được mocirc tả cụ thể dưới đacircy Lịch lập

trigravenh chạy bằng caacutech chọn ra sự kiện sớm nhất kế tiếp thực thi noacute tới khi hoagraven

thagravenh vagrave quay trở lại thực thi sự kiện tiếp theo Đơn vị thời gian sử dụng trong

lịch lập trigravenh lagrave giacircy Hiện tại việc mocirc phỏng lagrave đơn tuyến chỉ một sự kiện được

thực thi tại một thời điểm Nếu coacute nhiều hơn một sự kiện được lập trigravenh để thực

thi trong cugraveng thời gian thigrave việc thực thi được thực hiện trecircn một lịch lập trigravenh

đầu tiecircn ndash caacutei đầu tiecircn được gởi đi Caacutec sự kiện đồng thời khocircng được sắp xếp lại

theo bất cứ lịch lập trigravenh nagraveo vagrave tất cả caacutec lịch lập trigravenh necircn sắp theo thứ tự

giống nhau để gởi đi đến cugraveng một điểm vagraveo

233 Danh saacutech lịch lập trigravenh

Lớp Scheduler hay List (class SchedulerList) thực thi lập lịch lập trigravenh sử

dụng cấu truacutec danh saacutech liecircn kết đơn Danh saacutech được giữ trong một thứ tự thời

gian (từ sớm nhất đến muộn nhất) vigrave thế sự kiện thecircm vagraveo vagrave xoacutea đi yecircu cầu

phải queacutet qua danh saacutech để tigravem phần tử tương ứng Lựa chọn sự kiện tiếp theo để

thực thi yecircu cầu phải lagrave phần tử đầu tiecircn trecircn cugraveng của danh saacutech Việc thực thi

nagravey duy trigrave việc thực thi caacutec sự kiện theo cơ chế FIFO (First In First Out) cho caacutec

sự kiện đồng bộ

234 Lập trigravenh heap

Lập trigravenh heap (class Scheduler Heap) thực thi lịch lập trigravenh sử dụng một

cấu truacutec heap (hay vun đống) Cấu truacutec nagravey dugraveng cho một số lượng lớn caacutec sự

kiện như việc thecircm vagraveo vagrave xoaacute thời gian O(log n) cho n sự kiện Việc thực thi

nagravey trong NS version 2 được vay mượn từ MaRS-20 simulator[1] Noacute tin tưởng

rằng MaRS tự noacute mượn code từ NetSim [12] mặc dugrave nguồn gốc của noacute khocircng

được xaacutec định hoagraven toagraven

235 Lập trigravenh hagraveng đợi

19

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 20: tổng quan đánh giá hiệu năng mạng

Lập trigravenh hagraveng đợi lịch (class SchedulerCalendar) sử dụng một cấu truacutec

dữ liệu tương tự lịch bagraven trong một năm trong đoacute caacutec sự kiện trecircn caacutec

thaacutengngagravey giống nhau của nhiều năm coacute thể sắp xếp lại trong một ngagravey Việc

thực thi lập trigravenh hagraveng đợi lịch nagravey trong NS version2 được đoacuteng goacutep bởi David

Wetherall

236 Lập trigravenh thời gian thực

Lập trigravenh thời gian thực (class SchedulerRealTime) cố gắng tạo ra sự đồng thời

việc thực thi caacutec sự kiện trong thời gian thực Hiện tại noacute hoạt động như một lớp

con của lập trigravenh theo danh saacutech Dung lượng thời gian thực trong NS vẫn chưa

được phaacutet triển nhưng thường được sử dụng để giới thiệu một NS mocirc phỏng

mạng vagraveo một cấu higravenh thế giới thực với cấu higravenh mạng đơn giản hơn vượt qua

lưu lượnghellip Điều nagravey chỉ hoạt động trong mạng với lưu lượng vagrave tốc độ dữ liệu

chậm Sự đồng bộ nagravey hiện tại khocircng coacute hiệu lực

237 Caacutec phương thức khaacutec

Lớp mocirc phỏng cung cấp một số caacutec phương thức khaacutec thường sử dụng thiết lập

mocirc phỏng Noacute thường rơi vagraveo 3 trường hợp sau phương phaacutep tạo vagrave quản liacute cấu

higravenh quản liacute liecircn kết vagrave phương phaacutep thực thi dograve tigravem chức năng trợ giuacutep phacircn

chia với lịch lập trigravenh Dưới đacircy lagrave một danh saacutech khocircng cấu truacutec liecircn quan tới

caacutec phương thức mocirc phỏng

- Simulator instproc now (trả về khaacutei niệm lập trigravenh của thời gian hiện tại)

- Simulator instproc at args (Thực thi lập trigravenh matilde hoaacute ở thời gian đặc biệt)

- Simulator instproc cancel args ( huỷ sự kiện)

- Simulator instproc run args (bắt đầu lập trigravenh)

- Simulator instproc halt (Ngưng lập trigravenh)

- Simulator instproc flush-trace (Thecircm tất cả caacutec đối tượng dograve tigravem vagraveo bộ đệm)

- Simulator instproc create-trace type files src dst (tạo đối tượng dograve tigravem)

20

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 21: tổng quan đánh giá hiệu năng mạng

- Simulator instproc create_packetformat( thiết lập định dạng caacutec goacutei mocirc phỏng)

24 Quaacute trigravenh chuyển tiếp caacutec node vagrave goacutei

Phần nay trigravenh bagravey một phương diện của quaacute trigravenh tạo một topo trong NS nghĩa

lagrave tạo ra caacutec node Lớp nagravey cung cấp caacutec thủ tục đặc tiacutenh để tạo vagrave quản lyacute topo

vagrave bộ lưu trữ becircn trong tham chiếu đến mỗi thagravenh phần của topo

241 Node Basics

Cơ sở đầu tiecircn để tạo ra một node lagrave

set ns [new Simulator]

$ns node

Thủ tục đặc tiacutenh Node tạo cấu truacutec một node becircn ngoagravei caacutec đối tượng phacircn lớp

(classifier) đơn giản Tự bản thacircn Node chiacutenh lagrave một lớp chuẩn độc lập trong

OTcl Tuy nhiecircn hầu hết caacutec thagravenh phần cấu thagravenh của node lại chiacutenh lagrave caacutec

TclObject Dạng cấu truacutec của một node unicast được biểu diễn trong higravenh dưới

đacircy Đacircy lagrave dạng cấu truacutec đơn giản gồm coacute hai đối tượng TclObjects

- Địa chỉ phacircn lớp (classifer_)

- Cổng phacircn lớp (dmux_)

Chức năng của những phacircn lớp nagravey được dugraveng để phacircn phối đến caacutec packet đển

caacutec agent xaacutec định hay gởi đi caacutec link

Tất cả caacutec node lưu trữ iacutet nhất một trong caacutec thagravenh phần sau1048576

- Địa chỉ hay id_ tăng lecircn 1 caacutech đều đặn (từ giaacute trị ban đầu 0) khi caacutec node

được tạo ra

- Danh saacutech của caacutec lacircn cận (neighbor_)

21

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 22: tổng quan đánh giá hiệu năng mạng

Higravenh 21 Cấu truacutec của một node Unicast

22

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 23: tổng quan đánh giá hiệu năng mạng

Entry_ lagrave một biến nhatilden đơn giản thay thế cho một đối tượng thực (real) viacute dụ

như classifier_

- Danh saacutech của caacutec agent (agent_)

- Định danh dạng node (nodetype_) vagrave một module định tuyến

Mặc định rằng caacutec node trong NS được tạo cấu truacutec cho caacutec quaacute trigravenh mocirc phỏng

unicast Để coacute thể mocirc phỏng multicast quaacute trigravenh mocirc phỏng cần phải được tạo ra

cugraveng với tugravey chọn ldquo-multicast onrdquo viacute dụ

set ns [new Simulator -multicast on]

Cấu truacutec becircn trong của node dạng multicast được biểu diễn trong higravenh 241b

Khi trigravenh mocirc phỏng định tuyến multicast bit cao nhất của địa chỉ chỉ ra địa chỉ

đặc biệt lagrave một địa chỉ multicast hay unicast Nếu bit lagrave 0 địa chỉ đưa ra lagrave địa

chỉ unicast ngược lại đoacute lagrave địa chỉ multicast

Higravenh 22 Cấu truacutec becircn trong của Node dạng Multicast

23

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 24: tổng quan đánh giá hiệu năng mạng

242 Caacutec phương thức của Node

Caacutec thủ tục dugraveng để cấu higravenh một node độc lập coacute thể được phacircn lớp thagravenh

Caacutec chức năng điều khiển

Quản lyacute địa chỉ vagrave chỉ số Port caacutec chức năng định tuyến unicast

Quản lyacute agent

Thecircm vagraveo caacutec lacircn cận (neighbor)

a Chức năng điều khiển

$node trả con trỏ đến một node Đacircy lagrave phần tử đầu tiecircn sẽ điều khiển caacutec

packet đến node đoacute Biến cụ thể của node entry_ lưu trữ tham chiếu đến phần

tử nagravey Đối với caacutec node unicast đacircy lagrave địa chỉ phacircn lớp xem xeacutet caacutec bit mức cao

của địa chỉ điacutech đến (destination) Biến cụ thể classifier_ lưu trữ tham chiếu đến

phacircn lớp nagravey Tuy nhiecircn đối với caacutec node multicast điểm nhập lagrave switch_ xem

xeacutet caacutec bit đầu tiecircn để quyết định necircn chuyển packet sang phacircn lớp unicast hay

phacircn lớp multicast cho thiacutech hợp Ngoagravei ra $node reset sẽ điều chỉnh tất cả caacutec

agent tại node

b Quản lyacute địa chỉ vagrave chỉ số cổng

- Thủ tục $node id trả về chỉ số node của node Chỉ số nagravey tự động tăng vagrave gaacuten

cho mỗi node trong quaacute trigravenh tạo bởi phương thức của lớp Simulator lagrave $ns node

- Loacutep Simulator cũng lưu trữ một biến cụ thể dạng mảng (array) Node_ được

chỉ thị bởi node id vagrave lưu trữ một tham chiếu đến node với id đoacute

- Thủ tục $node agent ltportgt trả về kết quả tigravem kiếm agent tại port Nếu

khocircng coacute agent nagraveo tại chỉ số port lagrave biến thủ tục trả về chuỗi giaacute trị null

- Thủ tục alloc-port trả về biến của chỉ số port kế tiếp Noacute sử dụng một biến cụ

thể np_ để kiểm tra chỉ số port vị triacute kế tiếp khocircng xaacutec định được

- Caacutec thủ tục add-route vagrave add-routes được sử dụng bới định tuyến unicast để

thecircm caacutec router vagraveo vugraveng phacircn lớp classifier Sử dụng cuacute phaacutep lagrave

24

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 25: tổng quan đánh giá hiệu năng mạng

$node add-route ltdestination idgtltTclObjectgt

- TclObject lagrave chỉ mục của dmux_ port demultiplexer tại node nếu id điacutech giống

với id của node nagravey noacute thường lagrave phần đầu của link để gửi caacutec packet đến điacutech

đoacute nhưng cũng coacute thể lagrave chỉ mục cho caacutec phacircn lớp khaacutec hay caacutec dạng khaacutec của

phacircn lớp

- $node add-routes ltdestination idgtltTclObjectsgt được sử

dụng để thecircm nhiều router đến cugraveng một điacutech cugraveng một luacutec trong dạng luacircn

chuyển (round robin manner) để mở rộng băng thocircng sử dụng để đến được điacutech

đoacute thocircng qua tất cả caacutec link tương tự Noacute chỉ được sử dụng nếu biến cụ thể

multiPath_ được đặt lagrave 1 vagrave quaacute trigravenh điều hagravenh chi tiết định tuyến động coacute hiệu

quả vagrave yecircu cầu sử dụng một phacircn lớp với multipath

- Đi kegravem với add-routes lagrave delete-routes

add-routes Tạo ra id một danh saacutech của TclObjects vagrave tham chiếu đến

nullagent của trigravenh mocirc phỏng

delete-routes Gỡ bỏ TclObject trong danh saacutech của quaacute trigravenh cagravei đặt

caacutec tuyến (routes) trong phacircn lớp multipath Nếu tuyến nhập vagraveo trong phacircn lớp

classifrier khocircng trỏ đến phacircn lớp multipath thocircng thường thigrave xoacutea bỏ chỉ mục từ

classifirer_ vagrave cagravei đặt nullagent trong khocircng gian của noacute

- Chi tiết quaacute trigravenh định tuyến động cũng sử dụng hai phương thức thecircm vagraveo

Thủ tục init-routing thiết lập biến cụ thể multiPath_ tương tự như lớp

biến cugraveng tecircn Noacute cũng thecircm vagraveo một tham chiếu đến đối tượng điều khiển định

tuyến trong biến cụ thể rtObject_Thủ tục rtObject trả về quyền điều khiển

cho đối tượng định tuyến tại node

Cuối cugraveng thủ tục intf-changed được gọi bởi mạng thay đổi nếu một

link trecircn node thay đổi trạng thaacutei bất ngờ

25

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 26: tổng quan đánh giá hiệu năng mạng

c Quản lyacute Agent

Đưa ra một ltagentgt thủ tục attach sẽ thecircm agent vagraveo danh saacutech agents_

của noacute gaacuten một chỉ số port vagraveo agent vagrave cagravei đặt địa chỉ nguồn cho noacute cagravei đặt

điacutech của agent lagrave entry vagrave thecircm một con trỏ vagraveo port demultiplexer tại node

(dmux_) (dmux_) đển agent tại khe tương ứng trong phacircn lớp dmux_ Ngược lại

detachsẽ gỡ bỏ agent trong agent_ vagrave chỉ đến điacutech của agent vagrave nhập node

dmux_ giaacute trị nullagent

d Kiểm tra caacutec lacircn cận

Mỗi node giữ một danh saacutech caacutec lacircn cận gần với noacute trong biến cụ thể của noacute

neighbor_ Thủ tục add-neighbor thecircm một lacircn cận vagraveo danh saacutech Thủ tục

neighbors trả về danh saacutech nagravey

25 Caacutec liecircn kết

Đacircy lagrave phần tử thứ hai trong quaacute trigravenh xaacutec định topo Trong phần nagravey mocirc tả

trong giới hạn caacutec link đơn giản point-to-point NS hỗ trợ caacutec mocirci trường truyền

thocircng khaacutec nhau bao gồm sự mocirc phỏng đa truy suất của LAN sử dụng link đơn

giản dạng mesh vagrave caacutec trigravenh mocirc phỏng khaacutec của mocirci trường truyền thocircng dạng

vocirc tuyến vagrave broadcast CBQlink được bắt nguồn từ caacutec link đơn giản vagrave caacutec link

coacute dạng phức tạp hơn khocircng được mocirc tả trong phần nagravey Giống như node gồm

coacute nhiều phacircn lớp một link đơn giản lagrave caacutec kết nối liecircn tiếp nhau một caacutech tuần

tự Chuacuteng ta cũng mocirc tả ngắn gọn caacutec thủ tục cụ thể thực thi trecircn caacutec phần tử cấu

thagravenh khaacutec nhau được xaacutec định bởi một vagravei trong số caacutec kết nối nagravey

Lớp Link lagrave một lớp độc lập trong OTcl Lớp SimpleLink cung cấp khả năng

kết nối hai node với link point-to-point NS cung cấp thủ tục simplex-link để

tạo một link coacute một hướng duy nhất (unidirectional) từ một node đến node khaacutec

Link thuộc lớp SimpleLink Caacutec mocirc tả sau đacircy trigravenh bagravey cuacute phaacutep của link đơn

giản

26

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 27: tổng quan đánh giá hiệu năng mạng

set ns [new Simulator]

$ns simplex-link ltnode0gt ltnode1gt ltbandwidthgt ltdelaygt

ltqueue_typegt

Lệnh tạo ra một linh từ ltnode0gt đến ltnode1gt với kyacute hiệu đặc tả ltbandwidthgt

vagrave ltdelaygt Link sử dụng một hagraveng đợi dạng ltqueue_typegt Thủ tục cũng thecircm

kiểm tra TTL vagraveo link 5 biến cụ thể xaacutec định link lagrave

head_ Điểm nhập (entry point) của link noacute chỉ đến đối tượng đầu tiecircn

trong link

queue_ Tham chiếu đến hagraveng đợi chiacutenh của link Caacutec link đơn giản

thường coacute một hagraveng đơị trecircn một link Caacutec dạng phức tạp khaacutec cũng coacute

nhiều phần tử link trong link

link_ Tham chiếu đến phần tử thocircng thường lagrave caacutec mocirc higravenh thực sự của

link trong đặc trưng delay vagrave bandwidth của link

ttl_ Tham chiếu đến phần tử điều khiển ttl trong mỗi packet

drophead_ Tham chiếu đến một đối tượng chủ chốt của hagraveng đợi caacutec

phần tử xử lyacute huỷ (drop) link

Hơn nữa nếu biến của mocirc phỏng lagrave $traceAllFile_ được xaacutec định thủ tục

sẽ thecircm caacutec phần tử vết (trace) để kiểm tra khi một packet được đưa vagraveo hay lấy

ra khỏi queue_ Quaacute trigravenh kiểm tra can thiệp vagraveo việc hủy một phacircn tử vết sau

biến drophead_ Caacutec biến sau đacircy kiểm tra caacutec phần tử vết (trace)

enqT_ Tham chiếu đến phần tử vết (trace) caacutec packet nhập vagraveo queue_

deqT_ Tham chiếu đến phần tử vết (trace) lấy ra khỏi queue_

drpT_ Tham chiếu đến phần tử vết (trace) caacutec packet huỷ khỏi queue_

rcvT_ Tham chiếu đến phần tử vết (trace) caacutec nhận bởi node kế tiếp

Tuy nhiecircn cần phải chuacute yacute rằng nếu người dugraveng coacute thể truy tigravem nhiều lần trecircn

link caacutec biến nagravey chỉ lưu trữ tham chiếu đến phần tử thecircm vagraveo cuối cugraveng magrave

27

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 28: tổng quan đánh giá hiệu năng mạng

thocirci Caacutec cơ chế cấu higravenh khaacutec magrave thecircm vagraveo caacutec thagravenh phần cấu thagravenh đển một

link đơn giản lagrave caacutec giao diện của mạng (sử dụng trong đinh tuyến multicast)

caacutec mocirc higravenh link động vagrave cơ chế truy tigravem cugraveng với caacutec bộ kiểm tra (monitor)

Hinh 23 Cấu truacutec của một liecircn kết

26 Quản lyacute hagraveng đợi vagrave lập trigravenh goacutei tin

Caacutec hagraveng đợi biểu diễn caacutec vị triacute magrave caacutec goacutei tin coacute thể được giữ lại hoặc bị bỏ

đi Lập trigravenh goacutei tin liecircn quan tới việc xử liacute quyết định thường dugraveng để lựa chọn

caacutec goacutei tin được sử dụng hay sẽ bị bỏ đi Việc quản liacute bộ đệm liecircn quan tới caacutec

phương phaacutep riecircng biệt thường dugraveng để điều chỉnh lại thời gian chiếm đoacuteng của

một hagraveng đợi riecircng biệt Hiện tại việc hỗ trợ bao gồm hagraveng đợi FIFO quản liacute bộ

đệm RED CBQ (bao gồm lập trigravenh ưu tiecircn vagrave lập trigravenh xoay vograveng) vagrave caacutec khaacutec

biệt của hagraveng đợi phiecircn vagrave bao gồm cả hagraveng đợi phiecircn (Fair Queueing)

Stochastic Fair Queueing (SFQ) vagrave Deficit Round-Robin (DDR) Trong trường

hợp thocircng thường một phần tử delay lagrave yếu tổ tải về từ hagraveng đợi hagraveng đợi coacute thể

bị chặn lại cho đến khi noacute được cho pheacutep trở lại bởi caacutec dograveng tải xuống lacircn cận

noacute Đacircy lagrave một kĩ thuật được gọi lagrave giả vờ trigrave hoatilden truyền thocircng Thecircm vagraveo đoacute

hagraveng đợi coacute thể bị chặn nhiều hơn hoặc được cho pheacutep ớ một thời gian tugravey yacute bởi

lacircn cận của chuacuteng (thường sử dụng thực thi đa hagraveng đợi tập hợp caacutec hagraveng đợi với

28

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 29: tổng quan đánh giá hiệu năng mạng

việc điều khiển luồng hagraveng đợi trong) Caacutec goacutei tin bị bỏ được thực thi trong

trường hợp caacutec hagraveng đợi đoacute chứa một điacutech đến bị bỏ đoacute lagrave một đối tượng nhận

tất cả caacutec goacutei tin bị bỏ bởi một hagraveng đợi Điều nagravey coacute thể hữu iacutech trong việc

thống kecirc caacutec goacutei tin bị bỏ

261 Lớp C++ Queue

Lớp Queue coacute nguồn gốc từ một lớp kết nối cơ bản Noacute cung cấp một lớp

cơ bản sử dụng bởi caacutec kiểu lớp hagraveng đợi riecircng biệt giống như việc gọi lại hagravem

thực thi việc blocking

Dưới đacircy định nghĩa caacutec ứng dụng trong queueh

class Queue public Connector

public

virtual void enque(Packet) = 0

virtual Packet deque() = 0

void recv(Packet Handler)

void resume()

int blocked()

void unblock()

void block()

protected

Queue()

int command(int argc const charconst argv)

int qlim_số lượng caacutec goacutei tin lớn nhất cho pheacutep

trong hagraveng đợi

int blocked_

int unblock_on_resume_ coacute phaacute khoaacute q khi nhagraven rỗi

29

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 30: tổng quan đánh giá hiệu năng mạng

QueueHandler qh_

Caacutec hagravem enque vagrave deque lagrave caacutec lớp ảo chỉ ra lớp Queue được dugraveng như một lớp

cơ sở Caacutec hagraveng đợi riecircng biệt coacute nguồn gốc từ Queue vagrave thực thi hai hagravem nagravey

như một điều cần thiết Nhigraven chung caacutec hagraveng đợi riecircng biệt khocircng ghi đegrave lecircn hagravem

recv bởi vigrave noacute đưa ra caacutec hagravem enque vagrave deque riecircng biệt

Lớp Queue khocircng chứa nhiều caacutec trạng thaacutei nội bộ Thocircng thường những caacutei đoacute

lagrave caacutec đối tượng kiểm tra đặc biệt thagravenh phần qlim_ được đặt ra để chỉ định một

giới hạn lớn nhất chiếm giữ hagraveng đợi nhưng lại khocircng chịu ảnh hưởng (khocircng coacute

hiệu lực ) bởi chiacutenh lớp Queue noacute được sử dụng bởi caacutec lớp queue phụ riecircng

biệt nếu thấy cần giaacute trị nagravey Thagravenh phần blocked_ lagrave một giaacute trị logic chỉ định

bất cứ khi nagraveo hagraveng đợi coacute thể gởi caacutec goacutei tin ngay tức khắc tới caacutec dograveng tải

xuống lacircn cận của noacute Khi một hagraveng đợi bị khoacutea noacute coacute thể cho vagraveo hagraveng đợi

nhưng khocircng gởi chuacuteng

262 Khoaacute hagraveng đợi

Một hagraveng đợi coacute thể bị khoacutea hay khocircng ở bất kigrave thời gian nagraveo Thocircng

thường một hagraveng đợi bị khoacutea khi một goacutei tin quaacute cảnh giữa noacute vagrave caacutec dograveng tải

xuống lacircn cận noacute (phần lớn thời gian nếu hagraveng đợi bị đầy) Một hagraveng đợi bị khoacutea

sẽ bị khoacutea chừng nagraveo liecircn kết caacutec dograveng tải xuống bận vagrave hagraveng đợi coacute iacutet nhất một

goacutei tin được gởi đi Một hagraveng đợi được phaacute khoacute a chỉ khi hagravem cho pheacutep noacute tiếp

tục được đưa ra (coacute nghĩa lagrave việc lập trigravenh một dograveng tải xuống lacircn cận noacute thocircng

qua việc gọi lại) thường thigrave khi khocircng coacute goacutei tin nagraveo trong hagraveng đợi Việc gọi lại

được thực thi bằng caacutech sử dụng caacutec lớp vagrave caacutec phương thức dưới đacircy

class QueueHandler public Handler

30

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 31: tổng quan đánh giá hiệu năng mạng

public

inline QueueHandler(Queueamp q) queue_(q)

void handle(Event) gọi queue_resume()

private

Queueamp queue_

void QueueHandlerhandle(Event)

queue_resume()

QueueQueue() drop_(0) blocked_(0) qh_(this)

Tclamp tcl = Tclinstance()

bind(limit_ ampqlim_)

void Queuerecv(Packet p Handler)

enque(p)

if (blocked_)

p = deque()

if (p = 0)

blocked_ = 1

target_-gtrecv(p ampqh_)

31

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 32: tổng quan đánh giá hiệu năng mạng

void Queueresume()

Packet p = deque()

if (p = 0)

target_-gtrecv(p ampqh_)

else

if (unblock_on_resume_)

blocked_ = 0

else

blocked_ = 1

Việc quản liacute điều khiển ở đacircy khocircn kheacuteo hơn một chuacutet Khi một đối tượng

Queue mới được tạo ra noacute bao gồm một đối tượng QueueHandler (qh_) được

khởi tạo để chứa một tham chiếu tới đối tượng Queue mới

(QueueampQueueHandlerqueue_) Điều nagravey thực thi bởi Queue đang sử dụng

biểu thức qh_(this) Khi một Queue nhận một goacutei noacute gọi lớp phụ (coacute nghĩa lagrave

hagraveng đợi đặc tả phương phaacutep) của hagravem enque với goacutei tin Nếu hagraveng đợi khocircng bị

khoacutea noacute cho pheacutep gởi một goacutei tin vagrave gọi hagravem deque xaacutec định goacutei tin đatilde gởi khoacutea

hagraveng đợi (bởi vigrave coacute một goacutei tin đang quaacute cảnh) vagrave gởi goacutei tin tới dograveng tải xuống

lacircn cận noacute Chuacute yacute rằng bất cứ goacutei tin nagraveo nhận được trong tương lai từ dograveng tải

lecircn lacircn cận sẽ đưa đến một hagraveng đợi bị khoacutea Khi một dograveng tải xuống yecircu cầu

nguyecircn nhacircn liacute do hagraveng đợi bỏ khoacutea noacute lập trigravenh cho hagravem điều khiển của

QueueHandler thocircng qua qh_ để lập trigravenh mocirc phỏng Hagravem điều khiển bắt đầu lại

sẽ gởi theo dograveng tải xuống goacutei tin được lập trigravenh tiếp theo (vagrave rời khỏi hagraveng đợi

bị khoacutea) hoặc bẻ khoacutea hagraveng đợi khi khocircng coacute goacutei tin nagraveo sẵn sagraveng được gởi đi

32

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 33: tổng quan đánh giá hiệu năng mạng

Việc xử liacute nagravey cũng coacute thể lagravem gọn gagraveng hơn với đề nghị của phương thức

LinkDelayrecv()

263 Lớp PacketQueue

Lớp Queue coacute thể thực thi việc quản liacute bộ đệm vagrave lập trigravenh nhưng khocircng

thực thi caacutec hoạt động cấp thấp trecircn một hagraveng đợi riecircng biệt Lớp PacketQueue

được sử dụng cho mục điacutech nagravey vagrave được định nghĩa như sau

class PacketQueue

public

PacketQueue()

int length() chiều dagravei hagraveng đợi trong caacutec goacutei tin

void enque(Packet p)

Packet deque()

Packet lookup(int n)

Xoacutea một goacutei tin đặc biệt trong hagraveng đợi

void remove(Packet)

protected

Packet head_

Packet tail_

int len_ số goacutei tin

Lớp nagravey giữ một danh saacutech liecircn kết caacutec goacutei tin vagrave thocircng thường được sử

dụng bởi việc lập trigravenh riecircng biệt vagrave quản liacute bộ đệm để giữ một trật tự thiết lập

caacutec goacutei tin Việc lập trigravenh riecircng biệt hay sự sắp xếp quản liacute hệ thống bộ nhớ coacute

thể sử dụng nhiều đối tượng PacketQueue Lớp PacketQueue quản liacute việc đếm

caacutec goacutei tin hiện tại trong hagraveng đợi được trả về bằng phương thức length() Hagravem

33

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 34: tổng quan đánh giá hiệu năng mạng

enque đặt goacutei tin ở cuối hagraveng đợi vagrave cập nhật lại biến thagravenh viecircn len_ Hagravem

deque trả về goacutei tin ở đầu hagraveng đợi vagrave xoacutea noacute khỏi hagraveng đợi (vagrave cập nhật lại biến

đếm counter) hay trả về NULL neacuteu hagraveng đợi rỗng Hagravem lookup trả về goacutei tin nth

ở đầu hagraveng đợi hay NULL trong caacutec trường hợp khaacutec Hagravem remove xoacutea goacutei tin

lưu trữ trong địa chỉ lấy từ hagraveng đợi (vagrave cập nhật lại biến đếm) Noacute tạo ra một

chương trigravenh khocircng bigravenh thường vagrave kết thuacutec nếu goacutei tin khocircng tồn tại

Viacute dụ Drop Tail

Viacute dụ dưới đacircy lagravem saacuteng tỏ việc thực thi đối tượng QueueDropTail thực

thi lập trigravenh FIFO vagrave việc quản liacute bộ đệm bỏ trecircn luồng (drop-on-overflow) trong

hầu hết caacutec router Internet ngagravey nay Định nghĩa dưới đacircy sẽ trigravenh bagravey caacutec lớp vagrave

kết nối Otcl của noacute

class DropTail public Queue

protected

void enque(Packet)

Packet deque()

PacketQueue q_

Lớp cơ sở Queue DropTail xuất phaacutet từ đoacute cung cấp hầu hết caacutec chức năng cần

thiết Hagraveng đợi drop-tail duy trigrave chiacutenh xaacutec một hagraveng đợi FIFO thực thi bởi việc

bao gồm một đối tượng của lớp PacketQueue Drop-tail thực thi chiacutenh phiecircn bản

của enque vagrave deque như sau

void DropTailenque(Packet p)

q_enque(p)

if (q_length() gt= qlim_)

34

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 35: tổng quan đánh giá hiệu năng mạng

q_remove(p)

drop(p)

Packet DropTaildeque()

return (q_deque())

Ở đacircy hagravem enque đầu tiecircn lưu trữ goacutei tin trong hagraveng đợi caacutec goacutei tin becircn

trong (khocircng bị giới hạn) vagrave sau đoacute kiểm tra kiacutech thước của hagraveng đợi goacutei tin

thocircng qua qlim_ Drop-on-overflow được thực thi bằng caacutech bỏ đi hầu hết caacutec

goacutei tin vừa được thecircm vagraveo hagraveng đợi goacutei tin nếu đatilde đạt đến hay vượt qua giới hạn

Việc thực thi trecircn enque thiết lập qlim_ lecircn n trecircn thực tế coacute nghĩa lagrave kiacutech thước

của hagraveng đợi lagrave n-1 lập trigravenh FIFO đơn giản được thực thi trecircn hagravem deque bởi

việc thường xuyecircn trả về goacutei tin đầu tiecircn trong hagraveng đợi goacutei tin

264 Caacutec kiểu khaacutec nhau của caacutec đối tượng Queue

Một đối tượng hagraveng đợi lagrave một lớp tổng quaacutet của đối tượng coacute khả năng

giữ vagrave đaacutenh dấu một caacutech hợp liacute hay loại bỏ caacutec goacutei tin như chuacuteng di chuyển

thocircng qua mocirc phỏng topology Caacutec tham số cấu higravenh cho caacutec đối tượng hagraveng đợi

lagrave

limit_ kiacutech thước hagraveng đợi của caacutec goacutei tin

blocked_ mặc định lagrave false noacute bật lecircn true khi hagraveng đợi bị khoaacute (khocircng cho

pheacutep gởi caacutec goacutei tin tới dograveng tải xuống lacircn cận của noacute)

unblocked_on_resume_ mặc định bằng true chỉ ra một hagraveng đợi necircn bẻ khoacutea

tại thời điểm goacutei tin cuối cugraveng được gởi đi (khocircng nhất thiết phải được nhận)

35

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 36: tổng quan đánh giá hiệu năng mạng

Caacutec đối tượng hagraveng đợi khaacutec xuất phaacutet từ lớp cơ sở khaacutec lagrave caacutec đối tượng hagraveng

đợi drop-tail FQ SFQ DRR RED vagrave CBQ Mỗi caacutei được mocirc tả như sau

Đối tượng drop-tail lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

FIFO đơn giản

Đối tượng FQ lagrave lớp con của caacutec đối tượng Queue thực thi hagraveng đợi phiecircn

khocircng coacute phương thức nagraveo đặc trưng cho caacutec đối tượng FQ Caacutec tham số cấu

higravenh lagrave

+ secsPerByte_ khocircng coacute caacutec biến trạng thaacutei kết hợp với đối tượng nagravey

+ Đối tượng SFQ lagrave một lớp con của caacutec đối tượng Queue thực thi hagraveng đợi

Stochastic Fair Khocircng coacute phương thức nagraveo đặc trưng cho đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ maxqueue_

+ buckets_ khocircng coacute biến trạng thaacutei nagraveo kết hợp voacutei đối tượng nagravey

Đối tượng DRR lagrave một lớp con của caacutec đối tượng Queue thực thi lập trigravenh xoay

vograveng Những đối tượng nagravey thực thi việc lập trigravenh xoay vograveng giữa caacutec luồng

khaacutec nhau( một luồng riecircng biệt lagrave một luồng coacute caacutec goacutei tin với node vagrave port id

goacutei tin OR giống nhau) Cũng khaacutec với caacutec đối tượng đa hagraveng đợi khaacutec đối

tượng hagraveng đợi nagravey thực thi một sự chia sẻ khocircng gian bộ đệm cho caacutec luồng

khaacutec Caacutec tham số cấu higravenh lagrave

+ buckets_ chỉ ra tổng số bucket thường dugraveng cho việc hashing mỗi luồng

+ blimit_ chỉ ra kiacutech thước bộ đệm chia sẻ bằng byte

+ quantum_ chỉ ra số byte quay vograveng của mỗi luồng

+ mask_ khi được bật lecircn 1 coacute nghĩa lagrave một luồng riecircng biệt chứa caacutec goacutei coacute caacutec

node id giống nhau (caacutec port id coacute thể khaacutec nhau) khaacutec 1 lagrave caacutec luồng chứa caacutec

node id vagrave caacutec port id giống nhau

36

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 37: tổng quan đánh giá hiệu năng mạng

Đối tượng RED lagrave một lớp con của caacutec đối tượng Queue thực thi ngẫu nhiecircn ở

cac gateway phaacutet hiện sớm Đối tượng chỉ coacute thể cấu higravenh bỏ hay đaacutenh dấu caacutec

goacutei tin Khocircng coacute một phương thức đặc biệt nagraveo cho caacutec đối tượng nagravey Caacutec

tham số cấu higravenh lagrave

+ bytes_ lập bằng true cho pheacutep RED chế độ byte lagrave kiacutech thước của caacutec goacutei tin

đến coacute khả năng ảnh hưởng đến việc đaacutenh dấu (hay loại bỏ) caacutec goacutei tin

+ queue-in-bytes_ lập bằng true để đo kiacutech thước hagraveng đợi trung bigravenh bằng byte

tốt hơn caacutec goacutei tin Cho pheacutep tuỳ chọn nagravey cũng lagrave nguyecircn nhacircn thresh_ vagrave

maxthresh_ tự động scaled bởi vigrave mean_pktsize_

+ thresh_ Giới hạn nhỏ nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei tin

+ maxthresh_ Giới hạn lớn nhất của kiacutech thước hagraveng đợi trung bigravenh trong caacutec goacutei

tin

+ mean_pktsize_ Ước lượng kiacutech thước goacutei tin trung bigravenh bằng byte Sử dụng

cập nhật việc tiacutenh toaacuten kiacutech thước hagraveng đợi trung bigravenh sau thời gian nhagraven rỗi

+ q_weight_ Trọng lượng hagraveng đợi used in the exponential-weightedmoving

average để tiacutenh hagraveng đợi trung bigravenh

+ wait_ Thiết lập bằng true để duy trigrave một khoảng thời gian giữa caacutec goacutei tin bị

bỏ

+ linterm_ Thay đổi kiacutech thước trung bigravenh của hagraveng đợi giữa ldquothresh_rdquo vagrave

ldquomaxthresh_rdquo việc loại bỏ caacutec goacutei tin coacute khả năng thay đổi giữa 0 vagrave 1

+ setbit_ thiết lập bằng true để đaacutenh dấu caacutec goacutei tin bằng việc thiết lập bit tắc

nghẽn trong header goacutei tin rather than loại bỏ caacutec goacutei tin

+ drop-tail_ Thiết lập bằng true để sử dụng drop-tail tốt hơn lagrave loại bỏ ngẫu

nhiecircn khi hagraveng đợi bị tragraven hoặc kiacutech thước trung bigravenh hagraveng đợi đạt đến

ldquomaxthresh_rdquo

37

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 38: tổng quan đánh giá hiệu năng mạng

Caacutec đối tượng CBQ lagrave lớp con của caacutec đối tượng thực thi hagraveng đợi lớp cơ

sở

$cbq insert ltclassgt

Thecircm lớp lưu lượng vagraveo cấu truacutec chia sẻ liecircn kết phugrave hợp với việc liecircn kết caacutec

đối tượng cbq

$cbq bind ltcbqclassgt ltid1gt [$id2]

Nguyecircn nhacircn chứa luồng id id1 (hoặc trong datildei từ id1 đến id2) phugrave hợp với lớp

lưu lượng cbqclass

$cbq algorithm ltalggt

Chọn thuật toaacuten becircn trong CBQ ltalggt coacute thể thiết lập một trong caacutec kiểu

ldquoancestor-onlyrdquo ldquotop-levelrdquo hoặc ldquoformalrdquo

Caacutec đối tượng CBQWRR lagrave một đối tượng con của caacutec đối tượng CBQ

thực thi lập trigravenh xaoy vograveng giữa caacutec lớp của caacutec lớp ưu tiecircn giống nhau Caacutec

tham số cấu higravenh lagrave

+ maxpkt_ Kiacutech thước lớn nhất của một goacutei tin bằng byte Điều nagravey chỉ

được sử dụng chỉ bởi caacutec đối tượng CBQWRR trong việc tiacutenh toaacuten tần số băng

thocircng lớn nhất cho việc lập trigravenh xoay vograveng

CBQCLASS OBJECTS

Thực thi lớp lưu lượng phugrave hợp với caacutec đối tượng CBQ

+ $cbqclass setparams ltparentgt ltokborrowgt ltallotgt

ltmaxidlegt ltpriogt ltlevelgt thiết lập một số tham số cấu higravenh cho lớp

lưu lượng CBQ

+ $cbqclass parent ltcbqcl|nonegt Đặc tả nguồn gốc của caacutec

lớp trong cacircy chia sẻ liecircn kết Nguồn gốc coacute thể đặc tả ldquononerdquo để chỉ cacircy rỗng

+ $cbqclass newallot ltagt

38

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 39: tổng quan đánh giá hiệu năng mạng

Thay đổi vị triacute liecircn kết của lớp nagravey tới một số từ 0 tới 1

+ $cbqclass install-queue ltqgt

Cagravei đặt một đối tượng Queue gheacutep vagraveo cấu truacutec liecircn kết CBQ hay CBQWRR

Khi một đối tượng CBQ được khởi tạo Noacute khocircng bao gồm hagraveng đợi becircn trong

Caacutec tham số cấu higravenh lagrave

+ okborrow_ lagrave giaacute trị chỉ ra một lớp được cho pheacutep mượn băng thocircng từ gốc của

noacute

+ allot_ lagrave phacircn số lớn nhất của băng thocircng liecircn kết chỉ định cho một lớp nhằm

mục điacutech riecircng biệt như lagrave một số thực giữa 0 vagrave 1

+ maxidle_ Lagrave thời gian lớn nhất magrave một lớp yecircu cầu coacute được hagraveng đợi goacutei tin

của noacute trước khi chuacuteng được cho pheacutep hướng tới

+ priority_ lagrave cấp ưu tiecircn của lớp đối với caacutec lớp khaacutec Giaacute trị nagravey coacute thể nằm

trong datildei từ 0 đến 10 vagrave coacute nhiều hơn một lớp cugraveng tồn tại trong một mức ưu

tiecircn giống nhau Mức ưu tiecircn 0 lagrave mức ưu tiecircn cao nhất

+ level_ lagrave cấp của lớp nagravey trong cacircy chia sẻ liecircn kết Node laacute trong cacircy được

xem như ở cấp 1 cograven node cha ở cấp 2

+ extradeley_ tăng độ trigrave hoatilden bằng một lớp delay bằng caacutech đặc tả thời gian

QUEUE-MONITOR OBJECTS

Caacutec đối tượng QueueMonitor được sử dụng giaacutem saacutet việc thiết lập goacutei tin

hay caacutec byte đến khởi hagravenh hay loại bỏ bộ đếm Noacute cũng bao gồm việc hỗ trợ

tập hợp thống kecirc như lagrave kiacutech thước trung bigravenh của hagraveng đợi

+ $queuemonitor

Khởi động lại tất cagrave caacutec bộ đếm tiacutech luỹ được miecircu tả dưới đacircy xuống bằng 0

(đến khởi hagravenh loại bỏ) Cũng coacute thể khởi động lại tiacutech phacircn độ trễ nếu được

định nghĩa

39

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 40: tổng quan đánh giá hiệu năng mạng

+ $queuemonitor set-delay-samples ltdelaySamp_gt

Thiết lập caacutec đối tượng mẫu delaySamp_ vagraveo bản ghi thống kecirc về độ trễ

hagraveng đợi delaySamp_ điều khiển một đối tượng Samples coacute nghĩa lagrave đối tượng

Samples sẵn sagraveng được tạo ra

+ $queuemonitor get-bytes-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech thước

hagraveng đợi toagraven vẹn bằng byte

+ $queuemonitor get-pkts-integrator

Trả về một đối tượng Intergrator coacute thể được sử dụng để tigravem kiếm kiacutech

thước hagraveng đợi trong caacutec goacutei tin

+ $queuemonitor get-delay-samples

Trả về một đối tượng Samples delaySamp_ vagraveo bản ghi thống kecirc về độ trễ hagraveng

đợi Khocircng coacute caacutec tham số cấu higravenh cho caacutec đối tượng nagravey Caacutec biến trạng thaacutei

lagrave

+ size_ Kiacutech thước hagraveng đợi tức thời bằng byte

+ pkts_ Kiacutech thước hagraveng đợi tức thời bằng caacutec goacutei tin

+ parrivals_ tổng số goacutei tin đatilde đến

+ barrivals_ tổng caacutec byte chứa trong caacutec goacutei tin đatilde đến

+ pdepartures_ Tổng caacutec goacutei tin đatilde chết (khocircng bị loại bỏ)

+ bdepartures_ Tổng caacutec byte chứa trong caacutec goacutei tin đatilde chết

+ pdrops_ Tổng số caacutec goacutei tin bị loại bỏ

+ bdrops_ Tổng số caacutec byte bị loại bỏ

+ bytesInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng byte Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng đợi

bằng byte

40

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 41: tổng quan đánh giá hiệu năng mạng

+ pktsInt_ Đối tượng Integrator được tiacutenh toaacuten becircn trong kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin Biến sum_ của đối tượng nagravey tiacutenh tổng kiacutech thước của hagraveng

đợi bằng caacutec goacutei tin

QUEUEMONITORED OBJECTS

Nguồn gốc caacutec đối tượng nagravey coacute khả năng khaacutec nhau

Một vagravei hagraveng đợi phacircn biệt việc loại bỏ caacutec goacutei tin đến do hết bộ đệm vagrave

loại bỏ ngẫu nhiecircn caacutec goacutei tin đến như trong hagraveng đợi RED Dưới đacircy lagrave một số

trường hợp hữu iacutech để phacircn biệt hai loại

Caacutec biến trạng thaacutei

+ epdrops_ Số goacutei tin coacute thể bị loại bỏ sớm

+ ebdrops_ số caacutec byte gồm coacute caacutec goacutei tin bị loại bỏ sớm

Lớp nagravey lagrave một lớp con của lớp QueueMonitor caacutec đối tượng thuộc kiểu nagravey

cũng coacute caacutec trường như pdrops_ vagrave bdrops_ Những trường nagravey sẽ miecircu tả tổng

số caacutec goacutei tin vagrave caacutec byte bị loại bỏ bao gồm cả sớm vagrave khocircng sớm

QUEUEMONITOREDFLOWMON OBJECTS

Những đối tượng nagravey coacute thể được sử dụng theo qui ước caacutec đối tượng

QueueMonitor khi tập hợp caacutec biến đếm trecircn luồng vagrave thống kecirc việc thecircm vagraveo

tập hợp cac biến đếm vagrave thống kecirc caacutec cung cấp bởi lớp cơ sở QueueMonitor

$fmon classifier ltclgt

Việc thecircm vagraveo nagravey phacircn lớp luồng giaacutem saacutet đối tượng Điều nagravey thường được

dugraveng để aacutenh xạ caacutec goacutei tin đến luồng phugrave hợp với chuacuteng

$fmon dump

Kết xuất biến đếm trecircn luồng hiện tại vagrave thống kecirc kecircnh nhậpxuất trong caacutec hoạt

động kegravem theo trước đoacute

$fmon flows

41

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 42: tổng quan đánh giá hiệu năng mạng

Trả về một chuỗi kiacute tự chứa tecircn tất cả caacutec luồng được biết đến bởi luồng giaacutem

saacutet nagravey Mỗi đối tượng nagravey thuộc kiểu QueueMonitorEDFlow

$fmon attach ltchangt

Điacutenh kegravem một kecircnh nhập xuất Tcl tới luồng giaacutem saacutet Thống kecirc luồng được viết

ra kecircnh khi hoạt động kết xuất được thực thi

Caacutec tham số cấu higravenh lagrave

+ enable_in_ Mặc định bằng true chỉ ra trạng thaacutei caacutec luồng đến được duy trigrave bởi

luồng giaacutem saacutet Nếu noacute lagrave false chỉ thocircng tin khởi hagravenh được duy trigrave

+ enable_out_ Mặc định bằng true chỉ ra trạng thaacutei luồng khởi hagravenh được duy trigrave

bởi luồng giaacutem saacutet Nếu noacute bằng false chỉ caacutec thocircng tin khởi hagravenh được giữ lại

+ enable_drop_ mặc định bagraveng true chỉ ra trạng thaacutei loại bỏ trecircn luồng được duy

trigrave bởi luồng giaacutem saacutet Nếu bằng false thigrave chỉ coacute thocircng tin loại bỏ được giữ lại

+ enable_edrop_ Mặc định bằng true chỉ ra trạng thaacutei loại bỏ sớm trecircn luồng

được duy trigrave bởi luồng giaacutem saacutet Nếu noacute bằng false thigrave chỉ coacute thocircng tin loại bỏ

sớm được giữ lại

QUEUEMONITOREDFLOW OBJECTS

Những đối tượng nagravey chứa biến đếm trecircn luồng vagrave quản liacute việc thống kecirc

bởi một đối tượng QueueMonitorEDFlowmon Chuacuteng thường được tạo trong

việc gọi lại một thủ tục Otcl khi một luồng giaacutem saacutet gởi một goacutei khocircng aacutenh xạ

được tới luồng được biết trứơc Chuacute yacute rằng việc phacircn lớp của luồng giaacutem saacutet

chịu traacutech nhiệm trong việc aacutenh xạ caacutec goacutei tin tới caacutec luồng theo caacutech của noacute Do

đoacute việc ohụ thuộc kiểu phacircn loại thường thigrave khocircng phải tất cả caacutec biến trạng thaacutei

đều coacute liecircn quan (coacute nghĩa lagrave việc phacircn loại nhiều goacutei tin dựa trecircn cơ sở id luồng

trong trường hợp magrave địa chỉ nguồn vagrave địa chỉ điacutech khocircng quan trọng) Caacutec biến

trạng thaacutei lagrave

+ src_ Địa chỉ nguồn của goacutei tin phụ thuộc vagraveo luồng nagravey

42

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 43: tổng quan đánh giá hiệu năng mạng

+ dst_ Địa chỉ điacutech của goacutei tin phụ thuộc vagraveo luồng nagravey

+ flowid_ id luồng của goacutei tin phụ thuộc vagraveo luồng nagravey

Một số tập lệnh

Dưới đacircy lagrave danh saacutech caacutec lệnh hagraveng đợi thường dugraveng trong lệnh mocirc

phỏng

$ns_ queue-limit ltn1gt ltn2gt ltlimitgt

Thiết lập một giới hạn kiacutech thước bộ đệm lớn nhất trong liecircn kết giữa caacutec node

ltn1gt vagrave ltn2gt

$ns_ trace-queue ltn1gt ltn2gt ltoptionalfilegt

Thiết lập caacutec đối tượng dograve tigravem caacutec sự kiện ghi trong hagraveng đợi Noacute file dograve tigravem

khocircng tigravem thấy noacute sử dụng traceAllFile_ để ghi vagraveo caacutec sự kiện

$ns_ namtrace-queue ltn1gt ltn2gt ltoptionalfilegt

Thocircng thường trecircn hagraveng đợi dograve tigravem (trace-queue) thiết lập nam-tracing trong

hagraveng đợi

$ns_ monitor-queue ltn1gt ltn2gt ltoptionalqtracegt

ltoptionalsampleintervalgt

43

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 44: tổng quan đánh giá hiệu năng mạng

CHƯƠNG 3 XAcircY DỰNG GIAO THỨC VAgrave TRIỂN KHAI MOcirc PHỎNG

31 Caacutec bước xacircy dựng một giao thức

Protocol mới định nghĩa phần đầu goacutei của chiacutenh noacute hoặc lagrave mở rộng phần

đầu sẵn coacute bằng caacutech thecircm vagraveo caacutec trường Phần đầu goacutei mới được đưa vagraveo trong

trigravenh mocirc phỏng bằng caacutech định nghĩa một cấu truacutec C++ với những trường cần

thiết định nghĩa một lớp tĩnh để cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một

số code khởi tạo của trigravenh mocirc phỏng để gaacuten một byte khoảng trống trong mỗi

goacutei nơi magrave một phần đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec

Khi trigravenh mocirc phỏng được khởi tạo thocircng qua OTcl người dugraveng coacute thể

chọn lựa để cho pheacutep chỉ một tập hợp con của trigravenh biecircn dịch trong caacutec định

dạng goacutei kết quả trả về trong chế độ lưu trữ bộ nhớ trong suốt quaacute trigravenh thực

hiện mocirc phỏng Luacutec nagravey hầu hết mọi cấu higravenh trong định dạng goacutei đều cho

pheacutep Việc quản lyacute định dạng caacutec goacutei hiện thời đang được cho pheacutep (enable)

trong trigravenh mocirc phỏng được điều khiển bởi một đối tượng quản lyacute phần đầu một

goacutei cụ thể được mocirc tả dưới đacircy Đối tượng nagravey hỗ trợ một phương thức OTcl

được sử dụng để xaacutec định phần đầu goacutei nagraveo sẽ được sử dụng trong trigravenh mocirc

phỏng Nếu một đối tượng trong trigravenh mocirc phỏng sử dụng một trường trong phần

đầu magrave noacute khocircng được cho pheacutep thigrave một chương trigravenh thời gian thực (run-time)

sẽ xuất hiện để hủy bỏ noacute

311 Tạo một header mới cho giao thức

Khi xacircy dựng protocol mới phải tạo một header cụ thể để sử dụng traacutenh

overload trecircn những trường tồn tại trong header Dựa vagraveo yecircu cầu của giao thức

cần những trường nagraveo ta định nghĩa một số trường cần dugraveng cho giao thức Khai

baacuteo phần nagravey được đặt trong fileh Viacute dụ tạo header cho giao thức ping trong tệp

Pingh

struct hdr_ping

44

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 45: tổng quan đánh giá hiệu năng mạng

char ret

double send_time

Header access methods

static int offset_ required by PacketHeaderManager

inline static hdr_ping access(const Packet p)

return (hdr_ping) p-gtaccess(offset_)

class PingAgent public Agent

public

PingAgent()

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

312 C++ code

Phần đầu goacutei mới được đưa vagraveo trong trigravenh mocirc phỏng bằng caacutech định nghĩa

một cấu truacutec C++ với những trường cần thiết định nghĩa một lớp tĩnh để

cung cấp liecircn kết OTcl vagrave sau đoacute thay đổi một số code khởi tạo của trigravenh

mocirc phỏng để gaacuten một byte khoảng trống trong mỗi goacutei nơi magrave một phần

đầu mới được xaacutec định coacute quan hệ với những caacutei khaacutec C++ code được đặt

trong filecc

Viacute dụ C++ code cho giao thức ping

int hdr_pingoffset_

static class PingHeaderClass public PacketHeaderClass public

45

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 46: tổng quan đánh giá hiệu năng mạng

PingHeaderClass() PacketHeaderClass(PacketHeaderPing

sizeof(hdr_ping)) bind_offset(amphdr_pingoffset_)

class_pinghdr

static class PingClass public TclClass public

PingClass() TclClass(AgentPing) TclObject create(int const charconst)

return (new PingAgent())

class_pingPingAgentPingAgent() Agent(PT_PING)

bind(packetSize_ ampsize_)int PingAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the Ping header for the new packet hdr_ping hdr = hdr_pingaccess(pkt) Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtret = 0 Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed

46

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 47: tổng quan đánh giá hiệu năng mạng

return (TCL_OK) If the command hasnt been processed by PingAgent()command call the command() function for the base class return (Agentcommand(argc argv))void PingAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Ping header for the received packet hdr_ping hdr = hdr_pingaccess(pkt) Is the ret field = 0 (ie the receiving node is being pinged) if (hdr-gtret == 0)

Send an echo First save the old packets send_time

double stime = hdr-gtsend_time Discard the packetPacketfree(pkt) Create a new packetPacket pktret = allocpkt() Access the Ping header for the new packethdr_ping hdrret = hdr_pingaccess(pktret) Set the ret field to 1 so the receiver wont

send another echohdrret-gtret = 1 Set the send_time field to the correct valuehdrret-gtsend_time = stime Send the packetsend(pktret 0)

else

A packet was received Use tcleval to call the Tcl

interpreter with the ping results

47

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 48: tổng quan đánh giá hiệu năng mạng

Note In the Tcl code a procedure AgentPing recv from rtt

has to be defined which allows the user to react to the ping

resultchar out[100] Prepare the output to the Tcl interpreter

Calculate the round trip timesprintf(out s recv d 31f name() hdrip-gtsrc_addr_ gtgt

Addressinstance()NodeShift_[1] (Schedulerinstance()clock()-hdr-

gtsend_time) 1000)Tclamp tcl = Tclinstance()tcleval(out) Discard the packetPacketfree(pkt)

313 Tcl code

Sau khi biecircn dịch xong giao thức để mocirc phỏng giao thức ta coacute thể xacircy dựng

kịch bản cho giao thức bằng caacutec cacircu lệnh trong Tcl caacutec cacircu lện nagravey để gọi

ra caacutec node tạo caacutec Agent gọi giao thức đatilde được biecircn dịch ra cho chạy caacutec

goacutei tin vagraveo caacutec thời điểm khaacutec nhau Tcl code được lưu trong filetcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open outnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace

48

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 49: tổng quan đánh giá hiệu năng mạng

close $nf exec nam outnam amp exit 0

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail

Define a recv function for the class AgentPingAgentPing instproc recv from rtt

$self instvar node_puts node [$node_ id] received ping answer from

$from with round-trip-time $rtt ms

Create two ping agents and attach them to the nodes n0 and n2set p0 [new AgentPing]$ns attach-agent $n0 $p0

set p1 [new AgentPing]$ns attach-agent $n2 $p1

Connect the two agents$ns connect $p0 $p1

Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p0 send$ns at 06 $p1 send$ns at 10 finish

49

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 50: tổng quan đánh giá hiệu năng mạng

Run the simulation$ns run

314 Một số thay đổi trong NS2

Khi biecircn dịch chương trigravenh chuacuteng ta phải coacute một số thay đổi cho caacutec file cấu

higravenh Trong packeth (ns-allinone-227ns-227common) Chegraven thecircm

ldquoPT_PINGrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

PT_PING chegraven thecircm PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_PING]=PINGrdquo trong lớp class

p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_PING]=PING

name_[PT_NTYPE]= undefined

50

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 51: tổng quan đánh giá hiệu năng mạng

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

Chap

Trong makefile (ns-allinone-227ns-227)

sessionhelpero delaymodelo srm-ssmo

srm-topoo

pingo

$(LIB_DIR)intVeco $(LIB_DIR)intRVeco

$(LIB_DIR)dmalloc_supporto

32 Xacircy dựng thử nghiệm giao thức CHAP

321 Giao thức CHAP

PPP được xacircy dựng dựa trecircn nền tảng giao thức điều khiển truyền dữ liệu

lớp cao (High-Level Data link Control (HDLC)) noacute định ra caacutec chuẩn cho việc

truyền dữ liệu caacutec giao diện DTE vagrave DCE của mạng WAN như V35 T1 E1

HSSI EIA-232-D EIA-449 PPP được ra đời như một sự thay thế giao thức

Serial Line Internet Protocol (SLIP) một dạng đơn giản của TCPIP PPP cung

51

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 52: tổng quan đánh giá hiệu năng mạng

cấp cơ chế chuyển tải dữ liệu của nhiều giao thức trecircn một đường truyền cơ chế

sửa lỗi neacuten header neacuten dữ liệu vagrave multilink PPP coacute hai thagravenh phần

Link Control Protocol (LCP) (được đề cập đến trong RFC 1570) thiết lập

điều chỉnh cấu higravenh vagrave hủy bỏ một liecircn kết Hơn thế nữa LCP cograven coacute cơ chế

Link Quality Monitoring (LQM) coacute thể được cấu higravenh kết hợp với một trong hai

cơ chế chứng thực Password Authentication Protocol (PAP) hay Challenge

Handshake Authentication Protocol (CHAP)

Network Control Protocol (NCP) NCP lagravem nhiệm vụ thiết lập điều chỉnh

cấu higravenh vagrave hủy bỏ việc truyền dữ liệu của caacutec giao thức của lớp network như

IP IPX AppleTalk and DECnet

Cả LCP vagrave NCP đều họat động ở lớp 2 Hiện đatilde coacute mở rộng của PPP phục vụ

cho việc truyền dữ liệu sử dụng nhiều links một luacutec đoacute lagrave Multilink PPP (MPPP)

trong đoacute sủ dụng Multilink Protocol (MLP) để liecircn kết caacutec lớp LCP vagrave NCP

Giao thức chap (challenge handshake authentication protocol )

CHAP coacute khả năng matilde hoacutea mật khẩu cũng như dữ liệu

Hai đầu kết nối chia sẻ bộ matilde mật secret CHAP giống nhau vagrave mỗi đầu được

gaacuten một local name riecircng Giả sử một user A quay số truy cập vagraveo access server

B Access server sẽ gửi qua đường truyền một goacutei tin khởi tạo chứng thực Type

1 gọi lagrave goacutei tin Challenge Goacutei tin Challenge nagravey chứa một số được sinh ngẫu

52

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 53: tổng quan đánh giá hiệu năng mạng

nhiecircn một số ID sequence number để xaacutec định challenge vagrave tecircn chứng thực của

challenager Becircn gọi sẽ lấy ra chuỗi authentication name vagrave tigravem trong dữ liệu

của migravenh chuỗi matilde mật CHAP ứng với user name nhận được Caller sẽ nhập matilde

mật của CHAP số ID sequence number vagrave một giaacute trị số được sinh ngẫu nhiecircn

vagraveo thuật toaacuten matilde hoaacute Giaacute trị kết quả sau khi tiacutenh matilde hoaacute được gửi trả lại cho

Challenger (Access server) trong một goacutei CHAP Response (Type 2) chứa chuỗi

băm tecircn chứng thực của caller vagrave cuối cugraveng lagrave ID (Sequence Number) được lấy

từ goacutei Challenge Khi nhận được goacutei Response Type 2 Challenger sẽ sử dụng ID

để tigravem goacutei Challenge nguyecircn thủy username của caller (A) được sử dụng để tigravem

kiếm matilde mật CHAP từ một CSDL trong hệ thống maacutey chủ ID giaacute trị Challange

gốc được sinh ngẫn nhiecircn vagrave giaacute trị CHAP ngẫu nhiecircn ban đầu vagrave matilde mật của

được đưa vagraveo xử lỷ bởi hagravem băm(vd MD5) Chuỗi băm kết quả sau khi tiacutenh toaacuten

sau đoacute được so saacutenh với giaacute trị nhận được trong goacutei Response Nếu 2 chuỗi lagrave

giống nhau thigrave quaacute trigravenh chứng thực CHAP đatilde thagravenh cocircng vagrave caacutec goacutei Type 3

được gửi đến caller chứa ID Điều nagravey coacute nghĩa lagrave kết nối đatilde được chứng thực

hợp lệ Nếu chứng thực CHAP thất bại một goacutei tin Type 4 sẽ được gửi đến

caller trong đoacute chứa ID goc xaacutec nhận quaacute trigravenh chứng thực lagrave khocircng thagravenh cocircng

322 Xacircy dựng giao thức

Xacircy dựng tệp mocirc tả chaph

ifndef ns_chap_hdefine ns_chap_h

include agenthinclude tclclhinclude packethinclude addresshinclude iph

53

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 54: tổng quan đánh giá hiệu năng mạng

struct hdr_chap char usrchar passdouble send_time

double rcv_time when ping arrived to receiver int seq sequence number

Header access methodsstatic int offset_ required by

PacketHeaderManagerinline static intamp offset() return offset_ inline static hdr_chap access(const Packet p)

return (hdr_chap) p-gtaccess(offset_)

class ChapAgent public Agent public

ChapAgent() int seq a send sequence number like in real ping

int oneway enable seq number and one-way delay printouts

virtual int command(int argc const charconst argv)

virtual void recv(Packet Handler)

endif ns_chap_h

Triển khai Chapccinclude chaph

int hdr_chapoffset_static class ChapHeaderClass public PacketHeaderClass

trong packetcc lop nay co ham tao truyen 2 tham so

54

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 55: tổng quan đánh giá hiệu năng mạng

PacketHeaderClassPacketHeaderClass(const char classname int hdrlen)

TclClass(classname) hdrlen_(hdrlen) offset_(0)

publicChapHeaderClass()

PacketHeaderClass(PacketHeaderChap sizeof(hdr_chap))

bind_offset(amphdr_chapoffset_)

class_chaphdr

static class ChapClass public TclClass public

ChapClass() TclClass(AgentChap) TclObject create(int const charconst)

return (new ChapAgent())

class_chap

ChapAgentChapAgent() Agent(PT_CHAP) seq(0) oneway(0)

bind(packetSize_ ampsize_)

int ChapAgentcommand(int argc const charconst argv) if (argc == 2) if (strcmp(argv[1] send) == 0) Create a new packet Packet pkt = allocpkt() Access the chap header for the new packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

55

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 56: tổng quan đánh giá hiệu năng mạng

Set the ret field to 0 so the receiving node knows that it has to generate an echo packet hdr-gtusr = 101 hdr1-gtpass= 010 hdr-gtseq = seq++ Store the current time in the send_time field hdr-gtsend_time = Schedulerinstance()clock() Send the packet send(pkt 0) return TCL_OK so the calling function knows that the command has been processed return (TCL_OK) else if (strcmp(argv[1] start-WL-brdcast) == 0) Packet pkt = allocpkt() hdr_ip iph = HDR_IP(pkt) hdr_chap ph = hdr_chapaccess(pkt) hdr_chap ph1 = hdr_chapaccess(pkt) iph-gtdaddr() = IP_BROADCAST iph-gtdport() = iph-gtsport() ph-gtusr = 111

ph1-gtpass= 000 send(pkt (Handler) 0) return (TCL_OK)

else if (strcmp(argv[1] oneway) == 0) oneway=1 return (TCL_OK)

56

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 57: tổng quan đánh giá hiệu năng mạng

If the command hasnt been processed by ChapAgent()command call the command() function for the base class return (Agentcommand(argc argv))

void ChapAgentrecv(Packet pkt Handler) Access the IP header for the received packet hdr_ip hdrip = hdr_ipaccess(pkt) Access the Chap header for the received packet hdr_chap hdr = hdr_chapaccess(pkt) hdr_chap hdr1 = hdr_chapaccess(pkt) them

check if in brdcast mode if ((u_int32_t)hdrip-gtdaddr() == IP_BROADCAST) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) printf(Recv BRDCAST Chap REQ at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) create reply Packet pktret = allocpkt()

hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) hdr_ip ipret = hdr_ipaccess(pktret) hdrret-gtusr = 111 hdrret1-gtpass=111 add brdcast address ipret-gtdaddr() = IP_BROADCAST ipret-gtdport() = ipret-gtsport()

send(pktret 0)

57

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 58: tổng quan đánh giá hiệu năng mạng

else printf(Recv BRDCAST Chap REPLY at dd from ddn here_addr_ here_port_ hdrip-gtsaddr() hdrip-gtsport()) Packetfree(pkt) return Is the ret field = 0 (ie the receiving node is being pinged) if ((hdr-gtusr == 110) and (hdr1-gtpass == 110)) Send an echo First save the old packets send_time double stime = hdr-gtsend_time int rcv_seq = hdr-gtseq Discard the packet Packetfree(pkt) Create a new packet Packet pktret = allocpkt() Access the Chap header for the new packet hdr_chap hdrret = hdr_chapaccess(pktret) hdr_chap hdrret1 = hdr_chapaccess(pktret) Set the ret field to 1 so the receiver wont send another echo hdrret-gtusr = 111 hdrret1-gtpass=111 Set the send_time field to the correct value hdrret-gtsend_time = stime Added by Andrei Gurtov for one-way delay measurement hdrret-gtrcv_time = Schedulerinstance()clock() hdrret-gtseq = rcv_seq Send the packet send(pktret 0) else A packet was received Use tcleval to call the Tcl interpreter with the you results

58

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 59: tổng quan đánh giá hiệu năng mạng

Note In the Tcl code a procedure AgentYou recv from rtt has to be defined which allows the user to react to the you result char out[100] Prepare the output to the Tcl interpreter Calculate the round trip time if (oneway) AG sprintf(out s recv d d 31f 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

hdr-gtseq (hdr-gtrcv_time - hdr-gtsend_time) 1000

(Schedulerinstance()clock()-hdr-gtrcv_time) 1000) else sprintf(out s recv d 31f name()

hdrip-gtsrc_addr_ gtgt Addressinstance()NodeShift_[1]

(Schedulerinstance()clock()-hdr-gtsend_time) 1000) Tclamp tcl = Tclinstance() tcleval(out) Discard the packet Packetfree(pkt)

Một số thay đổi trong NS2 trong packeth (ns-allinone-227ns-227common) ta chegraven thecircm ldquoPT_CHAPrdquo trong lớp enum packet_t

enum packet_t PT_TCPPT_UDP

PT_TFRCPT_TFRC_ACK

59

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 60: tổng quan đánh giá hiệu năng mạng

PT_CHAP PT_NTYPE

Chegraven thecircm biến ldquoname_[PT_CHAP]=Chaprdquo trong lớp class p_info

class p_info

public

name_[PT_TCP]= tcp

name_[PT_UDP]= udp

name_[PT_TFRC]= tcpFriend

name_[PT_TFRC_ACK]= tcpFriendCtl

name_[PT_CHAP]=Chap

name_[PT_NTYPE]= undefined

Trong ns-defaulttcl (ns-allinone-227ns-227tcllib)

Trong file ns-defaulttcl lagrave tất cả caacutec giaacute trị mặc định của Tcl objects thecircm

giaacute trị AgentChap set packetSize_ 64

Trong ns-packettcl (ns-allinone-227ns-227tcllib)

foreach prot AODVARP

CHAP

Trong makefile (ns-allinone-227ns-227)

commonagento commonmessageo appsudpo appschapo commonsession-rtpo appsrtpo tcprtcpo

commonivso $(LIB_DIR)dmalloc_supporto

60

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 61: tổng quan đánh giá hiệu năng mạng

33 Biecircn dịch vagrave thử nghiệm giao thức

331 Biecircn dịch C++ sang Otcl

- Chạy NS2 trong mocirci trường Cyqwin

- Chuyển con trỏ tới thư mục coacute chứa makefilein makefilecc theo đường

dẫn sau Ccygwinhomevuntns-allinone-227ns-227

Trong thư mục đoacute cho pheacutep makefile

Gotilde make clean lệnh nagravey sẽ xoacutea hết caacutec fileo đatilde biecircn dịch trước đoacute

61

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 62: tổng quan đánh giá hiệu năng mạng

Gotilde makefile sẽ biecircn dịch lại vagrave tạo ra caacutec fileo

Nếu coacute chapo được tạo ra thigrave biecircn dịch thagravenh cocircng

332 Xacircy dựng kịch bản

Sau khi makefile thagravenh cocircng để chạy giao thức vừa mới xacircy dựng xong ta

xacircy dựng kịch bản bẳng ngocircn ngữ Tcl

Create a simulator objectset ns [new Simulator]

Open a trace fileset nf [open chnam w]$ns namtrace-all $nf

Define a finish procedureproc finish global ns nf $ns flush-trace close $nf exec nam chnam amp exit 0

62

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 63: tổng quan đánh giá hiệu năng mạng

Create three nodesset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]

Connect the nodes with two links$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns duplex-link $n2 $n3 1Mb 10ms DropTail

Define a recv function for the class AgentChapAgentChap instproc recv from rtt

$self instvar node_puts node [$node_ id] received you answer from

$from with round-trip-time $rtt ms

Create two you agents and attach them to the nodes n0 and n2set p0 [new AgentChap]$ns attach-agent $n0 $p0

set p1 [new AgentChap]$ns attach-agent $n2 $p1set p2 [new AgentChap]$ns attach-agent $n3 $p2

Connect the two agents$ns connect $p0 $p1$ns connect $p0 $p2Schedule events$ns at 02 $p0 send$ns at 04 $p1 send$ns at 06 $p2 send$ns at 06 $p1 send$ns at 10 finish

63

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 64: tổng quan đánh giá hiệu năng mạng

Run the simulation$ns run

333 Mocirc phỏng giao thức

- Chạy trong mocirci trường NS2 chuyển con trỏ tới thư mục coacute chứa file

chaptcl

64

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 65: tổng quan đánh giá hiệu năng mạng

gotilde lệnh ns chaptcl chương trigravenh sẽ chạy như sau

65

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 66: tổng quan đánh giá hiệu năng mạng

BAgraveI TẬP PHẦN MOcirc HIgraveNH MẠNG

66

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 67: tổng quan đánh giá hiệu năng mạng

0

1 2

3 4

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

2 34

5

0

1

2 34

5

0

1

2 34

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1 2

3 4

5

0

1

3

2

0

1

3

2

4

0

1

3

2

4

(2)(1) (3)

(4)(5)

67

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 68: tổng quan đánh giá hiệu năng mạng

=

68

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 69: tổng quan đánh giá hiệu năng mạng

0

1

3

2

4

0

1

3

2

4

4

0

1

3

2

4

0

1

3

2

0

1 2

3 4

5

0

1

3

2

4 5

0

1

3

2

4 50

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

4 5

6 7

0

1

3

2

40

1

3

2

40

1

3

2

4

56

7

(36)

69

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 70: tổng quan đánh giá hiệu năng mạng

BAgraveI TẬP LYacute THUYẾT NS21) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng ping tool2) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tracert tool3) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng SNMP

tool4) Trigravenh bagravey phương phaacutep kiểm soaacutet hiệu năng trecircn cơ sở Sniffer tool5) Trigravenh bagravey caacutech sử dụng vagrave hagravem trong bộ thư viện winpcap libpcap6) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcpdump

tool7) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng windump

tool8) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Wireshark tool9) Trigravenh bagravey phương phaacutep quản trị hiệu năng sử dụng Iris tool10) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DoS tool11) Triển khai minh họa kiểm soaacutet lưu lượng với caacutec DDoS tool12) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Netpert

tool13) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Iperf tool14) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng DBs tool15) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathrate

tool16) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Pathload

tool17) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng Nettest

tool18) Tiacutenh caacutec tham số hiệu năng bằng caacutech lecircn kịch bản vagrave sử dụng tcptrace

tool19) Trong cacircu lệnh set udp [new ApplicationTrafficltudp-src-typegt] hatildey

trigravenh bagravey vagrave so saacutenh khaacutei niệm udp-src-type bao gồm CBR (Constant Bit Rate) Exponential Pareto Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

20) Giải thiacutech cacircu lệnh sau đacircy $ns duplex-link-op $n2 $n3 queuePos 05 mở rộng với cacircu lệnh $ns duplex-link-op Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

21) Giải thiacutech khaacutei niệm Unicast address classifier vagrave multicast address classifier triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

70

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 71: tổng quan đánh giá hiệu năng mạng

22) Giải thiacutech cacircu lệnh set lossmod [new ErrorModel] mở rộng với khả năng sinh lỗi trecircn luồng triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

23) Trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn queue triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

24) Để theo dotildei luồng ứng dụng ns2 sử dụng set trace [new ApplicationTrafficTrace] Hatildey trigravenh bagravey vagrave triển khai caacutec cacircu lệnh taacutec động lecircn trace cho viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

25) Trigravenh bagravey vagrave triển khai cocircng cụ awk triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

26) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ xgraph

27) Cacircu lệnh set trace-all [open tracetr w] sinh ra file tracetr triển khai phacircn tiacutech số liệu trong file đoacute với cocircng cụ gnuplot

28) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Fair Queueing(FQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

29) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Stochastic Fair Queueing(SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

30) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

31) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

32) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm DropTail Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

33) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm

71

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 72: tổng quan đánh giá hiệu năng mạng

Fair Queueing(FQ) Stochastic Fair Queuing (SFQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

34) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

35) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

36) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Fair Queueing(FQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

37) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Deficit Round Robin scheduling (DRR) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

38) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

39) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Stochastic Fair Queuing (SFQ) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

40) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Random Early Detection (RED) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

41) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Deficit Round Robin scheduling (DRR) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

72

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 73: tổng quan đánh giá hiệu năng mạng

42) Trong cacircu lệnh $ns ltlink-typegt ltn1gt ltn2gt ltbandwidthgt ltdelaygt ltqueue-typegt hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm queue-type bao gồm Random Early Detection (RED) Class Based Queuing (CBQ) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

43) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Reno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

44) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

45) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno NewReno Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

46) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

47) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

48) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

49) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

50) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

51) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno Sack

73

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 74: tổng quan đánh giá hiệu năng mạng

Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

52) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Tahoe FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

53) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Reno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

54) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Vegas Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

55) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

56) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

57) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm NewReno FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

58) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Fack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

59) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

60) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Vegas FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

74

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )
Page 75: tổng quan đánh giá hiệu năng mạng

61) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack Sack Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

62) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Fack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

63) Trong cacircu lệnh set tcp_agent [new AgentTCPlttcp-agent-typegt] hatildey trigravenh bagravey vagrave so saacutenh khaacutei niệm tcp-agent-type bao gồm Sack FullTCP Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

64) Trong cacircu lệnh $tcp set ltparametergt ltvaluegt giải thiacutech parameter thiết lập cho Agent TCP sau Window settings (window_) ECN bit (ecn_) timer granularity (tcpTick_) congestion window (cwnd_) ssthresh setting (ssthresh_) Triển khai viacute dụ minh họa trecircn mocirc higravenh mạng cụ thể với caacutec tham số thiết lập

65) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns rtproto lttypegt được triển khai cho thiết lập routing trecircn unicast node với type lagrave Static Session DV cost multipath

66) Giải thiacutech vagrave cho viacute dụ minh họa cacircu lệnh $ns mrtproto lttypegt được triển khai cho thiết lập routing trecircn multicast node với type lagrave CtrMcast DM dynamicDM pimDM

75

  • Giao thức chap (challenge handshake authentication protocol )