Đăng ký Đăng nhập
Trang chủ Công nghệ thông tin An ninh bảo mật Bài tiểu luận môn học ip ứng dụng và bảo mật giới thiệu công cụ ns...

Tài liệu Bài tiểu luận môn học ip ứng dụng và bảo mật giới thiệu công cụ ns

.DOC
77
386
121

Mô tả:

Bài tiểu luận môn học ip ứng dụng và bảo mật giới thiệu công cụ ns
1. Giới thiê uê về côngHỌC cụ môVIÊô phỏng mạng NS..................................................................4 N CÔNG NGHÊô VIỄN THÔNG 1.1 Tổng quan....................................................................................................4 HỌC VIÊô N CÔNG NGHÊô VIỄNSAU THÔNG KHOA QUAN HÊê QUỐC TẾ VÀ ĐÀO TẠO ĐẠI HỌC QUAN HÊê QUỐC TẾ VÀ ĐÀO TẠO SAU ĐẠI HỌC 1.2. Bô KHOA định trình sự kiê n ..................................................................................6 ê ê 1.3. Các thành phần mạng.................................................................................8 1.4. Gói dữ liê uê ................................................................................................11 2. Giao tiếp với bô ô thông dịch: Liên kết OTcl..........................................................11 2.1 Các khái niê êm............................................................................................12 2.2 Tổng quan về mã lê ênh...............................................................................13 2.3 Lớp Tcl.......................................................................................................13 2.3.1 Lấy tham chiếu tới instance của lớp Tcl............................................13 2.3.2 Gọi các hàm OTcl...............................................................................13 2.3.3 Gửi và nhâ nê kết quả từ bô ê thông dịch................................................14 2.3.4 Thông báo lỗi và thoát........................................................................14 2.3.5 Các hàm băm trong bô ê thông dịch.....................................................14 2.4 Lớp TclObject............................................................................................14 2.4.1 Tạo và hủy đối tượng TclObject.........................................................14 IP – ỨNG DỤNG VÀ BẢO MÂôT 2.4.2 Kết hợp IPbiến.......................................................................................15 – ỨNG DỤNG VÀ BẢO MÂôT 2.4.3 Theo dõi giá trị biến...........................................................................15 2.4.4 Hàm command: định nghĩa và cách gọi.............................................16 2.5 Lớp TclClass..............................................................................................16 2.5.1 Kết hợp các biến thành viên tĩnh của lớp C++..................................17 2.6 Lớp TclCommand......................................................................................17 2.7 Lớp EmbeddedTcl.....................................................................................17 2.8 Lớp InstVar................................................................................................18 3. Lớp Simlator..........................................................................................................18 3.1 Khởi tạo bộ mô phỏng...............................................................................18 3.2. Bộ định trình và sự kiện...........................................................................19 3.2.1 Bộ định trình danh sách......................................................................20 Thầy hướng dẫn: Hoàng Đăng Hải 3.2.2. Bộ định trình xếp đống......................................................................20 Học Viên: Lê Đăng Phong [1-22] 3.2.3 Bộ định trình xếp hàng theo lịch........................................................20 Vũ Anh Tuấn [23-44] 3.2.4 Bộ định trình thời gian thực...............................................................20 Nguyễn Viêtê Thắng [45-66] Đinh Hải Đăng [67-hết] 3.3 Các phương thức khác...............................................................................20 3.4. Lướt qua về các lệnh................................................................................21 4. Các nút và chuyển gói............................................................................................22 4.1 Các cách thức của bộ mô phỏng: Tạo kiến trúc mạng..............................22 4.2 Các cách thức của nút: đặt cấu hình nút....................................................24 4.3 Cấu hình nút về mặt chức năng.................................................................26 4.3.1 Giao diện cấu hình nút.......................................................................26 Hà Nô ôi 4.4 Bộ phân lớp................................................................................................27 4.4.1 Bộ phân lớp địa chỉ.............................................................................30 TIỂU NNMÔN TIỂULUÂô LUÂô MÔNHỌC HỌC i 4.4.2 Bộ phân lớp đa hướng........................................................................30 4.4.3 Bộ phân lớp đa đường........................................................................31 4.4.4 Bộ phân lớp băm................................................................................32 4.4.5 Bô ê tạo bản sao....................................................................................33 4.5 Module định tuyến và sự tổ chức bộ phân lớp..........................................34 4.5.1 Module định tuyến..............................................................................35 4.5.2 Giao diện nút......................................................................................37 4.6 Xem qua một vài lệnh................................................................................38 5. Các liên kết: Các liên kết đơn...............................................................................40 5.1. Thủ tục cho Links và SimpleLinks..........................................................41 5.2. Các Connector..........................................................................................43 5.3 Phân cấp đối tượng....................................................................................44 6. Quản lý hàng đợi và định trình gói.......................................................................45 6.1. Lớp Queue trong C++.............................................................................45 6.1.1 Khóa hàng đợi....................................................................................46 6.1.2. Lớp PacketQueue..............................................................................48 6.2. Ví dụ: Loại bỏ phần cuối (Drop Tail).......................................................49 6.3 Các kiểu khác nhau của đối tượng Queue.................................................50 7. Trễ và các tuyến liên kết........................................................................................56 7.1 Lớp LinkDelay...........................................................................................56 8.Các dịch vụ trong ns...............................................................................................58 8.1. Tổng quan.................................................................................................59 8.2 Sự thi hành (Implementation)...................................................................59 8.2.1 Hàng đợi RED cho Diffserv...............................................................59 8.3 Cấu hình.....................................................................................................61 9. Agents..................................................................................................................... 62 9.1. Trạng thái Agent.......................................................................................62 9.2. Các phương thức của Agent.....................................................................63 9.3. Protocol Agents.........................................................................................63 9.4. Liên kết trong OTcl...................................................................................64 9.4.1 Tạo và sửa đổi các Agent...................................................................65 9.4.2. Các giá trị mặc định...........................................................................65 9.4.3. Các phương thức trong OTcl.............................................................65 9.5. Ví dụ: Các agent Tcp, TCPSink...............................................................65 9.5.1. Tạo Agent...........................................................................................66 9.5.2. Khởi động Agent...............................................................................67 9.5.3. Xử lý đầu vào ở bô ê thu......................................................................68 9.5.4. Xử lý đáp ứng ở bên gửi....................................................................69 9.5.5. Các bộ định thời................................................................................70 9.6. Tạo một agent mới....................................................................................70 ii 9.6.1. Vídụ: Yêu cầu “ping” (Cấu trúc kế thừa)..........................................70 9.6.2. Các phương thức recv() và timeout()................................................71 9.6.3. Liên kết agent “ping” với OTcl.........................................................72 9.6.4. Sử dụng agent nhờ OTcl....................................................................73 9.7. Agent API..................................................................................................74 9.8. Các đối tượng agent khác.........................................................................74 9.9. Các lệnh cơ bản........................................................................................74 10. Các bộ định thời...................................................................................................75 10.1. Lớp cơ sở trong C++ TimerHandler......................................................75 10.1.1. Định nghĩa một bộ định thời mới....................................................76 10.1.2. Ví dụ: Bộ định thời truyền lại TCP.................................................77 10.2. Lớp định thời trong OTcl........................................................................80 10.3. Một số lệnh cơ bản.................................................................................80 11. Header gói và các định dạng...............................................................................81 11.1. Header gói cho một giao thức cụ thể.....................................................81 11.1.1. Thêm một kiểu header gói mới.......................................................83 11.1.2. Lựa chọn các header gói trong bộ mô phỏng..................................84 11.2. Các lớp gói..............................................................................................84 11.2.1. Lớp Packet.......................................................................................85 11.2.2. Lớp p_info.......................................................................................87 11.2.3. Lớp hdr_cmn...................................................................................88 11.2.4. Lớp PacketHeaderManager.............................................................89 11.3. Các lệnh cơ bản......................................................................................91 iii Giới thiê êu công cụ NS 1. Giới thiêệu về công cụ mô phỏng mạng NS 1.1 Tổng quan NS là bô ê công cụ mô phỏng mạng điều khiển theo các sự kiê nê rời rạc, được xây dựng và phát triển bởi trường đại học Berkeley – Mỹ, cho phép mô phỏng nhiều kiểu mạng IP khác nhau, mô phỏng các giao thức mạng: TCP, UDP cũng như các dạng nguồn lưu lượng: FTP, Telnet, Web, CBR, VBR, mô phỏng các hàng đợi trong các bô ê định tuyến: DropTail, RED, CBQ, mô phỏng các giải thuâ tê định tuyến. Ngoài ra NS còn cho phép thực hiê nê viê êc phát đa luồng và mô êt số giao thức lớp MAC đối với mô phỏng LAN. NS được xây dựng bằng ngôn ngữ lâ êp trình hê ê thống C++ và ngôn ngữ mô phỏng OTcl. Otcl là dạng ngôn ngữ kịch bản Tcl được mở rô nê g theo mô hình hướng đối tượng. Hình 1: NS theo quan điểm người dùng Theo quan điểm người dùng thuần túy, NS là mô tê bô ê thông dịch các kịch bản Tcl hướng đối tượng. NS gồm có các bô ê định trình các sự kiê ên mô phỏng, các thư viê nê đối tượng thành phần mạng, thư viê ên các môdule tạo lâ êp mạng (thực tế viê êc kết nối các module được thực hiê nê bằng các hàm thành viên của các đối tượng mô phỏng cơ bản). Khi sử dụng NS, người dùng phải lâ pê trình bằng ngôn ngữ kịch bản Tcl. Để tạo lâ êp và triển khai mô êt mạng mô phỏng, người dùng viết mô êt kịch bản Tcl để khởi tạo mô tê bô ê định trình sự kiê nê , thiết lâ pê topo mạng thông qua viê cê sử dụng các đối tượng thành phần mạng và các hành liên kết trong các thư viê nê của NS. Viê êc thiết lâ êp mô êt mạng là ghép nối các đường dữ liê uê giữa các đối tượng mạng bằng cách đă êt con trỏ của mô êt đối tượng này tới địa chỉ của mô êt đối tượng khác tương ứng. Khi muốn tạo mô tê đối tượng mạng mới, thì người dùng có thể tạo ra đối tượng đó bằng cách xây dựng mô êt đối tượng mới hoă êc tổ hợp các đối tượng có sẵn trong các thư viê nê đối tượng của NS và tạo ra các đường liên kết dữ liê êu giữa chúng. Mô êt thành phần quan trọng của NS (bên cạnh các đối tượng mạng) là bô ê định trình sự kiê nê . Mô êt sự kiê ên trong NS là mô êt mã nhâ nê dạng gói, mã này là duy nhất đối với mô êt gói, sự kiê nê được định thời và gắn với mô êt con trỏ trỏ đến đối tượng sẽ xử lý sự kiê nê đó. Trong NS, bô ê định trình sự kiê nê giám sát toàn bô ê thời gian mô phỏng, quản lý và kích hoạt các sự kiê nê theo mô êt hàng đợi. Khi mô êt sự kiê nê được kích hoạt, Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 4 Giới thiê êu công cụ NS bô ê định trình sẽ gọi tới thành phần đối tượng mạng xử lý tương ứng (thường cũng là đối tượng tạo ra sự kiê nê đó), cho phép đối tượng này thực hiê nê các tác vụ thích hợp lên gói gắn với sự kiê ên. Các thành phần đối tượng mạng truyền thông với nhau bằng cách trao đổi các gói. Về nguyên tắc, tất cả các thành phần mạng luôn cần phải có mô êt khoảng thời gian nhất định để xử lý gói (trễ). Trễ này được thể hiê ên thông qua viê êc sử dụng các bô ê định trình sự kiê ên: gửi đi mô tê sự kiê nê gắn với gói và chờ sự kiê nê đó được kích hoạt trở lại trước khi xử lý các gói tiếp theo. Ví dụ: mô êt thành phần mạng mô phỏng mô êt thiết bị chuyển mạch gói với 20 ms trễ, nó sẽ gửi đi mô êt sự kiê nê trễ 20 ms gắn với gói cần phải chuyển mạch tới bô ê định trình sự kiê ên, bô ê định trình sau 20 ms sẽ đưa sự kiê ên đó ra khỏi hàng đô êi và kích hoạt nó trở lại thành phần mạng chuyển mạch, thành phần chuyển mạch sẽ thực hiê ên viê êc chuyển gói tương ứng tới đối tượng liên kết đầu ra của nó. Mô êt ứng dụng nữa của bô ê định trình sự kiê ên là tạo ra các bô ê định thời. VD: giao thức TCP cần bô ê định thời để giám sát thời gian chờ khi phát đi mô tê gói nhằm thực hiê nê viê êc phát lại gói. Khi đó, bô ê định thời sử dụng bô ê định trình tương tự như trong trường hợp giả lâ êp trễ, sự khác biê êt duy nhất là bô ê định thời đo giá trị thời gian gắn với mô êt gói, thực hiê nê các tác vụ liên quan đến gói đó sau mô êt khoảng thời gian nhất định trôi qua mà không thực hiê nê viê êc mô phỏng trễ. NS được viết bằng hai ngôn ngữ OTcl và C++. Để đảm bảo tính hiê uê quả NS phân chia đường dữ liê uê và đường điều khiển riêng biê êt. Để giảm thời gian chương trình xử lý các sự kiê nê và gói (thời gian này không phải thời gian mô phỏng),thì bô ê định trình sự kiê ên và các đối tượng mạng cơ bản trong đường dữ liê uê được viết và biên dịch bằng ngôn ngữ C++. Các đối tượng sau biên dịch vẫn có thể được sử dụng bởi bô ê thông dịch Otcl thông qua các liên kết Otcl, các liên kết này tạo ra đối tượng OTcl tương ứng cho mỗi đối tượng C++, cũng như tạo ra các hàm và các biến thành viên trong đối tượng Otcl tương ứng với các biến và hàm thành viên trong đối tượng C++. Bằng cách này viê êc điều khiển các đối tượng C++ có thể được thực hiê ên thông quan OTcl, ngoài ra ta cũng có thể thêm các biến và hàm thành viên khác vào đối tượng OTcl. Các đối tượng được viết bằng C++ mà không cần thiết phải điều khiển trực tiếp trong quá trình mô phỏng cũng không cần phải liên kết sang OTcl. Mă êt khác mô êt đối tượng không nằm trên đường số liê uê có thể được xây dựng hoàn toàn bằng OTcl. Hình 2 minh họa mô êt cây phân cấp đối tượng trong C++ và OTcl. C++ OTcl Hình 2: Sự tương đồng giữa C++ và OTcl Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 5 Giới thiê êu công cụ NS Hình 3: Mô hình kiến trúc của NS Hình 3 chỉ ra kiến trúc chung của công cụ mô phỏng NS. Trong hình vẽ này, người sử dụng thiết kế, triển khai các mô phỏng bằng các câu lê nê h Tcl, sử dụng các đối tượng mô phỏng từ thư viê ên Otcl, các bô ê định trình sự kiê ên và phần lớn các đối tượng mạng được xây dựng bằng C++, và các đối tượng này vẫn có thể được sử dụng như là các đối tượng Otcl thông qua các liên kết. Toàn bô ê các thành phần trong hình 3, kết hợp lại tạo nên mô tê bô ê công cụ mô phỏng mạng NS, là mô êt bô ê thông dịch Tcl được mở rô nê g hướng đối tượng và mô êt tâ êp các thư viê nê đối tượng mô phỏng mạng. Các kết quả đạt được sau khi kết thúc quá trình mô phỏng, như trong hình vẽ 1, là tâ êp mô êt hoă êc nhiều file kết quả đầu ra dưới dạng văn bản text, chứa các dữ liê uê mô phỏng chi tiết. Các số liê êu này có để được dùng để phân tích mô phỏng hoă êc dùng làm đầu vào cho các công cụ trình diễn mô phỏng mạng dạng đồ họa: Nam, Xgraph... Nam (Network Animator) có dạng giao diê ên tương tự như mô tê công cụ chơi CD, cho phép hiển thị thông tin dạng đồ hoạc như: thông lượng, số gói bị loại bỏ trên mỗi link ... 1.2. Bôệ định trình sự kiêện Như đã đề câ êp đến ở phần trên, đối tượng sử dụng chính của các bô ê định trình sự kiê ên là các thành phần mạng, mô phỏng viê êc xử lý gói hoă êc có sử dụng các bô ê định thời. Hình 4 mô tả các đối tượng mạng sử dụng bô ê định trình sự kiê nê . Cần lưu ý rằng: mô tê đối tượng gửi đi mô êt sự kiê ên nào đó cũng chính là đối tượng xử lý sự kiê nê đó tại mô êt thời điểm định sẵn và đường dữ liê uê giữa các đối tượng khác với đường điều khiển (đường sự kiê ên). Thực tế, viê êc đưa các gói từ mô êt đối tượng mạng này đến mô êt đối tượng mạng khác được thực hiê ên bằng cách sử dụng hàm send(Packet *p){target_-> recv(p)} của đối tượng gửi và hàm recv(Packet *, Handler * h =0) của đối tượng nhâ nê . Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 6 Giới thiê êu công cụ NS Hình 4: Bô ê định trình sự kiê ên rời rạc NS có hai kiểu định trình sự kiê nê khác nhau: định trình thời gian thực và định trình không theo thời gian thực. Định trình không theo thời gian thực bao gồm 3 loại: List, Heap và Calendar. Bô ê định trình Calendar được sử dụng mă êc định trong NS. Các bô ê định trình thời gian thực được sử dụng để thực hiê ên viê êc mô phỏng tương tác với mạng thực tế. Ví dụ: viê êc lựa chọn mô êt bô ê định trình sự kiê nê cụ thể được thực hiê ên như sau: ... set ns [new Simulator] $ns use-scheduler Heap ... Mô êt ứng dụng nữa của các bô ê định trình sự kiê nê là tạo ra các bô ê định thời sự kiê nê mô phỏng như: khi nào thì bắt đầu mô êt ứng dụng FTP, khi nào thì kết thúc mô phỏng, hoă êc để tạo ra các kịch bản mô phỏng trước khi thực hiê nê mô phỏng. Mô êt đối tượng định trình sự kiê ên , bản thân nó có các hàm thành viên định thời mô phỏng, ví dụ như hàm at time "string" thực hiê ên phát đi sự kiê nê AtEvent tại mô êt thời điểm mô phỏng định sẵn: time. Sự kiê nê AtEvent đối tượng lớp con của lớp Event, có mô êt biến để chứa giá trị chuỗi string đã cho. Tuy nhiên sự kiê ên AtEvent vẫn được xử lý bình thường như các sự kiê nê liên quan đến viê êc xử lý gói khác trong bô ê định trình sự kiê ên. Khi mô êt quá trình mô phỏng bắt đầu, và khi đến thời điểm định sẵn đối với sự kiê nê AtEvent, sự kiê ên AtEvent được chuyển tới bô ê xử lý sự kiê nê AtEvent, và câu lê ênh OTcl nằm trong chuỗi string của sự kiê ênAtEvent sẽ được thực thi. Ví dụ: set ns [new Simulator] $ns use-scheduler Heap $ns at 300 "finish_sim" ... proc finish_sim{}{ ... } Trong ví dụ trên, ta thấy rằng hàm at time "string" là hàm thành viên của đối tượng Simulator, nhưng cần phải lưu ý rằng đối tượng Simulator chỉ đóng vai trò giao Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 7 Giới thiê êu công cụ NS tiếp người sử dụng, nên thực ra nó sẽ gọi đến các hàm thành viên của các đối tượng mạng hoă cê các đối tượng định trình để thực sự thực hiê nê công viê cê đó. 1.3. Các thành phần mạng Trong NS, hầu hết các thành phần mạng là các đối tượng phức hợp. Hình 5 chỉ ra mô êt phần của cây phân cấp theo lớp OTcl. Hình 5: Mô êt phần của cây phân cấp theo lớp Gốc của cây phân cấp này là lớp TclObject. Lớp TclObject là lớp cơ sở của mọi đối tượng trong thư viê ên OTcl (định trình sự kiê ên, thành phần mạng, định thời, và các đối tượng khác). Lớp NsObject là lớp cơ sở của mọi đối tượng thành phần mạng cơ bản xử lý gói, các thành phần này kết hợp với nhau tạo thành các đối tượng phức hợp, như các đối tượng nodes hoă êc links chẳng hạn. Các thành phần mạng cơ bản lại được chia thành hai phân lớp con, Connector và Classifier, dựa trên số lượng đường dữ liê uê đầu ra có thể. Các đối tượng mạng cơ sở chỉ có mô êt đường dữ liê êu đầu ra duy nhất sẽ thuô êc vào lớpConnector, các đối tượng chuyển mạch có thể có nhiều đường dữ liê uê đầu ra thuô êc vào lớpClassifier. Nút và định tuyến Nút là mô êt đối tượng phức hợp, được hợp thành bởi các đối tượng đầu vào nút và các bô ê phân loại classifier. Có hai loại nút trong NS. Nút đơn hướng chỉ có mô êt đối tượng phân loại địa chỉ thực hiê ên định tuyến đơn đường và mô êt đối tượng phân loại cổng. Nút đa hướng, ngoài hai đối tượng phân loại địa chỉ và phân loại cổng như trong nút đơn hướng, còn có thêm mô êt đối tượng phân loại gói đa hướng và mô êt đối tượng phân loại thực hiê nê định tuyến đa luồng. Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 8 Giới thiê êu công cụ NS Hình 6. Nút (đơn hướng và đa hướng) Trong NS, các nút đơn hướng được sử dụng mă cê định. Để tạo ra nút đa hướng, người sử dụng phải khai báo tường minh trong kịch bản OTcl, ngay sau khi tạo ra đối tượng định trình sự kiê ên, khi đó mọi nút được tạo ra sẽ là nút đa hướng. Sau khi chỉ ra kiểu nút sử dụng, người sử dụng cũng có thể lựa chọn kiểu giao thức định tuyến xác định thay vì sử dụng giao thức ngầm định. Đường kết nối Đường kết nối cũng là mô êt đối tượng phức hợp chính khác trong NS, đối tượng Link. Khi người sử dụng tạo ra mô tê đường kết nối bằng cách sử dụng hàm thành viên duplex-link của đối tượng Simulator, hai kết nối đơn trên hai hướng sẽ được tạo ra như trong hình vẽ 7. Hình 7: Đường kết nối Cần lưu ý rằng hàng đợi đầu ra của mô êt nút, thực ra là mô êt phần của đối tượng Link đơn. Các gói khi ra khỏi mô êt hàng đợi Queue, sẽ được chuyển tới đối tượng Delay, đối tượng này mô phỏng trễ của link, còn các gói bị loại bỏ khỏi hàng đợi được gửi tới đối tượng Null Agent và được hủy tại đó. Cuối cùng, đối tượng TTL tính toán tham số Time To Live đối với mỗi gói nhâ nê được và thay đổi giá trị trường TTL của gói. Theo dõi giám sát Trong NS, các tác vụ mạng được theo dõi trên mỗi đường kết nối đơn. Nếu đối tượng mô phỏng được chỉ thị theo dõi các tác vụ mạng ( sử dụng lê nê h $ns traceall file hoă êc $ns trace-nam file), thì sau đó các đường kết nối được tạo ra sẽ được thêm vào các đối tượng theo dõi như trong hình vẽ 8. Người sử dụng có thể tạo ra đối tượng theo dõi thuô êc mô êt dạng nào đó giữa nút nguồn và nút đích bằng lê ênh create-trace {type file src dst}. Hình 8. Các đối tượng theo dõi được thêm vào. Khi mỗi đối tượng theo dõi nhâ nê được mô êt gói, nó sẽ ghi các thông số liên quan đến gói ra file theo dõi mà không ảnh hưởng đến thời gian mô phỏng, và chuyển các gói này tới đối tượng mạng tiếp theo. Giám sát hàng đợi Về cơ bản, các đối tượng theo dõi được thiết kế để ghi lại thời gian đến của gói dữ liê êu . Mă êc dù người dùng có đủ các thông tin từ file theo dõi, nhưng có thể họ vẫn Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 9 Giới thiê êu công cụ NS quan tâm đến những gì xảy ra bên trong mô êt hàng đợi nào đó. Ví dụ: mô tê người dùng quan tâm đến cách thức xử lý mô tê hàng đợi RED chẳng hạn, anh ta có thể muốn đo sự thay đổi đô ê dài trung bình của hàng đợi và đô ê dài hiê ên thời của hàng đợi RED, điều đó có nghĩa là cần phải giám sát hàng đợi đó. Viê êc giám sát hàng đợi được thực hiê nê bằng cách sử dụng các đối tượng giám sát hàng đợi và các đối tượng gián điê êp như trong hình 10. Hình 9: Giám sát hàng đợi Khi mô êt gói đến, đối tượng gián điê êp sẽ thông báo cho đối tượng giám sát hàng đợi và những thông tin này được sử dụng để giám sát hàng đợi. 1.4. Gói dữ liêệu Mô êt gói trong NS được hình thành bởi mô tê chồng các mào đầu, và mô êt không gian dữ liê uê như hình 10 Hình 10: Khuôn dạng gói trong NS Khuôn dạng mào đầu gói được tạo ra ngay khi đối tượng Simulator được khởi tạo, bao gồm mô tê tâ êp tất cả các mào đầu đã đăng ký, chẳng hạn các mào đầu thường được sử dụng: IP, TCP, RTP và các mào đầu theo dõi. Điều này có nghĩa là cho dù mô tê mào đầu cụ thể nào đó có được sử dụng hay không, thì mô êt chồng gồm tất cả các mào đầu đã đăng ký vẫn được tạo ra khi mô êt gói được cấp phát bởi mô tê đối tượng Agent, và các đối tượng mạng có thể can thiê êp tới bất kỳ mào đầu nào của gói. Thường thì mô êt gói chỉ có duy nhất mô êt chồng mào đầu (và con trỏ không gian dữ liê uê được để bằng null). Mă êc dù mô êt gói có thể mang dữ liê uê thực tế (từ mô êt ứng dụng nào đó) bằng viê êc cấp phát không gian dữ liê uê , nhưng lại có rất ít ứng dụng và Agent hỗ trợ viê êc này, bởi vì viê êc tải dữ liê uê thực trong môi trường mô phỏng là điều vô nghĩa. Tuy nhiên, nếu bạn muốn thực hiê nê mô êt ứng dụng giao tiếp với mô êt ứng dụng khác qua mạng, thì có thể bạn muốn sử dụng đă êc tính này với mô êt chút sửa đổi đối tượng Agent cơ sở. Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 10 Giới thiê êu công cụ NS 2. Giao tiếp với bôệ thông dịch: Liên kết OTcl NS là mô êt công cụ mô phỏng hướng đối tượng, bao gồm bản thân NS là mô êt đối tượng được viết bằng C++ và mô tê bô ê thông dịch OTcl. NS hỗ trợ kiến trúc cây phân cấp theo lớp trong C++ (cây phân cấp biên dịch) và kiến trúc cây phân cấp theo lớp tương tự trong bô ê thông dịch OTcl(cây phân cấp thông dịch). Hai cây phân cấp này có quan hê ê chă êt chẽ với nhau. Từ góc nhìn của người dùng, tồn tại mối quan hê ê 1-1 giữa mô êt lớp trong cây phân cấp thông dịch và mô êt lớp trong cây phân cấp biên dịch. Gốc của cả hai cây phân cấp này là lớp TclObject. Người dùng sẽ tạo ra các đối tượng mô phỏng thông qua bô ê thông dịch, những đối tượng này, thuô êc vào cây phân cấp thông dịch, được khởi tạo trong bô ê thông dịch và sẽ được ánh xạ sang mô êt đối tượng tương ứng trong cây phân cấp biên dịch. Cây phân cấp thông dịch được tự đô êng thiết lâ êp thông qua các hàm được định nghĩa trong lớp TclClass. Các đối tượng tạo bởi người dùng được ánh xạ thông qua các hàm được định nghĩa trong lớp TclObject. Ngoài ra vẫn có các cây phân cấp khác trong C++ và OTcl, đó là những cây thực sự không có quan hê ê với nhau. 2.1 Các khái niêệm Trước hết ta tìm hiểu tại sao NS lại sử dụng hai ngôn ngữ C++ và OTcl. Đó là bởi vì, trong quá trình thực hiê nê mô phỏng có hai viê êc khác nhau cần phải thực hiê ên: Mô êt mă êt, viê êc mô phỏng chi tiết cề các giao thức đòi hỏi phải sử dụng mô êt ngôn ngữ lâ êp trình hê ê thống, nhằm xử lý hiê êu quả với các dữ liê uê dạng byte, các mào đầu gói hay thực hiê nê các giải thuâ tê tính toán trên mô tê số lượng lớn dữ liê uê . Đối với những công viê êc như vâ yê thì tốc đô ê thực thi là rất quan trọng, còn thời gian thay đổi, nâng cấp (quá trình chạy mô phỏng, tìm lỗi, sửa lỗi, biên dịch và chạy lại) sẽ ít quan trọng hơn. Mă êt khác, mô êt phần lớn các công viê êc nghiên cứu mạng lại liên quan đến những thay đổi nhỏ các tham số đầu vào, thay đổi cấu hình hay viê êc tìm hiểu nhanh chóng mô êt số mô hình mạng nào đó. Trong trường hợp này, thời gian lă pê lại (thay đổi tham số, cấu hình và chạy lại) lại trở nên quan trọng, còn thời gian thực thi sẽ ít quan trọng hơn. NS đáp ứng cả hai yêu cầu trên bằng cách sử dụng hai ngôn ngữ C++ và OTcl. C++ có thời gian thực thi nhanh, nhưng châ êm trong viê êc thay đổi nâng cấp, phù hợp với viê êc triển khai chi tiết các giao thức hay xử lý gói. OTcl chạy châ m ê hơn nhưng lại dễ dang thay đổi nhanh, phù hợp với viê êc thiết lâ êp cấu hình mô phỏng. NS (thông qua tclcl) đưa ra cơ chế cho phép sử dụng các đối tượng và biến trong môi trường cả hai ngôn ngữ C++ và OTcl. Mục đích sử dụng OTcl để: - Thực hiê n ê thiết lâ êp cấu hình mô phỏng và những công viê êc chỉ thực hiê ên mô êt lần. - Thực hiê n ê những viê êc có thể giải quyết bằng cách tổ hợp các các đối tượng C+ + và sử dụng C++ để: - Thực hiê n ê những công viê êc yêu cầu xử lý trên mỗi gói của luồng dữ liê uê - Sửa đổi những lớp C++ có sẵn Ví dụ: links là những đối tượng OTcl, được lắp ráp từ các đối tượng C++: trễ, xếp hàng, mất gói... Đối với những công viê êc yêu cầu xử lý chi tiết, cụ thể hơn Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 11 Giới thiê êu công cụ NS (nguyên lý hàng đợi hay mô êt mô hình trễ đă êc thù nào đó chẳng hạn) thì chúng ta sẽ cần phải xây dựng mô tê đối tượng C++ mới. 2.2 Tổng quan về mã lêệnh Chúng ta sử dụng thuâ êt ngữ "bô ê thông dịch" để nói đến thông dịch OTcl. Mã giao tiếp với bô ê thông dịch được đă êt trong thư mục /tclclvà toàn bô ê phần còn lại mã mô phỏng được đă êt trong thư mục NS-2. Có mô tê số lớp được định nghĩa trong thư mục /tclcl cho giao tiếp với bô ê thông dịch OTcl, chúng ta chỉ xem xét 6 lớp trong số đó được sử dụng trong NS: - Lớp Tcl: chứa các hàm cho phép mã C++ truy nhâ p ê tới bô ê thông dịch - Lớp TclObject: là lớp cơ sở của tất cả các đối tượng mô phỏng - Lớp TclClass: định nghĩa cây phân cấp thông dịch và các hàm cho phép người dùng khởi tạo các đối tượng TclObject - Lớp TclCommand: định nghĩa các câu lê n ê h thông dịch đơn giản - Lớp EmbeddedTcl: định nghĩa các hàm để nạp các câu lê n ê h có sẵn ở múc cao hơn, cho phép thiết lâ pê câu hình mô phỏng dễ dàng hơn. - Lớp InstVar: định nghĩa các hàm cho phép truy nhâ p ê tới các biến thành viên C++. 2.3 Lớp Tcl Lớp Tcl bao bọc toàn bô ê instance thực sự của bô ê thông dịch OTcl và đưa ra các hàm giao tiếp với bô ê thông dịch đó. Các hàm này cho phép thực hiê ên - Lấy tham chiếu tới Tcl instance - Gọi các hàm OTcl qua bô ê thông dịch - Nhâ n ê và trả lại kết quả cho bô ê thông dịch - Thông báo các tình huống lỗi và thoát - Lưu tham chiếu và tìm các đối tượng TclObject - Truy nhâ p ê trực tiếp tới bô ê thông dịch 2.3.1 Lấy tham chiếu tới instance của lớp Tcl Luôn tồn tại mô tê instance duy nhất của lớp Tcl được khai báo như là mô tê biến thành viễn tĩnh, người lâ pê trình có thể lấy được tham chiếu tới instance này qua câu lê ênh Tcl& tcl = Tcl:instance() 2.3.2 Gọi các hàm OTcl Có 4 hàm khác nhau để gọi mô êt câu lê nê h OTcl quaTcl instance: - tcl.eval(char* s) tcl.evalc(const char* s) tcl.eval() tcl.evalf(const char * s,..) Những hàm này chỉ khác nhau ở tham số đầu vào, mỗi hàm sẽ chuyển câu lê nê h dưới dạng chuỗi tới bô ê thông dịch, bô ê thông dịch sẽ kiểm tra câu lê nê h đó và trả về các kết quả TCL_OK nếu câu lê nê h đúng và TCL_ERROR nếu câu lê nê h sai. Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 12 Giới thiê êu công cụ NS 2.3.3 Gửi và nhâ ôn kết quả từ bô ô thông dịch Khi bô ê thông dịch gọi các hàm C++, nó mong muốn kết quả được trả về trong biến thành viên riêng tcl_->result. Có hai hàm để trả kết quả vào biến này là - tcl.result(const char * s) tcl.result(const char * fmt,...) Khi mô êt hàm C++ thực hiê ên mô tê câu lê ênh OTcl, bô ê thông dịch cũng sẽ trả kết quả về trong biến thành viên riêng tcl_->result. Và để lấy được kết quả này sử dụng hàm string tcl.result(void), hàm này trả về kết quả dưới dạng chuỗi. 2.3.4 Thông báo lỗi và thoát. Hàm tcl.error(const char * s) được sử dụng để thông báo lỗi trong mã biên dịch, nó thực hiê nê viê êc ghi chuỗi thông báo lỗi s cùng kết quả trả về tclresult ra luồng stdout và thoát ra với mã lỗi bằng 1. 2.3.5 Các hàm băm trong bô ô thông dịch NS lưu tham chiếu của tất cả các đối tượng TclObject của cây biên dịch trong mô êt bảng băm. NS sử dụng tên của các đối tượng này để thêm vào, tìm kiếm hay xóa tham chiếu của đối tượng trong bảng băm. Có 3 hàm để làm điều này - tcl.enter (TclObject * o) - tcl.lookup(char * s) - tcl.remove(TclObject *o) Các hàm trên được sử dụng trong nô êi tại các lớp TclObject và TclClass để quản lý các đối tượng. 2.4 Lớp TclObject TclObject là lớp cơ sở của phần lớn các lớp còn lại trong cây biên dịch và thông dịch. Mỗi đối tượng thuô êc lớp TclObject được tạo bởi người sử dụng thông qua bô ê thông dịch, và sẽ có mô êt đối tượng ánh xạ tương ứng được tạo ra trong cây biên dịch. Hai đối tượng này có quan hê ê chă êt chẽ với nhau. Lớp TclClass (được mô tả ở phần sau) chứa các cơ chế cho phép thực hiê nê viê êc ánh xạ này. 2.4.1 Tạo và hủy đối tượng TclObject Khi người dùng muốn khởi tạo hay xóa bỏ mô êt đối tượng TclObject, hai hàm new{} và delete{} sẽ được sử dụng để tạo và hủy các đối tượng này. Hai hàm new{} và delete{} được sử dụng để tạo và hủy các đối tượng của tất cả các lớp dẫn xuất từ lớp TclObject. Tạo đối tượng TclObject: bằng cách dùng hàm new{}, người dùng sẽ tạo ra mô êt đối tượng TclObject thông dịch, bô ê thông dịch thực hiê nê viê êc khởi tạo đối tượng đó thông qua viê êc gọi hàm dựng init{} với các tham số nhâ nê được từ người dùng. Sau đó NS sẽ tự đô nê g tạo ra mô êt đối tượng biên dịch tương ứng, đối tượng ánh xạ này được tạo ra bởi hàm dựng của lớp TclObject cơ sở. Vì vâ êy để khởi tạo mô êt đối tượng TclObject, trước tiên cần phải gọi hàm dựng của lớp cha trước khi thực hiê nê các khởi tạo đối tượng của lớp con. Hàm new{} trả về thẻ bài trỏ tới đối tượng được tạo ra. Hủy các đối tượng TclObject: viê êc này nhằm xóa bỏ đối tượng thông dịch và đối tượng biên dịch ánh xạ tương ứng. Cũng giống như viê cê tạo đối tượng, khi hủy đối Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 13 Giới thiê êu công cụ NS tượng phải gọi hàm hủy của lớp cha mô êt cách tường minh ở câu lê nê h cuối cùng trong hàm hủy của lớp con. Hàm hủy của đối tượng TclObject sẽ thực hiê nê gọi hàm delete_shadow{} để xóa bỏ đối tượng biên dịch tương ứng. Cuối cùng bô ê thông dịch sẽ xóa bỏ đối tượng thông dịch 2.4.2 Kết hợp biến Trong phần lớn các trường hợp, chúng ta không thể can thiê êp trực tiếp vào các biến thành viên biên dịch và viê cê can thiê pê tới các biến thông dịch qua mã thong dịch cũng rất hạn chế. Tuy nhiên, chúng ta có thể thiết lâ pê nên sự kết hợp hai chiều: cả hai biến thành viên biên dịch và thông dịch cùng truy nhâ pê tới mô êt dữ liê uê duy nhất, sự thay đổi giá trị của mô êt trong hai biến thành viên sẽ làm thay đổi giá trị của biến thành viên còn lại. Cơ chế kết hợp này thiết lâ êp bởi hàm dựng biên dịch khi đối tượng được khởi tạo. NS hỗ trợ 5 loại dữ liê êu khác nhau: kiểu thực, kiểu nguyên, kiểu logic, kiểu thời gian và kiểu dữ liê uê giá trị băng thông (Kb, Mb..). Cú pháp để thực hiê nê viê êc gán dữ liê êu cho các biến như sau $object $object $object $object $object set set set set set realvar 1.2e3 intvar 123 bwvar 1.5mb timevar 1500m boolvar true 2.4.3 Theo dõi giá trị biến Ngoài cơ chế kết hợp biến, TclObject còn hỗ trợ theo dõi giá trị của cả biến C+ + và Tcl. Mô êt biến khi được tạo ra trong C++ hoă êc trong Tcl đều có thể thiết lâ êp viê êc theo dõi giá trị của nó. Để theo dõi giá trị mô êt biến ở mức Tcl, thì biến đó phải xuất hiê ên trong Tcl, điều đó có nghĩa là nó phải là mô êt biến Tcl thuần túy hoă êc là mô êt biến kết hợp C++/Tcl. Ngoài ra, mô êt đối tượng có biến thành viên được theo dõi giá trị cũng có thể yêu cầu viê cê theo dõi sử dụng hàm trace{} của đối tượng TclObject.Hàm trace{} có hai tham số đầu vào, tham số vào đầu tiên là tên của biến, tham số tùy chọn thứ hai chỉ ra đối tượng chịu trách nhiê m ê theo dõi giá trị của biến cần theo dõi, nếu đối tượng theo dõi này không được chỉ ra, thì đối tượng sở hữu biến sẽ chịu trách nhiê êm theo dõi giá trị của biến. Để mô êt đối tượng TclObject có thể theo dõi được giá trị biến, nó phải mở rô êng hàm C++ trace(), đây là mô tê hàm ảo đã được định nghĩa trong lớp TclObject. 2.4.4 Hàm command: định nghĩa và cách gọi Đối với mỗi đối tượng TclObject được tạo ra, NS thiết lâ pê mô êt hàm mẫu cmd{}, đóng vai trò như mô êt giao tiếp để thực hiê nê các hàm của đối tượng biên dịch ánh xạ. Hàm cmd{} tự đô êng gọi hàm command() của đối tượng biên dịch, và các tham số đầu vào của hàm cmd{} cho hàm command(). Người sử dụng có thể gọi hàm cmd{} theo hai cách: hoă êc là gọi tường minh hàm và chỉ ra tác vụ mong muốn ở biến đầu vào thứ nhất, hoă êc gọi theo cách ngầm định nếu tồn tại mô tê hàm mẫu trùng tên với tác vụ mong muốn. Đa phần các kịch bản mô phỏng đều sử dụng cách gọi thứ hai, Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 14 Giới thiê êu công cụ NS 2.5 Lớp TclClass Lớp biên dịch TclClass là mô êt lớp ảo thuần túy. Các lớp được dẫn xuất từ lớp cơ sở này có hai chức năng: xây dựng cây phân cấp theo lớp thông dịch để ánh xạ sang cây phân cấp theo lớp biên dịch, và đưa ra các hàm để khởi khảo các đối tượng TclObjects mới. Mỗi lớp dẫn xuất như vâ yê được gắn với mô êt lớp biên dịch xác định trong cây phân cấp biên dịch, và có thể khởi tạo các đối tượng mới của lớp biên dịch tương ứng. Ví dụ: chúng ta xem xét lớp RenoTcpClass, được dẫn xuất từ lớp TclClass, và được gắn với lớp biên dịch RenoTcpAgent. Lớp RenoTcpClass sẽ khởi tạo các đối tượng mới của lớp RenoTcpAgent. Lớp biên dịch RenoTcpAgent là lớp được dẫn xuất từ lớp TcpAgent, bản thân lớp TcpAgent được dẫn xuất từ lớp Agent, và cuối cùng lớp Agent lại được dẫn xuất từ lớp TclObject. Lớp RenoTcpClass được định nghĩa như sau: static class RenoTcpClass: public TclClass { public: RenoTcpClass() : TclClass("Agent/TCP/Reno") {} TclObject* create(int argc, const char*const* argv) { return (new RenoTcpAgent()); } } class_reno; 2.5.1 Kết hợp các biến thành viên tĩnh của lớp C++ Ở phần trước, chúng ta đã đề câ êp đến cách thức để nhìn thấy các biến thành viên của các đối tượng trọng C++ trong môi trường OTcl, tuy nhiên cơ chế này lại không thể áp dụng cho các biến thành viên tĩnh của các lớp C++. Đương nhiên là, chúng ta vẫn có thể tạo ra mô tê biến trong OTcl tương ứng với biến thành viên tĩnh của mỗi đối tượng C++, tuy nhiên điều này lại hoàn toàn phá hỏng đi ý nghĩa của biến thành viên tĩnh. Chúng ta không thể giải quyết vấn đề kết hợp biến này theo các giải pháp tương tự như viê cê kết hợp biến trong TclObject, bởi vì cơ chế kết hợp biến trong TclObject dựa trên lớp InstVar mà lớp này trong TclCl lại đòi hỏi sự hiê ên diê ên của mô tê đối tượng TclObject cụ thể. Tuy nhiên, chúng ta có thể tạo ra mô êt hàm thuô êc lớp TclClass tương ứng và thực hiê ên viê êc truy xuất tới biến thành viên tĩnh của lớp C++ thông qua hàm này. Các bước để thực hiê nê viê êc này như sau có thể tham khảo trong tài liê êu hướng dẫn NS, trang 30. 2.6 Lớp TclCommand Lớp TclCommand đưa ra cơ chế cho phép NS chuyển các câu lê ênh đơn giản tới bô ê thông dịch, và các câu lênh này có thể được thực hiê ên bởi bô ê thông dịch trong môi trường chung. Có hai hàm: ns-random và ns-version thường được sử dụng trong môi trường chung, cả hai hàm này được khởi tạo bởi hàm init_misc(void), và hàm init_misc được gọi bởi hàm Tcl_AppInit(void) trong quá trình NS được nạp vào bô ê nhớ. Lớp VersionCommand, định nghĩa hàm ns-version, hàm này không có tham số đầu vào, và trả về phiên bản NS hiê ên thời dạng chuỗi. Lớp RandomCommand, định nghĩa hàm ns-random, không tham số đầu vào, trả về mô êt giá trị nguyên ngẫu nhiên nằm trong khoảng [0, 231-1]. Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 15 Giới thiê êu công cụ NS Ví dụ: % ns-version 2.0a12 % ns-random 12334556 2.7 Lớp EmbeddedTcl NS cho phép phát triển các chức năng hoă êc bằng mã biên dịch hoă êc bằng mã thông dịch, các mã này sẽ được kiểm tra khi khởi đô êng NS. Chẳng hạn như các thư viê nê mã ~tclcl/tcl-object.tcl, ~ns/tcl/lib/*.tcl. Viê êc nạp và kiểm tra các mã kịch bản này sẽ được thực hiê nê thông qua các đối tượng trong lớp EmbeddedTcl. Cách đơn giản nhất để mở rô êng NS là thêm các mã OTcl hoă êc là vào file tclobject.tcl hoă êc vào các kịch bản trong thư mục ~ns/tcl/lib/. Cần lưu ý rằng, đối với trường hợp thứ hai, NS nạp file ~ns/tcl/lib/ns-lib.tcl mô êt cách tự đô êng, vì vâ êy người lâ êp trình phải thêm vào file này hai dòng để đảm bảo kịch bản của mình được tự đô nê g nạp vào lúc NS khởi đô êng. Ví dụ để thêm vào kịch bản tcl/mcast/srm.tcl định nghĩa các thủ tục cho phép chạy SRM, trong file ns-lib.tcl xuất hiê nê dòng lê nê h source tcl/mcast/srm.tcl Có ba điểm cần lưu ý đối với mã EmbeddedTcl là: thứ nhất nếu trong quá trình kiểm tra mã bị lỗi thì ns sẽ không chạy, thứ hai người sử dụng có thể ghi đè lên bất kỳ đoạn mã nào trong thư viê ên mã, cụ thể là chúng có thể được thay đổi. Cuối dùng, sau khi thêm các kịch bản vào ns-lib.tcl, cũng như mỗi lần sửa đổi sau đó, người sử dụng phải biên dịch lại ns để những thay đổi đó có hiê êu lực 2.8 Lớp InstVar Lớp InstVar định nghĩa các hàm và đưa ra các cơ chế để kết hợp mô êt biến C++ trong đối tượng biên dịch với mô êt biến OTcl xác định trong đối tượng thông dịch tương ứng. Viê êc kết hợp này cho phép giá trị của biến có thể được thay đổi trong cả hai môi trường: thông dịch và biên dịch ở mọi thời điểm. Có năm lớp biến: InstVarReal, InstVarTime, InstVarBandwidth, InstVarInt và InstVarBool, được sử dụng để kết hợp 5 kiểu biến: thực, nguyên, thời gian, logic và băng thông tương ứng. 3. Lớp Simlator Tất cả bộ mô phỏng được mô tả bởi lớp Tcl của bộ mô phỏng. Nó cung cấp một tập các giao diện cho việc đặt cấu hình mô phỏng và lựa chọn kiểu của bộ định trình sự kiện sử dụng để điều khiển việc mô phỏng. Một kịch bản mô phỏng nói chung bắt đầu bởi việc tạo ra một lớp cụ thể và gọi các phương thức khác nhau để tạo các nút, các cấu trúc liên kết mạng và cấu hình các khía cạnh khác của sự mô phỏng. 3.1 Khởi tạo bộ mô phỏng Khi một đối tượng mô phỏng được tạo ra trong tcl, thủ tục khởi tạo được thực hiện theo các thao tác: - Khởi tạo định dạng gói (gọi hàm create_packetformat) - Tạo bộ định trình (mặc định là bộ định trình lịch) - Tạo một "tác tử rỗng"(null agent - nơi để hủy gói trong ở các ví trí khác nhau) Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 16 Giới thiê êu công cụ NS Sự khởi tạo định dạng gói thiết lập các trường dư với các gói được sử dụng trong suốt quá trình mô phỏng. Bộ định trình thực hiện mô phỏng theo cách điều khiển sự kiện và có thể được thay thế bởi bộ định trình luân phiên mà ở đó cung cấp một vài ngữ nghĩa khác nhau (xem các phần dưới đây để có thêm chi tiết) tác tử rỗng được tạo ra theo lời gọi: set nullAgent_ [new Agent/Null] Tác tử này nói chung là hữu ích như là một nơi để hủy gói hoặc như là một cái đích cho các gói không được đếm hoặc được ghi lại. 3.2. Bộ định trình và sự kiện Một bộ mô phỏng là một bộ mô phỏng điều khiển sự kiện, có 4 bộ định trình hiện tại có trong bộ mô phỏng, chúng được thực hiện sử dụng cấu trúc dữ liệu khác nhau: danh sách kết nối đơn, chất đống, hàng chờ lịch (mặc định) và một kiểu đặc biệt được gọi là "thời gian thực". Mỗi chúng được mô tả dưới dây. Bộ định trình hoạt động bởi việc lựa chọn sự kiện sớm nhất tiếp theo, thực hiện chúng cho tới khi hoàn thành sau đó quay trở lại thực hiện các sự kiện tiếp theo. Đơn vị thời gian được tính bởi bộ định trình là giây. Hiện tại, bộ mô phỏng là tuyến đoạn đơn và chỉ một sự kiện được thực hiện trong suốt thời gian. Nếu có hơn một sự kiện được định trình thực hiện ở cùng một thời gian, sự hoạt động của chúng là được thực hiện theo cách định trình đầu tiên được giải quyết đầu tiên, Những sự kiện đồng thời không được sắp xếp lại bởi bộ định trình (như trong những phiên bản trước) và tất cả bộ định trình nên cung cấp cùng môt thứ tự giải quyết được đưa ra cho cung loại đầu vào. Việc thực hiện từng phần các sự kiện hoặc các công việc được ưu tiên sẽ không được hỗ trợ. Một sự kiện nói chung gồm có "thời gian đốt cháy" (firing time) và một hàm trình xử lý. Định nghĩa thật sự của một sự kiện như sau: class Event { public: Event* next_; /* event list */ Handler* handler_; /* handler to call when event ready */ double time_; /* time at which event is ready */ int uid_; /* unique ID */ Event() : time_(0), uid_(0) {} }; /* * The base class for all event handlers. When an event’s scheduled * time arrives, it is passed to handle which must consume it. * i.e., if it needs to be freed it, it must be freed by the handler. */ class Handler { public: virtual void handle(Event* event); }; Hai kiểu của đối tượng được dẫn xuất từ lớp sự kiện gốc: gói và "đang lúc sự kiện" (at-event). Một at-event là việc thực hiện thủ tục tcl được định trình diễn ra tại một thời điểm nhất định. Điều này thường xuyên được sử dụng trong kịch bản mô phỏng. Một ví dụ đơn giản về việc sử dụng chúng như sau: ... set ns_ [new Simulator] $ns_ use­scheduler Heap $ns_ at 300.5 "$self complete_sim" Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 17 Giới thiê êu công cụ NS ... Đoạn mã tcl trên đầu tiên tạo ra đối tượng mô phỏng, sau đó thay đổi bộ định trình mặc định thành bộ định trình dựa trên việc tạo đống (xem bên dưới) và cuối cùng định trình hàm $self complete_sim sẽ thực hiện ở thời gian 300.5s. Các at-event được thi hành như các sự kiện mà trình xử lý thực hiện một cách hiệu quả của bộ thông dịch tcl. 3.2.1 Bộ định trình danh sách Bộ định trình danh sách thực thi bộ định trình sử dụng cấu trúc danh sách liên kết đơn. Danh sách giữ theo trật tự thời gian (sớm nhất đến muộn nhất) những sự kiện chèn thêm vào và xóa đi yêu cầu quét danh sách để tìm ra mục thích hợp. Lựa chọn sự kiện tiếp theo để thực hiện yêu cầu cắt mục đầu tiên ra khỏi đầu danh sách. Sự thực thi này giữ cho việc thực hiện sự kiện theo cách FIFO cho các sự kiện đồng thời. 3.2.2. Bộ định trình xếp đống Bộ định trình xếp đống thực thi bộ định trình sử dụng cấu trúc xếp đống. Cấu trúc này là cao cấp hơn cấu trúc danh sách với số lượng lớn các sự kiện, như là thời gian xóa và chèn thêm là O (log n) cho n sự kiện. Sự thực thi này trong ns v2 được lấy từ bộ mô phỏng MaRS-2.0 bản thân MaRS lại được mượn mã từ bộ NetSim cho dù dòng này 3.2.3 Bộ định trình xếp hàng theo lịch Bộ định trình xếp hàng theo lịch sử dụng cấu trúc dữ liệu tương tự như lịch để bàn 1 năm, ở đó các sự kiện cùng ngày tháng của các năm có thể được ghi trong một ngày. Sự thực thi của xếp hàng theo lịch trong ns v2 được đóng góp bởi David Wetherall 3.2.4 Bộ định trình thời gian thực Bộ định trình thời gian thực cố gắng đồng bộ sự thi hành của các sự kiện với thời gian thực. Nó thực thi như là một lớp con của bộ định trình danh sách. Khả năng về thời gian thực trong ns là đang được phát triển, những đã được sử dụng đưa ra một ns mô phỏng mạng trong kiến trúc thế giới thực được thực nghiệm với kiến trúc mạng đơn giản, lưu lượng chéo, ... Nó chỉ hoạt động với tốc độ dữ liệu lưu lượng mạng chậm, như một bộ mô phỏng cần phải có thể theo được với tốc độ đến của gói trong thế giới thực, và sự đồng bộ này hiện tại là không có hiệu lực. 3.3 Các phương thức khác Các lớp của bộ mô phỏng cung cấp một lượng các phương pháp sử dụng thiết lập sự mô phỏng. Nói chung chúng được chia thành 3 loại: Các phương pháp tạo, quản lý kiến trúc và quản lý các liên kết, các phương pháp thực hiện việc theo vết, và trình giúp đỡ thực hiện chức năng xử lý với bộ định trình. Theo đây là danh sách các phương pháp không có liên quan đến kiến trúc mạng của bộ mô phỏng: Simulator instproc now ;# return scheduler’s notion of current time Simulator instproc at args ;# schedule execution of code at specified time Simulator instproc cancel args ;# cancel event Simulator instproc run args ;# start scheduler Bài tiểu luâ ân môn học IP-Ứng dụng và bảo mâ ât 18 Giới thiê êu công cụ NS Simulator instproc halt ;# stop (pause) the scheduler Simulator   instproc   flush­trace   ;#   flush   all   trace   object   write buffers Simulator   instproc   create­trace   type   files   src   dst   ;#   create   trace object Simulator   instproc   create_packetformat   ;#   set   up   the   simulator’s packet format 3.4. Lướt qua về các lệnh Synopsis: ns   .. Mô tả: Lệnh cơ bản để chay một kịch bản mô phỏng trong ns. Bộ mô phỏng ns gọi thông qua bộ thông dịch ns, một sự mở rộng của lệnh vanilla otclsh. Sự mô phỏng được định nghĩa bởi một kịch bản Otcl (tệp tin). Vài ví dụ về kịch bản Otcl có thể thấy trong thư mục ns/tcl/ex Dưới đây là danh sách chung nhất các lệnh của bộ mô phỏng được sử dụng trong mô phỏng scripts: set ns_ [new Simulator] lệnh này tạo ra một đối tượng cụ thể của bộ mô phỏng.  set now [$ns_ now] Bộ định trình giữ vết thời gian mô phỏng. nó trả  về  thông báo của bộ định trình về thời gian hiện tại.  $ns_ halt dừng lại và tạm dừng bộ định trình.  This stops or pauses the scheduler. $ns_ run Chạy bộ định trình This starts the scheduler. $ns_ at 
- Xem thêm -

Tài liệu liên quan