Tài liệu học tập Kỹ thuật mô phỏng (Phần 1)

Mục tiêu

Trong một vài thập kỷ qua, nhiều công nghệ và kỹ thuật hỗ trợ truyền thông giữa

con người đã được phát triển. Từ hệ thống mạng điện thoại cố định đến mạng truyền

thanh, mạng truyền hình rồi mạng máy tính. Ban đầu khi mới ra đời, các hệ thống này

hoạt động độc lập với nhau và giờ đây con người mong muốn tích hợp chúng trong cùng

một hệ thống. Trên thực tế có thể xem mạng truyền thông máy tính là kết quả của sự hội

tụ này.

Chương này sẽ cung cấp cho bạn đọc một cách nhìn tổng quan về mạng truyền

thông máy tính và những vấn đề cơ bản để mô phỏng chúng. Mục 1.1. Giới thiệu về mạng

máy tính với mô hình tham chiếu mô tả kiến trúc của mạng truyền thông máy tính. Mục

1.2. Trình bày vắn tắt về phương pháp thiết kế và mô hình hóa các hệ thống mạng máy

tính phức tạp. Trong Mục 1.3. Các vấn đề cơ bản về mô phỏng mạng máy tính được đề

cập đến. Mục 1.4. Trình bày về các kỹ thuật phổ biến khi mô phỏng theo phương pháp mô

phỏng theo thời gian. Mục 1.5 đưa ra một ví dụ điển hình và Mục 1.6 sẽ tổng kết lại các

vấn đề của chương.

Mạng máy tính và kiến trúc phân tầng.

Một mạng máy tính được định nghĩa là một tập các máy tính có kết nối với nhau để

thu thập, xử lý và phân bố thông tin. Thuật ngữ máy tính được hiểu tương đối rộng bao

gồm các thiết bị như máy trạm, máy chủ, router, modem, các trạm cơ sở, các điểm mở

rộng truy cập không dây, . Các máy tính này được kết nối bởi các liên kết truyền thông

như cáp quang, cáp đồng, hay các liên kết sóng vi ba, sóng vệ tinh, sóng radio. Một mạng

máy tính có thể được xây dựng bên trong một mạng máy tính khác hoặc kết nối với một

mạng máy tính khác. Internet là một ví dụ điển hình về mạng máy tính. Trên thực tế,

Internet là mạng của các mạng.

1.1.1. Khái niệm phân tầng

Một mạng máy tính là một hệ thống rất phức tạp. Để đơn giản hóa trong việc thiết

kế và triển khai một hệ thống như vậy, người ta đưa ra khái niệm phân tầng. Sử dụng kiến

trúc phân tầng, các chức năng của một hệ thống mạng máy tính được tổ chức như là một

ngăn xếp các tầng. Mối quan hệ ngang hàng (hay liên kết ảo) diễn ra giữa 2 tầng đồng

mức của 2 nút truyền thông với nhau.

Luồng dữ liệu sẽ đi theo chiều dọc trong một tầng từ tầng cao nhất xuống tầng thấp

nhất bên nút gửi, tiếp theo sẽ đi qua đường truyền vật lý rồi đến tầng thấp nhất bên nút

nhận, sau đó đi ngược lên đến tầng cao nhất bên nút nhận. Mỗi tầng biểu diễn một phần

đặc trưng được định nghĩa trước của hệ thống và cung cấp một số dịch vụ nào đó cho

tầng phía trên. Tầng trên truy cập xuống tầng dưới thông qua giao tiếp tầng (interface).

Các dịch vụ thường định nghĩa những công việc sẽ được thực hiện theo thuật ngữ các- 10 -

hoạt động mạng hoặc các nguyên tắc nhưng đặc biệt lại không chỉ ra cách thực hiện

chúng như thế nào. Vì vậy một giao thức sẽ định nghĩa chi tiết về việc một dịch vụ được

thực hiện như thế nào. Ví dụ, mạch truyền tại máy tính nguồn có thể sử dụng một giao

thức riêng (chẳng hạn như một kỹ thuật mã hóa dữ liệu) tại tầng vật lý để truyền các bit

thông tin tới máy tính nhận. Mạch nhận sẽ sử dụng giao thức riêng này để giải mã thông

tin nhận được trên cơ sở các quy tắc của giao thức. Một trong các ưu điểm rất lớn của

khái niệm phân tầng này là tính độc lập của tầng. Điều này có nghĩa là một thay đổi trong

