tổng quan đánh giá hiệu năng mạng
TRANSCRIPT
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
- 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 )
-
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 )
-
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 )
-
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 )
-
$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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
Đố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 )
-
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 )
-
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 )
-
+ $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 )
-
+ 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 )
-
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 )
-
+ 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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
=
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-
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 )
-