nghiên cứu chương trình mô phỏng mạng ns và các công cụ hỗ trợ, và cơ sở để áp dụng các bài toán ứng dụng trên ns để đánh giá tính khả thi và tối ưu của chúng trên mạng - Pdf 24

Cơ sở mạng thông tin – K4X
MỤC LỤC
Phần I 4
Chương trình mô phỏng mạng 4
Network Simulator (NS-2) 4
1/ :Tại sao phải cần chương trình mô phỏng mạng : 4
2.Phần mềm mô phỏng mạng Network Simulator : (NS) 5
2.1. Tổng quan về NS : 5
2.2. Làm việc với NS : 8
Ngôn ngữ Otcl : 8
Khái niệm tổng quan : 9
Lớp Tcl 9
Yêu cầu các thủ tục OTcl 9
Truyền kết quả tới/từ trình thông dịch 10
Lớp TclObject 10
Tạo và xoá đối tượng TclObject 10
Liên kết biến 11
Các phương thức command: định nghĩa và gọi 11
2.3 Các mô phỏng cơ sở 12
2.3.1 Lớp mô phỏng (class Simulator) 12
2.3.2 Node và truyền tải gói tin (packet forwarding) 13
2.3.3 Các liên kết : 18
2.3.4 Quản lý queue và lập lịch gói 21
Phần II.Công cụ hình ảnh hoá mô phỏng : NAM 31
1.Giới thiệu chung về NAM : 31
1.1. Tổng quan 31
1.2.Các lựa chọn dòng lệnh của NAM: 33
1.3. Giao diện người sử dụng: 33
1.3. Các câu lệnh bàn phím: 35
1.4. Tạo ra các hoạt động bên ngoài từ Nam : 35
1.5. Network Layout: 36

Lời mở đầu
Cyber Pro !!! :))
2
Cơ sở mạng thông tin – K4X
Trong những năm gần đây mạng máy tính phát triển ngày càng mạnh mẽ tạo
nên một bước ngoặt quan trọng trong công nghệ thông tin. Mạng máy tính ngày
nay có mặt trong rất nhiều các hoạt động trong đời sống. Các công nghệ, các kỹ
thuật phục vụ cho môi trường mạng đã được xây dựng nhiều, và đang còn được
tiếp tục phát triển, cải tiến.
Muốn có một mạng thật để thử nghiệm các công nghệ mới thì thật tốn kém,
không phải cá nhân, tổ chức nào cũng có thể đáp ứng được.Hơn nữa các mạng cục
bộ này không những phải đảm bảo các tính năng của một mạng thông thường mà
còn phải thực hiện được những bài toán thử nghiệm cũng như giúp cho sinh viên
thấy được tính khả thi của chúng đối với các bài toán mới.Cách tốt nhất để giải
quyết những yêu cầu đặt ra đó là dùng một môi trường mạng ảo để xây dựng và thử
nghiệm các công nghệ mới. Giả lập mạng (network simulator) ra đời với mục đích
đó,trong đó tiêu biểu là chương trình NS, có thể dùng để thực hiện các kịch bản
mạng như áp dụng các mô hình UDP/TCP, các bài toán routing vào các tôpô thích
hợp.
Do đó đề tài thực tập tốt nghiệp của chúng em là : “Nghiên cứu chương trình
mô phỏng mạng NS và các công cụ hỗ trợ, và cơ sở để áp dụng các bài toán ứng
dụng trên NS để đánh giá tính khả thi và tối ưu của chúng trên mạng”.
Chúng em xin chân thành cảm ơn thầy giáo TS.Đặng Văn Chuyết, TS
Nguyễn Linh Giang và thầy Tạ Hải Tùng đã tận tình hướng dẫn chúng em định
hướng, thực hiện đề tài này .
Cyber Pro !!! :))
3
Cơ sở mạng thông tin – K4X
Phần I
Chương trình mô phỏng mạng

