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
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
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)
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:
- tai_lieu_hoc_tap_ky_thuat_mo_phong_phan_1.pdf