một giao thức của một tầng nào đó không ảnh hưởng tới toàn bộ hệ thống miễn là các

giao tiếp của tầng không thay đổi. Ở đây, ta chú ý vào các thuật ngữ dịch vụ, giao thức và

giao tiếp tầng để nhấn mạnh rằng sự tương tác giữa các thành phần này tạo nên khái niệm

phân tầng

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 1

Trang 1

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 2

Trang 2

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 3

Trang 3

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 4

Trang 4

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 5

Trang 5

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 6

Trang 6

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 7

Trang 7

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 8

Trang 8

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 9

Trang 9

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 131 trang xuanhieu 8120
Bạn đang xem 10 trang mẫu của tài liệu "Tài liệu học tập Kỹ thuật mô phỏng (Phần 1)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Tài liệu học tập Kỹ thuật mô phỏng (Phần 1)

Tài liệu học tập Kỹ thuật mô phỏng (Phần 1)
ng lớp RtModule, lớp 
RtModule có hai biến thành viên: classifier_ và next_rtm_. Biến OTcl classifier_ đƣợc 
liên kết với các biến C++ có cùng tên dùng để lƣu tham chiếu tới bộ phân loại đƣợc liên 
kết với module định tuyến. Biến next_rtm hỗ trợ việc tạo danh sách liên kết của module 
định tuyến. Biến này không có có mối quan hệ với biến next_rtm trong C++ vì trong hàm 
khởi tạo của Lớp RoutingModule trong C++ không thực hiện việc liên kết giữa hai biến 
thuộc hai miền (dòng 24-27 trong Chƣơng trình 6.14). 
Lớp RtModule cũng định nghĩa các thủ tục instproc của riêng mình. Chúng đƣợc 
chia thành hai nhóm là nhóm các thủ tục khởi tạo và nhóm các thủ tục quản lý đƣờng và 
tác tử. Chúng ta không đi vào chi tiết mã nguồn của các thủ tục này ở đây. Bạn đọc có thể 
tìm hiểu chi tiết trong file ~ns/tcl/lỉb/ns-rtmodule.tcl nếu thấy cần thiết. 
Nhóm các thủ tục khỏi tạo 
7. registernode}: Liên kết nút đầu vào node với module định tuyến và cập 
nhật các biến rtnotif_ cùng ptnotif_ của nút node. 
8. unregisterO: Xóa bộ phân loại của module định tuyến. Đồng thời, xóa 
module định tuyến từ các biến thành viên rtnotif_ và ptnotif_ của các nút liên kết với 
nó. 
- route-notify{-" module}: Di chuyển xuống dƣới trong danh sách liên 
kết trong miền OTcl (qua biến next_rtm_) và lƣu module định tuyên đầu vào 
―module‖ làm phần tử cuối cùng của danh sách liên kết. 
9. unreg-route-notify{--‗ module: Tìm kiếm module định tuyến đầu vào 
―module‖ và xóa nó trong danh sách liên kết của các module định tuyến trong miền 
OTcl. 
Nhóm các thủ tục quản lý đƣờng và tác tử 
10. add-route(dst target}: Thêm một điểm truy cập định tuyến vởi đích là ―dst‖ 
và đối tƣợng NsObject chuyển tiếp gói tin là ―target‖ vào mọi bộ phân loại trong danh 
sách liên kết của các module định tuyến. 
11. delete-routeL" dst nullagent}: Xóa điểm truy cập định tuyến có đích là" dst 
trong mọi bộ phân loại trong danh sách liên kết của các module định tuyến. Thay thế 
giá trị target trong các bộ phân loại bằng tác tử rỗng ―nullagent‖. 
12. attachíagent port}: Gắn tác tử đầu vào ―agent‖ vào nút liên kết. Thiết lập 
đích chuyển tiếp của tảc tử đầu vào (tảc tử gửi) ―agent‖ là điểm truy cập của nút. Cài 
- 120 - 
đặt tác tử đầu vào ―agent‖ trong khe có số hiệu ―port‖ của bộ phân kênh ―dmux_‖ của 
nút. 
6.5.4. Lớp BaseRoutingModule và RtModule/Base 
Lớp BaseRoutỉngModule là Lớp dẫn xuất từ Lớp RoutỉngModule. Khai báo của 
Lớp đƣợc thể hiện trong Chƣơng trình 6.16 sau: 
Trong chƣơng trinh này ta thấy hàm module_name đã đƣợc viết lại để trả về giá 
trị tên lớp là “Base”. Một module định tuyến kiểu cơ sở chỉ phân loại các gói tin dựa vào 
địa chỉ đích của chúng cho nên biến classifier_ đƣợc định nghĩa là một con trỏ kiểu 
DeshHashClassỉfier. 
Trong miền OTcl, lớp RtModule/Base cũng viết lại thủ tục registernode} của lớp 
RtModule. Ta sẽ thảo luận chi tiết về thủ tục này trong Mục 6.6.4. 
6.6. Cấu hình các đối tƣợng Node 
Ta đã thảo luận về các thành phần chính của lớp Node. Giờ đây, ta sẽ đi vào vấn 
đề làm thế nào để kết nối các thành phần này trong một đối tƣợng Node. Đầu tiên Mục 
6.6.1 đƣa ra mối quan hệ giữa một vài thành phần có nhiều liên quan đến nhau. Sau đó 
trong Mục 6.6.2 đề cập đến nội dung thêm/xóa các đƣờng định tuyến. Mục 6.6.3 đề cập 
đến vấn đề gắn/tách các tác tử. Tiếp theo nội dung về tiến trình xây dựng Node đƣợc đƣa 
ra trong Mục 6.6.4. Ta sẽ thấy đƣợc sự kết hợp giữa các thành phần chính của lớp trong 
mục này. Cuối cùng, tiến trinh cấu hình đƣờng định tuyến đƣợc đề cập đến trong Mục 
6.6.5. 
i. Mối quan hệ giữa các biến thành viên của Lớp Node 
- 121 - 
Mối quan hệ đóng giữa 5 biến thành viên của một nút OTcl đƣợc minh họa trong 
Hình 6.5 dƣới đây 
Hình 6.5: Mối quan hệ giữa các hiến moduleJist_, reg_moduỉe_, ruiotif_ và 
puiotif_ của lớp Node 
Biến module_list_ là một biến kiểu danh sách các chuỗi với mỗi chuôi biểu diễn 
tên của một module định tuyến đã đƣợc kích hoạt. Biến reg_module là một mảng liên kết 
với chỉ số mảng là tên của module định tuyến và giá trị của mỗi phần tử là đối tƣợng 
module định tuyến tƣơng ứng với tên trong chỉ số của phần tử. Biến rtnotif_ là đối tƣợng 
sẽ đƣợc thông báo khi có sự kiện thay đổi về đƣờng đi diễn ra. Biến ptnotif_ là đối tƣợng 
sẽ đƣợc thông báo khi có sự kiện gắn/tách tác tử diễn ra. Trong khi biến rtnotỉf_ là phần 
tử đầu tiên của danh sách liên kết các module định tuyến thì ptnotỉf_ đơn giản chỉ là một 
danh sách với mỗi phần tử chứa một đối tƣợng module định tuyến. Cuối cùng, biến 
mod_assoc_ là một mảng liên kết với mỗj chỉ số là một bộ phân loại và mỗi phần tử là 
một module định tuyến liên kết với bộ phân loại của chỉ số tƣơng ứng. 
Trong Hình 6.5, các biến instvar đƣợc biểu diễn bằng các hình chữ nhật trong khi 
các thủ tục thành viên của Lớp Node đƣợc biểu diễn bằng các hình elip. Mũi tên từ một 
thủ tục tới một biến thể hiện rằng biến này đƣợc cấu hình trong thủ tục. Ở đây thủ tục 
enable-module{mod_name} và dỉsable- module{mode_name} thực hiện việc thêm và 
xóa tên của module định tuyến mode_name trong biến thành viên module_list. Khi thủ 
tục mk-default- classỉfier đƣợc gọi, các tên trong module_list đƣợc sử dụng để khởi tạo 
các đối tƣợng module định tuyến. Các đối tƣợng này đƣợc lƣu trong mảng liên kết 
reg_module với chỉ số là tên của module tƣơng ứng. Thủ tục mk―default― classỉĩỉer gọi 
thủ tục route-notỉfy{module} để thêm đối tƣợng module định tuyến đã đƣợc khởi tạo vào 
danh sách rtnotif_ và gọi thủ tục port- notify{module) để thêm đối tƣợng module định 
- 122 - 
tuyến đã đƣợc khởi tạo vào danh sách ptnotif_. Chú ý rằng mặc dù biến thành viên 
ptnotif_ là một danh sách ỌTcl nhƣng con trỏ next_rtm không đƣợc sử dụng. Trong Hình 
6.5, các thủ tục instproc port-notỉfy{*"}, attachíagent port} và detachíagent nullagent} 
(xem file ~ns/tcl/lib/ns-node.tcl) có thể truy cập trực tiếp vào bất kỳ một thành phần nào 
của danh sách ptnotif_. Tuy nhiên các thủ tục route-notify{"-}, add-route{dst target) và 
delete-routedst nullagent} lại chỉ có thể truy cập tới một module định tuyến qua con trỏ 
đầu danh sách liên kết. 
ii. Thêm và xóa điểm truy cập định tuyến 
Một điểm tmy cập định tuyến bao gồm một địa chỉ của nút đích dst và một đối 
tƣợng chuyển tiếp gói tin target. Nó đƣợc thêm vào một đối tƣợng Node bằng cách sử 
dụng thủ tục add-route{dst target} của lớp Node. Trong Chƣơng trình 6.17, dòng 4 thủ 
tục add-route{dst target} của Lớp Node goi thủ tục cùng tên của module định tuyến 
rtnotif_ (1 rP RtModule). Dòng 10 cài đặt điểm truy cập định tuyến vào bộ phân loại 
classifier_ của module định tuyến. Dòng 11-13 gọi kiểu đệ quy thủ tục adđ-route{dst 
target} của mọi module định tuyến trong danh sách liên kết để cài đặt điểm truy cập định 
tuyến vào đối tƣợng classỉfỉer_ liên kết với mỗi module định tuyến. 
Cơ chế xóa một điểm truy cập định tuyến cũng tƣơng tự nhƣ cơ chế thêm điểm 
truy cập định tuyến. Đe ngắn gọn, ở đây ta không trình bày về cơ chế xóa này nữa. Bạn 
đọc muốn tìm hiểu chi tiết về cơ chế xóa này có thể xem trong thủ tục delete-route{dst 
nullagent} của lớp Node và RtModule (xem file "ns/tcl/lib/ns-node.tcl và file 
"ns/tcl/lib/nsrtmodule.tcl). 
iii. Gắn và tách tác tử 
Để gắn một tác tử vào một nút, ta sử dụng thủ tục attach-agentnode agent) của Lớp 
Simulator với cú pháp nhƣ sau: 
$ns attach-agent Enode Agent 
- 123 - 
ở đây $ns là đối tƣợng Simulator, $node là đối tƣợng Node và $agent là đối 
tƣợng Agent. Chƣơng trình 6.18 đƣa ra các thủ tục có liên quan với tiến trình gắn tác tử. 
Tiến trình này bao gồm các bƣớc sau: 
Simulator::attach-agent{node agent}: gọi lệnh ―$node attach $agent‖(dòng 2) 
Node”attach{agent port}: Cập nhật biến “agent” (dòng 6-8 và dòng 16), tạo 
―dmuxj5 nếu cần thiết (dòng 9-15) và gọi lệnh “$self add-target $agent $port” (dòng 
17) 
Node::adđ-target{agent port}: Thực thi lệnh ―$m attach Sagent $port‖ đối với 
mỗi module định tuyến ―m‖ lƣu trong biến ptnotif_ (dòng 21-23) 
RtModule-attachiagent port}: Khi là “agent” là tác tử gửi, lệnh này thiết lập 
điểm tmy cập của nút là đích chuyển tiếp của tác tử “agent” (dòng 26). Khi “agent” là 
tác tử nhận, lệnh này cài đật tác tử “agent” vào khe có số hiệu ―port‖ trong bộ phân kênh 
―dmux_‖ (dòng 27). 
6.7. Khởi tạo nút 
Đối tƣợng Node đƣợc tạo ra trong miền OTcl bằng cách thực thi lệnh ―$ns node‖, 
trong đó $ns là một đối tƣợng Simulator. Thủ tục ―node‖ của lớp Simulator gọi thủ tục 
―new{---}‖ để tạo ra đối tƣợng Node.(dòng 4 và dòng 1 trong Chƣơng trình 6.19). Đồng 
- 124 - 
thời nó cũng cập nhật các biến thành viên của đối tƣợng Simulator để các đối tƣợng khác 
có thể sử dụng. 
Bảng 6.4. Các bƣớc chính trong quá trình khởi tạo nút 
- 125 - 
Bƣớc 1: Khỏi tạo lớp Node trong OTcl 
Thủ tục init •••} thiết lập các biến thành viên của lớp Node và gọi thù tục mk-
default-classifier{ } của đối tƣợng Node đƣợc tạo ra (dòng 22 trong-Chƣong trình 6.20) 
Bƣớc 2: Thủ tục mk-default-classifier{ } 
Thủ tục mk-default-classifier{ } sử dụng thủ tục new{-'-} để tạo và thủ tục 
register-modulel • • •} đê đăng ký các module định tuyến có tên đƣợc lƣu trong biến 
thành viên module_lỉst_ (dòng 27-29 trong Chƣơng trình 6.20). Mặc định, chỉ có module 
định tuyến ―Base‖ đƣợc lƣu trong biến module_lỉst_ (dòng 1 trong Chƣơng trình 6.20). 
Đề cho phẻp/vô hiệu họa các module định tuyến khác, hai thủ tục thành viên của Lớp 
RtModule phải đƣợc gọi trƣớc khi thực hiện lệnh ―$ns node‖; 
- 126 - 
enable - module {name} 
disable-modulelname} 
với là tên của module định tuyến đƣợc cho phép hoặc vô hiệu hóa 
Bƣớc 3: Thủ tục register-moduleCmod} của lớp Node 
Thủ tục thành viên này gọi thủ tục registerínode} của module định tuyến đầu vào 
mođ và lƣu module đã đƣợc đăng ký này vào biến thành viên reg_module_. 
Bƣớc 4: Thủ tục registernode} của lớp RtModule/Base 
Thủ tục này gọi thủ tục registerínode} của lớp cha (lệnh ―$self next $node‖ trong 
dòng 7 của Chƣong trình 6.21). Sau đó nó sử dụng thủ tục new{"-} để tạo và thủ tục 
install-entry{--*} để cấu hình bộ phân loại đầu danh sách classỉfier_ của lớp. 
Bƣớc 5: Thủ tục registernode} của lớp RtModule 
Thủ tục này gắn nút ―node‖ vào module định tuyến. Thêm vào đó, nó gọi thủ tục 
route-notify{module} và port-notify{module} của nút liên kết để thêm module định 
tuyến vào danh sách báo hiệu đƣờng rtnotỉf_ và danh sách báo hiệu cổng ptnotif_ của nút 
liên kết (xem Chƣơng trình 6.22) 
Chi tiết của các thủ tục route-notify{module} và port-notify{module} đƣợc đƣa ra 
trong Chƣơng trình 6.22. Thủ tục route-notỉfy{module} có một đối số đầu vào là module 
định tuyến module. Nó lƣu module vào biến thành viên next_rtm_ của danh sách liên kết 
các module định tuyến (xem dòng 6 và 10-17). Sau đó nó gọi lệnh OTcl route-notity của 
module định tuyến đầu vào (dòng 8). Lệnh OTcl này lại gọi hàm C++ route-notỉfy(rtm) 
của đối tƣợng Node đƣợc gắn với module định tuyến (xem dòng 18-25) để lƣu module 
định tuyến vào phần tử cuối cùng trong danh sách liên kết (dòng 26-31). 
Nhƣ ta thấy trong các dòng lệnh từ dòng 32 tới dòng 35 của Chƣơng trình 6.22, 
thủ tục thành viên port-notify{module} có một đối số đầu vào là một module định tuyến. 
Nó thực hiện việc gắn module định tuyến đầu vào vào cuối danh sách liên kết. 
- 127 - 
6.8. Cấu hình đƣờng 
Khi bắt đầu Pha Mô phỏng, NS2 tính toán các đƣờng đi tối ƣu cho mọi cặp nút 
nguồn-đích bằng cách sử dụng thuật toán tìm đƣờng ngắn nhất Dijjkstra. Nó cài đặt thông 
tin định tuyến tính toán đƣợc trong mọi nút. Pha này đƣợc thực hiện bằng cách thực thi 
thù tục thành viên run{} của đối tƣợng Simulator trong OTcl. Bảng 6.5 đƣa ra các thủ 
tục chính có liên quan tới tiến trinh cấu hình đƣờng nằm trong thủ tục run( ). 
Bảng 6.5. Các bƣớc chỉnh trong tiến trình cấu hình đƣờng 
- 128 - 
Bƣớc 1: Thủ tục run{} của lớp Simulator 
Đƣợc đƣa ra trong dòng 2 của Chƣong trinh 4.12, thủ tục thành viên run{} của lớp 
Simulator lấy về đối tƣợng RouteLogỉc bằng cách sử dụng thủ tục thành viên get-
routelogicO của Lớp Simulator và gọi thủ tục confỉgure{} liên kết với đối tƣợng đƣợc 
trả về RouteLogic 
Bƣớc 2: Thủ tục conĩỉgureO của lớp RouteLogỉc 
Đƣợc định nghĩa trong £Qe ~ns/tcl/lỉb/ns-route.tcl, thủ tục thành viên 
configure{} của Lớp RouteLogic cấu hình bảng định tuyến cho mọi nút bằng cách gọi 
thủ tục init-all{} của lớp Agent/rtProto/Statỉc. 
Bƣớc 3: Thủ tục init~all{} của lớp Agent/rtProto/Static 
Thủ tục instproc init-all{} của lớp Agent/rtProto/Statỉc Đƣợc định nghĩa trong 
file ~ns/tcl/rtglib/route-proto.tcl. Nó sẽ gọi thủ tục thành viên compute-routes() của 
Lớp Simulator. 
Bƣớc 4: Thủ tục compute-routes{} của lớp Simulator 
NS2 mặc định sử dụng cơ chế địa chỉ phẳng. Do đố, thủ tục thành viên compute-
routesO của lớp Simulator gọi thủ tục thành viên compute- flat-routes{} để tính toán 
đƣờng đi và thiết lập bảng định tuyến (xem file: ~ns/tcl/lỉb/ns-route.tcl). 
Bƣớc 5: Thủ tục compute-flat-routes{} của lớp Simulator 
Đƣợc định nghĩa trong file ~ns/tcl/lỉb/ns-route.tcl, thủ tục compute- flat-
routes{}của Lớp Simulator lấy về đối tƣợng đƣờng logic liên kết với nó (sử dụng thủ tục 
thành viên get-routelogicO), sử dụng đối tƣợng lấy về để tính toán đƣờng tối ƣu (bằng 
cách sử dụng hàm computeO) và cấu hình các bo phân loại trong mọi nút theo đƣờng tối 
ƣu đã tính đƣợc (su dụng lệnh populate-flatclassifiers{n}). 
- 129 - 
 Chƣơng trình 6.23 đƣa ra chi tiết của lệnh OTcl populate-flat― classifiers{n}. 