chế trừu tượng hoá trong NS cho phép các nhà nghiên cứu kiểm tra được các giao thức mà không
cần có sự thay đổi trong mô phỏng và công nhận kết sự trừu tượng hoá thông qua việc so sánh
nhiều chi tiết và trừu tượng hoá các kết quả .
2. Tính mô phỏng : Hầu hết những thí nghiệm mô phỏng đều bị giới hạn trong một thế
giới mô phỏng nên chỉ có sự xuất hiện của các giao thức và các thuật toán trong chương trình mô
phỏng . Trái ngược với điều này , sự mô phỏng ở đây cho phép chạy chương trình mô phỏng có
sự tương tác giữa các nốt mạng với nhau .
3. Thực hiện các kịch bản : Việc kiểm tra các giao thức dưới các điều kiện mạng thích
hợp là vấn đề then chốt để giành được kết quả tốt . Chương trình sẽ tự động tạo ra các mẫu lưu
thông phức tạp , các Topology và các sự kiện động có thể giúp tạo ra các kịch bản .
Cyber Pro !!! :))
4
Cơ sở mạng thông tin – K4X
4. Tính trực quan : Các nhà nghiên cứu cần các công cụ có thể giúp họ hiểu được các hoạt
động phức tạp trong mạng . Tính trực quan sử dụng công cụ có hoạt ảnh : Nam cung cấp một sự
thể hiện động cho phép các nhà nghiên cứu phát triển tốt hơn khả năng trực giác đối với các giao
thức và giúp cho việc dò sửa lỗi trong các giao thức
5. Khả năng mở rộng : Chương trình mô phỏng phải dễ mở rộng nếu nó cần thiết phải
thêm vào các tác vụ cần thiết .
2.Phần mềm mô phỏng mạng Network Simulator : (NS)
2.1. Tổng quan về NS :
NS là hệ thống mô phỏng mạng, đặc biệt là các giao thức điều khiển hoạt động của mạng,
phát triển tại đại học Berkeley và viện công nghệ thông tin ISI (Information Science Institute), có
khả năng mô phỏng nhiều kiểu mạng IP khác nhau. Nó mô phỏng việc thực hiện các giao thức
mạng như TCP, UDP, các nguồn dữ liệu FTP, Telnet, Web, CBR và VBR, có cơ chế quản lí hàng
đợi router như DropTail, RED và CBR, với các giải thuật chọn đường như Dijkstra… ns cũng bổ
xung phần multicasting với một số giao thức tầng MAC để hỗ trợ việc mô phỏng mạng LAN.
Phiên bản hiện nay của ns (ver 2) được viết bằng C++ và Otcl (Otcl: là mở rộng của ngôn ngữ
Tcl có thêm phần hướng đối tượng, tương tự như C và C++). Dưới góc độ người dùng, một hệ
thống mô phỏng có sơ đồ như sau:

Lý do để ns sử dụng hai ngôn ngữ lập trình là do hệ mô phỏng phải thực hiện hai dạng
yêu cầu xử lý khác nhau. Một mặt, việc mô phỏng chi tiết các giao thức đòi hỏi một ngôn ngữ lập
trình hệ thống có khả năng thao tác hiệu quả với các byte, packet header, và thực hiện những giải
thuật với tập dữ liệu lớn. Với những công việc dạng này, tốc độ của thực hiện khi chạy rất quan
trọng, và thời gian xử lý quay vòng (chạy mô phỏng, tìm lỗi, gỡ lỗi, dịch lại, chạy lại) kém quan
trọng hơn. Mặt khác, khi nghiên cứu mạng, rất cần nhanh chóng thay đổi tham số hay cấu hình,
hoặc đưa ra nhiều kịch bản hoạt động khác nhau. Trong những trường hợp như vậy, thời gian
quay vòng (thay đổi mô hình và chạy lại) quan trọng hơn thời gian cấu hình ban đầu và thời gian
chạy. ns thoả mãn cả hai yêu cầu này với C++ và Otcl. C++ chạy nhanh nhưng lại chậm khi cần
có thay đổi, rất phù hợp cho việc triển khai chi tiết các giao thức. Otcl chạy chậm hơn nhiều, song
lại có khả năng thay đổi rất nhanh (và có tính tương tác tốt), có thể thoả mãn tốt nhu cầu cấu hình
hệ thống mô phỏng. ns sử dụng tclcl (tcl – c linkage) như một lớp keo gắn kết các đối tượng và
biến trong hai ngôn ngữ.
Mỗi ngôn ngữ được sử dụng với mục đích riêng. Otcl có thể được sử dụng:
- Trong việc cấu hình, cài đặt và các công việc thực hiện “một lần”
- Chỉnh sửa các đối tượng C++ đã có sẵn
Và sử dụng C++ cho:
- Khi làm các công việc đòi hỏi xử lý từng gói tin của luồng dữ liệu
- Khi phải thay đổi các hành vi của các lớp C++ đã tồn tại
Có thể hình dung tổ chức của ns qua sơ đồ sau:
Cyber Pro !!! :))
6
Cơ sở mạng thông tin – K4X
Sơ đồ 3: Kiến trúc của ns
Sơ đồ Kiến trúc của ns thể hiện kiến trúc ns, nói chung có thể coi người dùng như đang
đứng ở góc dưới bên trái, thiết kế và chạy hệ mô phỏng bằng ngôn ngữ Tcl và sử dụng các đối
tượng Otcl trong thư viện. Event Scheduler và hầu hết các đối tượng Network Component đều
được viết bằng C++, và có thể triệu gọi từ Otcl thông qua giao tiếp tclcl, cả hệ thống kết hợp lại
thành ns.
Sơ đồ Mô hình ns đơn giản cũng chỉ ra , khi kết thúc quá trình mô phỏng, ns có thể sinh

sh install để chạy Script Install của NS . Sau khi đã Install xong ta Copy các Flie trong thư mục
Bin của NS vào thư mục Bin của Root hoặc User tuỳ cấp độ sử dụng .
Như vậy là ta đã có thể sử dụng chương trình mô phỏng mạng NS .
Ta còn có thể chạy được NS trên Window nhờ vào một chương trình giả lập môi trường LINUX
trên hệ điều hành Windows gọi là : Cygwin . Để chạy NAM ta còn phải cài đặt thêm
Xfree86Server . Tuy nhiên vì điều kiện chưa Down được Xfree86 cho nên chúng em chưa thử
nghiệm được NAM trên môi trường Windows , nhưng đã có thể cài đặt và chạy được NS trên
Window .
2.2.2 Lập trình bằng Otcl trong NS :
Ngôn ngữ Otcl :
ns là một chương trình mô phỏng hướng đối tượng, viết bởi C++, sử dụng một trình thông
dịch OTcl như một bộ giao tiếp trực tiếp với người dùng. Chương trình thông dịch hỗ trợ một lớp
phân cấp trong C++ (gọi là phân cấp biên dịch) và một lớp phân cấp tương ứng trong trình thông
dịch Otcl (gọi là phân cấp thông dịch). Có sự tương ứng một một giữa một lớp trong phân cấp
thông dịch và một lớp trong phân cấp biên dịch. Lớp gốc của phân cấp này là lớp TclObject.
Người dùng tạo ra các đối tượng giả lập mới thông qua trình biên dịch, những đối tượng
này được thể hiện trong trình thông dịch, và được phản xạ tỉ mỉ, bởi một đối tượng tương ứng
trong phân cấp biên dịch. Phân cấp lớp thông dịch được tự động đưa vào thông qua các phương
thức định nghĩa trong lớp TclObject.
Cyber Pro !!! :))
8
Cơ sở mạng thông tin – K4X
Khái niệm tổng quan :
Tại sao dùng 2 ngôn ngữ ? ns dùng hai ngôn ngữ bởi vì bộ mô phỏng có hai việc khác
nhau cần thực hiện
- Một mặt, các mô phỏng chi tiết của giao thức yêu cầu một ngôn ngữ lập trình hệ thống
mà hoạt động có hiệu quả tới các byte, packet header, các thuật toán chạy trên các bộ dữ liệu lớn.
Với những tác vụ này, tốc độ chạy thực (runtime speed) là quan trọng, còn thời gian thay đổi
(chạy giả lập, sửa lỗi, biên dịch lại, chạy lại) là không quan trọng.
- Mặt khác, phần lớn mạng nghiên cứu, bao gồm các thông số, cấu hình khác nhau, hoặc

hàm eval(char *s) trên bộ đệm trong.
- Tcl.eval() giả định rằng lệnh đó đã được lưu trong đệm trong bp_ của lớp, nó trực tiếp yêu
cầu Tcl.eval( char* bp_ ). Một handle tới chính bộ đệm thông qua phương thức
tcl.buffer(void).
- Tcl.evalf(const char* s, ) gần tương đương Printf(3). Nó sử dụng vsprintf(3) nội tại để
tạo xâu vào.
Cyber Pro !!! :))
9
Cơ sở mạng thông tin – K4X
Truyền kết quả tới/từ trình thông dịch
Khi trình thông dịch yêu cầu một phương thức C++, nó tiếp nhận kết quả trả lại trong biến
thành phần private, tcl_->result. Hai phương thức có khả năng để đặt biến này:
- Tcl.result(const char* s) truyền xâu kết quả s lại trình thông dịch.
- Tcl.resultf(const char* fmt, )
- varargs(3) biến đổi trên để định dạng kết quả sử dụng vsprintf(3), truyền xâu kết quả
tới trình thông dịch.
if (strcmp(argv[1], "now") = = 0) {
tcl.resultf("%.17g", clock());
return TCL_OK;
}
tcl.result("Invalid operation specified");
return TCL_ERROR;
Khi một phương thức C++ yêu cầu một lệnh OTcl, trình thông dịch trả về kết quả trong
tcl_->result. tcl.result(void) phải được dùng để nhận kết quả. Chú ý rằng, kết quả là một xâu, nó
phải được chuyển tới một định dạng bên trong tương ứng với kiểu của kết quả.
tcl.evalc("Simulator set NumberInterfaces_");
char* ni = tcl.result();
if (atoi(ni) != 1)
tcl.evalc("Simulator set NumberInterfaces_ 1");
Lớp TclObject