Lệnh OTcl này lƣu giá trị đầu vào là số lƣợng nút ―n‖ trong biến nn_ (dòng 4)-và gọi 
hàm populate_flat_classifiers() (dòng 5) để cài đặt đƣờng đã xác định vào mọi bộ phân 
loại. 
Trong đoạn mã từ các dòng 10 đến 25 của Chƣơng trình 6.23, hàm 
populate_flat_classifiers{) chạy cho mọi cặp nút (i,j) trong số nn_ nút. Với mỗi cặp nút, 
dòng 16 lấy về chặng kế tiếp để chuyển tiếp gói tin (điểm tham chiếu nh của đối tƣợng 
chuyển tiếp gói tin đi từ nút ―i‖ tới nút ―j‖) và dòng 18 lấy về điểm đầu vào liên kết 
l_heađ tƣơng ứng với biến nh. Dòng 19-20 thêm một đƣờng định tuyến mới vào nút i 
(nodelisttỉl). Đƣờng định tuyến mới này thiết lập điểm liên kết 1 _head là đích chuyển 
tiếp cho gói tin đi tới đích là nút j. Sau đó nó thêm đƣờng định tuyến này vào nút ―i‖ 
bằng hàm add_route(dst,target) của nút. 
- 130 - 
Trong các dòng 26-29 của Chƣơng trình 6.23, hàm add_route(dst,target) gọi 
hàm add_route(dst,target) của đối tƣợng liên kết rtnotỉf_ (đối tƣợng Lớp 
RoutingModule). Đƣợc định nghĩa trong Chƣơng trình 6.15, hàm add_route(dst,target) 
của đối tƣợng liên kết với nút hiện tại rtnotỉf_ thực hiện việc cài đặt kiểu đệ quy đƣờng 
định tuyến đầu vào dọc xuống theo danh sách liên kết các module định tuyến bằng cách 
gọi hàm do_ỉnstall(dst, target) của biến bộ phân loại classifỉer_ của mỗi module định 
tuyến đƣợc duyệt qua. Hàm do_install(...) thực hiện việc cài đặt đối tƣợng NsObject 
target vào khe dst của bộ phân loại này để cho các gói tin có đích là dst sẽ đƣợc chuyển 
tiếp tới đối tƣợng target. 

File đính kèm:

  • pdftai_lieu_hoc_tap_ky_thuat_mo_phong_phan_1.pdf