Các kỹ thuật tạo bóng ở trên chỉ được thực hiện khi người dùng tạo đối tượng TclObject
thông qua trình thông dịch.
b,Xoá đối tượng TclObject: Hành động xoá delete sẽ huỷ đối tượng thông dịch và đối
tượng bóng của nó. Giống như hàm thiết lập, hàm huỷ đối tượng phải gọi hàm huỷ cho lớp cha
một cách tường minh như các lệnh cuối của hàm huỷ. Hàm huỷ TclObject sẽ yêu cầu thủ tục thể
hiện delete-shadow, tiếp đó yêu cầu phương thức tương ứng trong trình biên dịch để huỷ đối
tượng bóng. Trình thông dịch tự nó sẽ huỷ đối tượng thông dịch.
Liên kết biến
Thông thường, việc truy xuất biến biên dịch hay biến thông dịch chỉ giới hạn trong mã
biên dịch hay mã thông dịch. Tuy nhiên ns có cơ chế cho phép liên kết giữa biến biên dịch và
biến thông dịch, sự thay đổi của biến này sẽ được phản ánh vào biến liên kết với nó.
Việc liên kết được thực hiện thông qua hàm khởi tạo của đối tượng biên dịch. ns hỗ trợ 5
kiểu dữ liệu khác nhau, biến giá trị băng thông, biến thời gian, nguyên, thực và biến logic.
Các phương thức command: định nghĩa và gọi
Mỗi TclObject được tạo, ns thiết lập một thủ tục instance, cmd{}, cho phép thực thi các
hàm thông qua các đối tượng biên dịch, cmd{} tự động gọi thủ tục command{} của đối tượng
biên dịch và truyền các tham số cần thiết.
Người dùng yêu cầu phương thức cmd{} theo một trong hai cách: gọi tường minh hoặc
không tường minh. Với cách tường minh, người dùng gọi thủ tục cmd{} và truyền tham số đầu
tiên là hành động cần thực hiện. Với cách không tường minh, nếu có một thủ tục instance có tên
giống như hành động cần thực hiện thì người dùng chỉ việc gọi thủ tục instance đó.
Lớp TclClass
Lớp biên dịch này (TclClass) là một lớp trừu tượng. Các lớp kế thừa từ lớp này cung cấp
hai chức năng: khởi tạo cây lớp thông dịch ánh xạ của cây lớp biên dịch và cung cấp các phương
thức để tạo các TclObject mới. Mỗi lớp kế thừa được liên kết với một lớp biên dịch trong cây lớp
biên dịch.
Lớp TclCommand
Lớp này chỉ cung cấp các kỹ thuật cho ns để xuất các lệnh đơn giản tới trình thông dịch,
mà sau đó được chạy trong phạm vi toàn cục bởi trình thông dịch.
Lớp InstVar

Trình mô phỏng hoạt động theo kiểu hướng sự kiện. Có bốn bộ lập lịch, mỗi bộ sử dụng
các cấu trúc dữ liệu khác nhau: danh sách liên kết đơn linked-list, heap, calendar queue (ngầm
định) và kiểu một đặc biệt được gọi là “real time”. Bộ lập lịch thực hiện chọn sự kiện tiếp theo
gần nhất, hoàn thành nó và sau đó xử lý sự kiện tiếp theo. Đơn vị sử dụng cho lập lịch là giây.
Hiện tại, trình mô phỏng chạy đơn tuyến , chỉ một sự kiện được chạy ở một thời điểm. Nếu có
nhiều hơn một sự kiện được lập lịch để chạy đồng thời thì việc chạy chúng được thực hiện trên
cơ sở sự kiện nào được lập lịch trước sẽ được chạy trước. Các sự kiện mô phỏng không bao giờ
được sắp xếp lại bởi bộ lập lịch. Một sự kiện thường bao gồm một “firing time” và một hàm quản
lý (handler function).
Hai kiểu đối tượng được thừa kế từ lớp cơ sở Event là packets và “at-events”. Một at-
event là một thủ tục được lập lịch chạy ở một thời điểm xác định. Đó là một chuỗi được sử dụng
trong các script mô phỏng.
Bộ lập lịch kiểu danh sách (List Scheduler): sử dụng một cấu trúc danh sách liên kết đơn.
Danh sách này tổ chức theo trật tự thời gian, theo đó việc chèn và xoá sự kiện yêu cầu phải quét
danh sách để tìm điểm vào thích hợp. Khi chọn sự kiện tiếp theo để chạy cần cắt điểm đầu của
danh sách khỏi danh sách. Cách thực hiện này đảm bảo thực hiện các sự kiện trong dãy FIFO của
dòng các sự kiện.
Cyber Pro !!! :))
12
Cơ sở mạng thông tin – K4X
Bộ lập lịch kiểu vun đống (heap scheduler): thực hiện lập lịch theo cấu trúc vun đống. Cấu trúc
này cao cấp hơn so với cấu trúc danh sách cho một số lượng lớn các sự kiện, thời gian chèn và
xoá n sự kiện là O(log n).
Bộ lập lịch kiểu (calendar queue): sử dụng cấu trúc dữ liệu giống lịch năm để bàn, ở đó các sự
kiện cùng tháng/ngày của nhiều năm có thể được ghi cùng một ngày.
Bộ lập lịch thời gian thực: đồng bộ việc thực hiện các sự kiện với thời gian thực. Nó hiện tại
vẫn được đang phát triển.
2.3.2 Node và truyền tải gói tin (packet forwarding)
2.3.2.1 Các cơ sở node (Node basics)
Cơ sở nguyên thuỷ để tạo node là:

• Quản lý agent
• Thêm các hàng xóm
Các hàm điều khiển
• $node entry trả về điểm vào cho mỗi node. Đây là phần tử đầu tiên sẽ quản lý các gói tin
đến node. Biến instance node, entry_, lưu tham chiếu phần tử này. Với node unicast, đấy
là phân lớp (classfier_) địa chỉ mà nhìn ở các bit cao trong địa chỉ đích. Biến instance
classfier_ chứa tham chiếu tới phân lớp này. Tuy nhiên, với các node multicast, điểm vào
là switch_ nó nhìn ở bít đầu tiên để chỉ ra nó sẽ truyền gói tới phân lớp unicast, hay phân
lớp multicast tương ứng.
• $node reset sẽ reset tất cả các tác tử tại node.
Quản lý số hiệu cổng và địa chỉ
Thủ tục $node id trả về số hiệu node. Số này tự động tăng và gắn tới mỗi node lúc khởi
tạo bởi phương thức lớp Simulator, $ns node. Lớp Simulator cũng lưu một mảng biến instance,
node_, được đánh số bởi node id, và chứa một tham chiếu tới node với id đó.
Thủ tục $node agent (port) trả về handle của agent tại port xác định. Nếu không có agent
nào tại số hiệu cổng chỉ định sẵn sàng, thủ tục trả về một xâu rỗng.
Thủ tục alloc-port trả về số hiệu cổng tiếp theo có thể được sử dụng. Nó dùng một biến
instance, np_, để đánh dấu số hiệu cổng chưa được xác định.
Cyber Pro !!! :))
14
Cơ sở mạng thông tin – K4X
Thủ tục add-route và add-routes, dùng bởi unicast routing để thêm các đường đi vào
classifier_. Cú pháp được dùng là:
$node add-route <destination id> <TclObject> .
$node add-routes <destination id> <TclObjects> được dùng để thêm nhiều router tới
cùng một đích.
Ngược lại với thủ tục add-routes{} là delete-routes{}.
Quản lý agent
Với một <agent>, thủ tục attach{} sẽ thêm agent vào danh sách của agents_ của nó, gắn
số hiệu cổng với agent và đặt địa nguồn cho nó, đặt đích của agent ở entry{} của nó, thêm một

Cyber Pro !!! :))
15
Cơ sở mạng thông tin – K4X
Phân lớp multicast phân lớp các gói theo cả (nhóm) địa chỉ đích và nguồn. Nó duy trì một
bảng ánh xạ cặp nguồn/nhóm tói các số hiệu slot. Khi một gói đến chứa một cặp nguồn/nhóm
chưa xác định tới phân lớp, nó yêu cầu một thủ tục OTcl là Node::new-group{} để thêm một
điểm vào trong bảng của nó.
Phân lớp đa đường (MultiPath)
Đối tượng này được tạo ra để trợ giúp truyền trên nhiều đường có chi phí (cost) bằng
nhau, ở đây node sẽ có nhiều đường chi phí bằng nhau tới cùng một đích, và dùng tất cả chúng
đồng thời. Đối tượng này không kiểm soát bất kỳ một trường nào trong gói. Với mỗi gói thành
công, nó đơn giản trả về trường slot tiếp trong chế độ làm tròn robin.
Phân lớp băm
Đối tượng này được dùng để phân lớp một gói như các thành phần của một luồng. Đúng
như tên của nó chỉ ra, phân lớp băm sử dụng bảng băm để gắn các gói với các luồng. Các gói có
thể được gắn tới các luồng dựa vào định danh luông (flow ID), địa chỉ đích, địa chỉ nguồn/đích,
hoặc sự kết hợp địa chỉ nguồn /đích cộng với định danh luồng.
Phân lớp băm được tạo ra với một tham số nguyên chỉ định kích thước khởi tạo của bảng
băm. Kích thước hiện tại của bảng băm có thể thay đổi với phương thức resize. Khi đã tạo, một
biến instance shift_ và mask_ được khởi tạo với giá trị NodeShift và NodeMask hiện tại tương
ứng của trình mô phỏng. Những giá trị này nhận được từ đối tượng AddrParams khi một phân lớp
băm được khởi tạo. Phân lớp băm sẽ thất bại nếu cấu trúc AddrParams không được khởi tạo.
Phân lớp băm nhận các gói, phân lớp theo các điều kiện luồng của chúng, và nhận các
phân lớp slot chỉ định node tiếp theo có thể nhận gói đó.
Replicator
Replicator khác với các phân lớp khác, nó không dùng chức năng phân lớp. Nó đơn giản
chỉ dùng các phân lớp như một bảng có n slot, nó sử dụng phương thức resv() để tạo n bản copy
của gói rồi phát tới n đối tượng được tham chiếu trong bảng.
Để hỗ trợ truyền gói multicast, một phân lớp nhận một gói multicast từ nguồn S cho nhóm
G tính một hàm băm h(S,G) cho một số hiệu slot trong bảng đối tượng phân lớp.

• Các phân lớp nằm trong node. Chúng dùng bảng routing đã được tính để thực hiện chuyển
gói.
Khi tính toán một giao thức routing mới, không cần thực hiện tất cả các khối đó.
Khi một giao thức routing mới gộp nhiều hơn một khối chức năng, đặc biệt khi nó chứa
phân cấp của chính nó, nó muốn có một đối tượng khác, mà gọi là routing module, quản lý tất cả
các khối chức năng đó và giao tiếp với node để tổ chức các phân lớp của nó.
Hình sau mô tả mối liên quan chức năng giữa các đối tượng này:
Hình 3: Mudule routing
Các module routing có thể có quan hệ trực tiếp với các khối tính toán đường, route logic
và/hoặc routing agent. Mặc dù vậy, khối tính toán đường có thể không được cài trực tiếp các
đường của chúng thông qua module routing, bởi vì có thể tồn tại các module khác chú tâm tìm
các đường mới.
Một module routing bao gồm 3 chức năng lớn:
• Khởi tạo các liên kết của nó tới một node thông qua register{}, và loại bỏ liên kết qua
unregister{}. Thường trong register{}, một module routing
(1) nói cho node biết liệu nó có muốn biết các cập nhật đường và gắn kết các agent
vận chuyển.
Cyber Pro !!! :))
17
Cơ sở mạng thông tin – K4X
(2) tạo các phân lớp của nó và cài chúng trong node. Trong unregister{} một
module routing thực hiện công việc ngược lại: xoá các phân lớp và bỏ các kết nối
của nó tới bộ cập nhật đường của node.
• Nếu module routing muốn biết các cập nhật đường, node sẽ thông tin cho module thông
qua RtModule::add-route{dst,target} và RtModule::delete-route{dst, nullagent}
• Nếu module routing muốn thức hiện gắn kết và huỷ bỏ gắn kết các agent vận chuyển
trong node, node sẽ thông tin cho module thông qua: RtModule::attach{agent, port} và
RtModule::detach{agent, nullagent}
Giao diện node
Để liên kết với các giao diện của module routing, node cung cấp các giao diện tương ứng:

2.3.3 Các liên kết :
Các liên kết đơn
Cyber Pro !!! :))
18
Cơ sở mạng thông tin – K4X
Phần này sẽ mô tả cách tạo các liên kết để kết nối các node và hoàn thiện topology của
mạng trong giới hạn mô tả các liên kết điểm-điểm đơn giản. Cũng như node được cấu tạo từ các
phân lớp, một liên kết đơn được xây dựng từ một chuỗi các bộ kết nối (connector).
Lớp Link là một lớp trong OTcl, cung cấp một vài primitive (hàm nguyên thuỷ) đơn giản.
Lớp SimpleLink cung cấp khả năng để kết nối hai node bằng liên kết điểm-điểm. ns cung cấp thủ
tục simplex-link{} để xây dựng các liên kết đơn hướng từ một node tới một node khác. Cú pháp
mô tả như sau:
set ns [new Simulator]
$ns simplex-link (node0)( node1)(bandwidth)(delay)(queue_type)
Lệnh này tạo một liên kết từ node0 tới node1 với băng thông bandwidth và độ trễ delay. Liên kết
này dùng một queue các kiểu queue_type.
Cấu trúc của một liên kết đơn giản:
Hình 4: Cấu trúc Link trong ns
• head_ là điểm vào của liên kết, nó chỉ tới đối tượng đầu tiên của liên kết.
• queue_tham chiếu tới hàng đợi chính các phần tử của liên kết.
• link_ tham chiếu tới phần tử thực sự làm mô hình cho liên kết này, về đặc tính trễ và
băng thông của liên kết.
• ttl_tham chiếu tới phần tử xử lý thời gian sống của mỗi gói
• drophead_ tham chiếu tới một đối tượng là đầu của hàng đợi các thành phần bị bỏ qua bởi
xử lý liên kết.
• enqT_ tham chiếu tới phân tử đánh dấu các gói đang vào queue_
• deqT_ tham chiếu tới phần tử đánh dấu các gói đang rời khỏi queue_
• drpT_ tham chiếu tơi phần tử đánh dấu các gói đã bị bỏ từ queue_
• rcvT_ tham chiếu tới phần tử đánh dấu các gói đã nhận được bởi node tiếp theo.
Thủ tục duplex-link{} xây dựng một liên kết hai hướng từ hai liên kết đơn giản.

set ttl_ [new TTLChecker]
$ttl_ target [$link_ target]
$link_ target $ttl_
}
2.3.3.2 Các bộ kết nối (connector)
Các connector không giống các phân lớp (classifier), nó chỉ tạo dữ liệu cho một bên nhận;
hoặc là gói dữ liệu được chuyển cho hàng xóm target_, hoặc là huỷ (gửi đến drop-target_)
Một connector sẽ nhận một gói, thực hiện vài chức năng, và phát gói đó tới hàng xóm của
nó, hoặc loại bỏ gói. Có nhiều loại connector trong ns, mỗi loại thực hiện một chức năng khác
nhau:
• Networkinterface : dán nhãn các gói với định danh giao diện đến - nó được dùng bởi các
giao thức định tuyến multicast
• DynaLink : đối tượng mà gate traffic phụ thuộc vào link là up hay down
• DelayLink : đối tượng mà mô hình hoá tính chất độ trễ và băng thông của liên kết
• Queues : kiểu output buffer gắn vào link trong một “real” router trong một mạng
• TTLChecker : giảm ttl của mỗi gói tin khi nó được nhận.
2.3.3.3 Phân cấp đối tượng
Lớp cơ sở dùng đẻ mô tả liên kết gọi là Link.
SimpleLink Object : dùng để thể hiện một liên kết đơn hướng . Không có biến trạng thái hay
tham số cấu hình gắn với đối tượng này.
DelayLink Object : xác định tổng thời gian yêu cầu cho một packet băng qua một link. Nó được
xác định bởi size/bw + delay với size là kích thước gói tin, bw là bandwidth của link và delay là
độ trễ khi truyền của link.
Cyber Pro !!! :))
20
Cơ sở mạng thông tin – K4X
2.3.4 Quản lý queue và lập lịch gói
Queue biểu diễn các vị trí là nơi mà có thể lưu các gói hay drop. Packet scheduling đề cập
tới các quyết định phục vụ hay là drop gói tin. Hiện tại có các kiểu drop-detail queueing (FIFO),
quản lí bộ đệm RED, CBQ và một vài loại Fair Queueing như Fair Queueing (FQ), Stochastic

length() trả về. Hàm enque đặt packet chỉ định ở cuối queue và cập nhật biến thành phần len_.
Hàm deque trả về packet ở đỉnh queue và xoá nó khỏi queue, hoặc trả về NULL nếu queue rỗng.
Hàm lookup trả về packet thứ r từ đỉnh queue, hoặc NULL nếu không có. Hàm remove xoá gói ở
địa chỉ đã cho trong queue. Nó sẽ khiến chương trình kết thúc bất thường nếu gói đó không tồn
tại.
2.3.4.4 Các loại đối tượng queue.
Một đối tượng queue là một lớp thông thường của đối tượng có khả năng giữ và đánh dấu
hoặc bỏ qua các packet khi chúng đi qua topology được mô phỏng.
Cyber Pro !!! :))
21
Cơ sở mạng thông tin – K4X
Các tham số cấu hình được dùng cho đối tưọng queue là:
• Limit_ kích thước queue trong các packet.
• Blocked_ ngầm định là false, nó là true nếu queue bị block.
• unblock_on_resume_ đặt ngầm định là true, chỉ ra một queue nên tự unblock ở thời
điểm gói cuối cùng đã gửi xong.
2.3.5 Các trễ và các liên kết
Các trễ thể hiện thời gian mỗi gói qua một liên kết. Một dạng cụ thể của đối tượng này
(“dynamic link”) cũng hiển thị khả năng hỏng của một liên kết. Tổng thời gian yêu cầu cho một
gói vượt qua một liên kết được định nghĩa theo: s/b+d trong đó s là kích thước gói, b là tốc độ
của liên kết (bits/s), d là trễ liên kết (s). Sự thực hiện các trễ liên kết được gắn chặt chẽ với thủ
tục khối hoá queue.
Đối tượng này trợ giúp một insproc-like, $object dynamic, để đặt các biến của nó,
dynamic_. Biến này xác định liệu liên kết có là liên kết động hay không.
Với các liên kết không động, phương thức này thực hiện bởi việc nhận một gói p và lập
lịch hai sự kiện. Giả sử hai sự kiện này gọi là E1 và E2, và sự kiện E1 được lập lịch xảy ra sau
E2. E1 được lập lịch để xảy ra khi có packet gửi tới node với độ trễ để hoàn tất việc gửi packet
hiện tại. E1 thường gắn với đối tượng Queue, do đó nó sẽ được unblock. E2 thể hiện sự kiện
packet được chuyển đến nút lân cận tiếp theo. Sự kiện E2 xảy ra một số giây sau E1 là trễ liên
kết.

• Packet* allocpkt() cấp phát một gói mới và gán các trường của nó.
• Packet* allocpkt(int) cấp phát gói mới với một tải dữ liệu n byte và gán các trường của nó
Các hàm thành viên sau của lớp Agent thường được override bởi lớp dẫn xuất:
• void timeout(timeout number) lớp con chỉ định phương thức timeout
• void recv(Packet*, Handler*) agent nhận receiving nhận đường dẫn.
2.3.6.3 Các Agent giao thức:
Trong ns có cung cấp các agent sau: (tên trong OTcl)
TCP a “Tahoe” TCP sender (cwnd = 1 on any loss)
TCP/Reno a “Reno” TCP sender (with fast recovery)
TCP/Newreno a modified Reno TCP sender (changes fast recovery)
TCP/Sack1 a SACK TCP sender
TCP/Fack a “forward” SACK sender TCP
TCP/FullTcp a more full-functioned TCP with 2-way traffic
TCP/Vegas a “Vegas” TCP sender
TCP/Vegas/RBP a Vegas TCP with “rate based pacing”
TCP/Vegas/RBP a Reno TCP with “rate based pacing”
TCP/Asym an experimental Tahoe TCP for asymmetric links
TCP/Reno/Asym an experimental Reno TCP for asymmetric links
TCP/Newreno/Asym an experimental Newreno TCP for asymmetric links
TCPSink a Reno or Tahoe TCP receiver (not used for FullTcp)
TCPSink/DelAck a TCP delayed-ACK receiver
TCPSink/Asym an experimental TCP sink for asymmetric links
TCPSink/Sack1 a SACK TCP receiver
TCPSink/Sack1/DelAck a delayed-ACK SACK TCP receiver
UDP a basic UDP agent
RTP an RTP sender and receiver
RTCP an RTCP sender and receiver
LossMonitor a packet sink which checks for losses
IVS/Source an IVS source
IVS/Receiver an IVS receiver

thời điểm 1.2 giây. Thao tác start là một thủ tục instance được định nghĩa trong lớp
Application/FTP. Nó được định nghĩa trong ~ns/tcl/lib/ns-source.tcl như sau:
Application/FTP instproc start {} {
[$self agent] send -1
}
Trong trường hợp này, agent tham chiếu đến agent TCP đơn giản của chúng ta và send –1
tương tự như gửi một file lớn tùy ý.
Lời gọi đến send cuối cùng dẫn đến việc TCP sender tạo ra các gói.
Xử lý đầu vào tại nơi nhận
Nhiều TCP agent có thể được sử dụng cùng với lớp TCPSink. Lớp này định nghĩa các
phương thức recv() và ack().
Phương thức recv() chèn lên phương thức Agent::recv() (chỉ đơn thuần là hủy bỏ gói nhận
được). Nó cập nhật trạng thái bên trong với số thứ tự của gói nhận được (và do đó yêu cầu biến
off_tcp_ được khởi tạo đúng). Sau đó, nó tạo ra một tín hiệu báo nhận (acknowledgment) cho gói
nhận được.
Phương thức ack() cho phép truy nhập đầy đủ tới các trường header của gói bao gồm sự
truy nhạp riêng biệt tới TCP header, IP header, Flags header và các header chung. Lời gọi tới
send() dẫn ra phương thức Connector::send().
Xử lý các phản hồi tại nơi gửi
Một khi phía bên kia của TCP đơn giản nhận được dữ liệu và tạo ra một ACK, nơi gửi
thường phải xử lý ACK. Trong agent TcpAgent, điều này được làm như sau:
/*
* main reception path - should only see acks, otherwise the
* network connections are misconfigured
*/
Cyber Pro !!! :))
24
Cơ sở mạng thông tin – K4X
void TcpAgent::recv(Packet *pkt, Handler*)
{

1. Quyết định cấu trúc kế thừa của nó, và tạo ra các định nghĩa lớp phù hợp.
2. Định nghĩa các phương thức recv() và timeout().
3. Định nghĩa những lớp timer cần thiết nào đó.
4. Định nghĩa các hàm liên kết OTcl.
5. Viết mã OTcl cần thiết để truy nhập agent (Phần 10.6.4).
2.3.7 Timer:
Các bộ định thời được cài đặt cả trong C++ và trong OTcl. Nó thường được dùng trong
các agent.
Cyber Pro !!! :))
25

Trích đoạn TCP Agents The Interface to the Simulation Operator (The API) Protocol Internals Multicast API
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status