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
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
657,53 KB
Nội dung
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 1.6 Các đối tượng hoạt động: .36 2 NAM TRACE 37 2.1.Định dạng Nam Trace: 37 2.2 Các sự kiện khởi tạo: .38 2.3 Nodes: 39 2.4 Links : 39 2.5 Queues: 40 2.6 Các gói tin: (Packets) .40 2.7 Đánh dấu Node : 41 2.8 Tìm vết Agent: (Agent Tracing ) 41 2.9 Tìm vết biến (Variable Tracing): 41 Phần III : Các bài toán mô phỏng 42 1 Mô phỏng các gói tin UDP/TCP .42 1.1 UDP Agent .42 Cyber Pro !!! :)) 1 Cơ sở mạng thông tin – K4X 1.2 TCP Agents 43 2.Unicast Routing 50 2.1 The Interface to the Simulation Operator (The API) 50 2.2 Các cơ chế cấu hình khác cho Specialised Routing 51 2.3 Các tham số cấu hình đặc tả giao thức 52 2.4 Đặc tính và kiến trúc của Routing 53 2.5 Protocol Internals 57 2.6 Các đối tượng Unicast routing 58 2.7 Tỏng quan các lệnh 58 3.Multicast Routing .59 3.1 Multicast API 59 3.2 Internals of Multicast Routing 62 Bảng tra cứu định dạng File Nam trace: .68 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 Network Simulator (NS-2) 1/ :Tại sao phải cần chương trình mô phỏng mạng : Tốc độ phát triển của Internet đang phát triển rất nhanh , sự ra đời của các giao thức mới và các thuật toán để phục vụ các đòi hỏi về bảo mật ,truyền thông đa phương tiện, mạng di động ,các chính sách quản lý và sự hõ trợ của chất lượng dịch vụ (QoS) Lý thuyết và ước lượng của các công cụ này đòi hỏi phải trả lời rất nhiều các câu hỏi Bỏ qua những giá trị của chúng , các mô phỏng thông dụng, các thí điểm qui mô lớn và các các đánh giá thí nghiệm qui mô nhỏ đều có mặt hạn chế của nó Bởi vì sử dụng các mã thực(real code) nên các cuộc thí nghiệm thực hiện trong các khu thí điểm hay các phòng thí nghiệm tự động nắm bắt các nội dung ,chi tiết quan trọng có khi đã bị bỏ qua trong khi mô phỏng Tuy nhiên để xây dựng các khu thí điểm hay các phòng thí nghiệm quả thật rất tốn kém , tái cơ cấu và phân bổ chúng rất khó Chúng cũng không được linh động lắm Hơn nữa , việc mô phỏng một vài hiện tượng của hoạt động mạng như nhiễu sóng vô tuyến có thể rất khó khăn , phức tạp trong việc so sánh hay ước lượng các mô hình giao thức Thiết kế giao thức bằng mô phỏng thường bắt đầu với các mô phỏng các chi tiết riêng lẻ của giao thức của một nhà nghiên cứu độc lập thông qua các Topology cỡ nhỏ và các giả định đơn giản thường là ở dạng tĩnh Các chi phí ban đầu cao đã ngăn cản một nhóm độc lập có được các điều kiện cần thiết để tạo ra một môi trường mô phỏng mạng hoàn thiện Chính khó khăn này là nguyên nhân dẫn đến các mô phỏng được xây dựng bởi các nhóm khác nhau không có được chất lượng như mong muốn Công trình nghiên cứu về thí điểm mạng ảo ( Virtual Internerwork Testbed _ VINT) đã cung cấp các công cụ mô phỏng tiên tiến cho các nhà nghiên cứu mạng sử dụng để thiết kế và triển khai các giao thức Internet trên diện rộng Công cụ tiêu biểu của VINT là : NS ( Network Simulator ) VINT cung cấp các điều kiện thực hành tiên tiến giúp mở rộng điều kiện cho các nhà nghiên cứu trong việc ước lượng các giao thức : 1 Tính trừu tượng : Sự thay đổi trong việc mô phỏng dạng hạt cho phép các một mô phỏng đơn có thể điều chỉnh khớp các chi tiết và các mô phỏng ở mức cao Các nhà nghiên cứu nghiên cứu giao thức mạng tại nhiều mức Trải rộng từ các phần riêng biệt của một giao thức độc lập đến sự tập hợp của các luồng đa dữ liệu và sự tương tác giữa các giao thức với nhau Các cơ 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: Sơ đồ 1: Mô hình ns đơn giản Từ mô hình có thể thấy, ns sử dụng ngôn ngữ Otcl với thư viện bao gồm các đối tượng Event Scheduler, các đối tượng Network Component, và các module Plumbing giúp cho việc cài đặt mạng Nói cách khác, để sử dụng ns, ta phải lập trình trên ngôn ngữ Otcl Để cài đặt và chạy chương trình mô phỏng mạng bằng ns, ta phải viết script trên ngôn ngữ Otcl, lập lịch cho các sự kiện, thiết lập cấu hình mạng (topo mạng) bằng cách sử dụng các đối tượng Network Component, triệu gọi các hàm thư viện, báo cho các nguồn dữ liệu biết khi nào thì bắt đầu và kết thúc việc truyền gói tin trên mạng Khi muốn tạo một đối tượng mạng mới, có thể viết mới một đối tượng hoặc bằng cách liên kết các đối tượng mạng đã có sẵn trong thư viện Việc gắn kết đối tượng tạo nên đối tượng mới chính là điểm mạnh của ns Một bộ phận quan trọng khác của ns bên cạnh network object là event scheduler Một sự kiện trong ns là một ID của gói tin được lên lịch và một con trỏ trỏ tới đối tượng xử lí sự kiện đó Một event scheduler theo dõi lịch của tất cả các sự kiện và triệu gọi đối tượng thực hiện sự kiện đó vào thời điểm thích hợp Các đối tượng trong mạng trao đổi thông tin với nhau bằng cách gửi Cyber Pro !!! :)) 5 Cơ sở mạng thông tin – K4X và nhận các gói tin Với mỗi gói tin, các đối tượng đều phải mất một khoảng thời gian để xử lí gói tin (độ trễ), các đối tựơng tạo độ trễ bằng cách sử dụng event scheduler Một dạng thể hiện khác của event scheduler là timer Ví dụ TCP cần timer để theo dõi việc truyền gói tin nhằm phục vụ cho việc truyền lại trong trường hợp mất gói tin (gói tin gửi lại vẫn có cùng số hiệu với gói tin trước nhưng sẽ khác ở ns packet ID) Timer đo thời gian gắn với gói tin và thực hiện hành động liên quan tới gói tin khi đến thời điểm thích hợp, và không mô phỏng độ trễ ns sử dụng cả ngôn ngữ C++ và ngôn ngữ Otcl Ns hỗ trợ cấu trúc lớp kiểu phân cấp trong C++ (được gọi là cấu trúc lớp biên dịch), và một cấu trúc lớp tương tự trong ngôn ngữ Otcl (gọi là cấu trúc lớp thông dịch) Hai cấu trúc lớp phân cấp này có quan hệ chặt chẽ với nhau, dưới góc độ người sử dụng (không phải người lập trình phát triển ns), có tương ứng 1-1 giữa lớp trong cấu trúc lớp biên dịch và lớp trong cấu trúc lớp thông dịch Sơ đồ sau là ví dụ về sự phân cấp trong C++ và Otcl Sơ đồ 2: Tương ứng C++ và Otcl 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 ra một hay nhiều text file chứa số liệu chi tiết phục vụ cho việc phân tích quá trình mô phỏng, hoặc cũng có thể là đầu vào cho hệ mô phỏng bằng đồ hoạ (Network Animator : NAM) Hình dươi đây sẽ mô tả sự hoạt động của NS thông cua 3 mức , như chúng ta thấy có mức khung cảnh, mức Script và cuối cùng là ngôn ngữ C++ Tất cả những công việc của NS đều thông cua các Script của NS để gọi các hàm của C++ ở mức dưới cùng Sơ đồ 4 : Sự hoạt động của NS Cyber Pro !!! :)) 7 Cơ sở mạng thông tin – K4X 2.2 Làm việc với NS : 2.2.1 Download và cài đặt : Ta có thể cài NS bằng các gói riêng biệt (Tcl/Tk , Otcl … ) hoặc cũng có thể dùng một gói bao gồm tất cả các gói riêng biệt “All-in-One” Ở đây chúng em sử dụng gói “All-in-one” để cài đặt bản 2.27 (Ns-allinone2.27) _ bản mới nhất hiện nay Bản này đựơc chúng em cài đặt và chạy trên Linux RedHat 8.0 chạy ổn định Các File có trong NS 2.27 : - Tkrelease 8.3.2 - Otclrelease 1.0a8 - TclCL release 1.0b13 - Tcl release 8.3.2 - Ns release 2.26 - Nam release 1.9 - Xgraph version 12 - CWebversion 3.4g - SGB version 1.0 - Gt-itm gt-itm and sgb2ns 1.1 - Zlib version 1.1.4 Để cài đặt trên LINUX , ta phải COPY bản nén của NS (ns-allinone-2.27.tar.gz ) trên LINUX và giải nén bằng công cụ của LINUX Sau đó ta mở Terminal của LINUX , chuyển đến thư mục có chứa File ns-allinone2.27 đã bung nén Nếu dùng giao diện KDE ta có thể mở cửa sổ Terminal ngay trên thanh công cụ của cửa sổ Window (Window -> Terminal ) Sau đó gõ lệnh 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 thăm dò nhanh một số hoạt cảnh Trong những trường hợp này, thời gian tương tác (chạy lại, thay đổi chế độ) là quan trọng hơn còn cấu hình chạy một lần, thời gian chạy thực không quan trọng bằng ns kết hợp tất cả các yêu cầu này với hai ngôn ngữ C++ và OTcl C++ nhanh khi chạy, nhưng chậm khi thay đổi, phù hợp với việc xử lý chi tiết giao thức OTcl chạy chậm nhưng thay đổi nhanh, là lý tưởng cho cấu hình giả lập ns thông qua (tclcl) cung cấp “keo” để tạo các đối tượng và các biến xuất hiện trên cả hai ngôn ngữ • OTcl dùng để : o Cấu hình, setup và “one-time” stuff o Làm các công việc mà có thể sử dụng các đối tượng C++ có sẵn • C++ dùng cho: o Làm những công việc yêu cầu phải xử lý các gói tin trong luồng o Nếu đang cần phải thay đổi cách ứng xử của một lớp c++, sẵn có trong những cách mà không biết trước Lớp Tcl Lớp Tcl đóng gói thể hiện thực (actual instance) của trình thông dịch OTcl và cung cấp các phương thức để truy cập và giao tiếp với các trình thông dịch này Một instance của lớp được mô tả trong ~/tclcl/tcl.cc như một biến thành phần tĩnh Lập trình viên phải đặt một tham chiếu đến instance này để truy cập tới các phương thức khác Khai báo: Tcl & tcl = Tcl::instance(); Yêu cầu các thủ tục OTcl Có 4 công cụ khác nhau để yêu cầu một lệnh OTcl thông qua instance Tcl Chúng khác nhau cơ bản về các thông số Mỗi hàm truyền một xâu tới trình thông dịch sau đó định giá xâu đó trong ngữ cảnh toàn cục Các phương thức sẽ trả về nơi gọi nếu trình thông dịch trả về TCL_OK Ngược lại, nếu trình thông dịch trả vể TCL_ERROR, các phương thức đó sẽ gọi tkerror{} Người dùng có thể chèn thêm các phương thức này để có thông báo lỗi một cách chính xác hơn - Tcl.eval(char *s) yêu cầu Tcl_GlobalEval() chạy s thông qua trình thông dịch - Tcl.evalc(const char* s) bảo vệ tham số s Nó copy s vào bộ đệm trong, nó sau đó yêu cầu 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 Lớp TclObject là lớp cơ sở cho hầu hết các lớp khác trong phân cấp thông dịch và biên dịch Mỗi đối tượng trong lớp TclObject được tạo ra bởi người dùng từ trong trình thông dịch Một đối tượng bóng tương đương được tạo ra trong phân cấp biên dịch Hai đối tượng này liên kết mật thiết với nhau Ví dụ cấu hình của một TclObject , một tác tử SRM (lớp Agent/SRM/Adaptive) set srm [new Agent/SRM/Adaptive] $srm set packetSize_ 1024 $srm traffic-source $s0 Với quy ước trong ns, lớp Agent/SRM/Adaptor là lớp con của Agent/SRM, là lớp con của lớp Agent, là lớp con của lớp TclObject Phân cấp lớp biên dịch tương ứng là ASRMAgent, thừa kế từ Agent, thừa kế từ TclObject tương ứng Tạo và xoá đối tượng TclObject a,Tạo đối tượng TclObject: Bằng cách dùng new{}, trình thông dịch sẽ chạy hàm khởi tạo cho đối tượng đó, init{}, truyền cho nó các tham số cung cấp bởi người dùng Đối tượng bóng của nó được tạo ra bởi hàm thiết lập lớp cơ sở TclObject Do đó hàm khởi tạo cho đối tượng TclObject mới đầu tiên phải gọi hàm khởi tạo của lớp cha new{} trả về một handle tới đối tượng này Trình tự các hành động sau được thực hiện bởi trình thông dịch là một phần của việc khởi tạo đối tượng TclObject mới - Lấy một handle của đối tượng mới từ không gian tên của TclObject - Gọi hàm khởi tạo cho đối tượng mới và các hàm khởi tạo của các đối tượng lớp trên Hàm khởi tạo của đối tượng gốc TclObject sẽ tạo đối tượng bóng và thực hiện các khởi tạo cho nó Cyber Pro !!! :)) 10 Cơ sở mạng thông tin – K4X + Thủ tục instance compute-routes{} tính toán đường đi thực sự đối với giao thức.Sự tính toán dựa trên các đường định tuyến học bởi giao thức và sự biến đổi từ giao thức tới giao thức Chu trình này đựoc gọi bởi rtObject khi tô pô thay đổi, và cũng được gọi khi node nhận một cập nhật Nếu chu trình tính toán đường đi mới, rtObject::compute-routes{} cần để được triệu gọi để tính toán lại và cài đặt đường định tuyến mới tại node.Sự triệu gọi thực sự của rtObject được thực hiện bởi thủ tục gọi chu trình này lần đầu tiên + Thủ tục instance send-updates{} được gọi bởi rtObject khi các bảng routing thay đổi.và cập nhật mới đưwcj gửi đi các node Thủ tục này cũng có thể được gọi khi không có sự thay đổi nào về đường định tuyến nhưng tô pô gắn liền với node thay đổi trạng thái.Số lượng thay đổi đwocj dùng để xác định danh sách các node đồng đẳng mà thông tin cập nhật phải được gửi Các mở rộng khác cho Simulator, Node, Link, and Classifier — Ta đã xét các phương thức rtproto{} và cost{} trong lớp Simulator Một phương thức khác dùng trong đó là get-routelogic{}; Thủ tục này trả về instance của routelogic trong mô phỏng Phương thức đưwcj dùng bởi lớp Simulator, unicast và multicast routing —Lớp Node chứa các thủ tục instance thêm vào này để hỗ trợ dynamic unicast routing: initrouting{},add-routes{}, delete-routes{}, và rtObject?{} + Thủ tục instance init-routing{} được gọi bởi rtObject tại node.Nó chứa một con trỏ tới rtObject, trong biến instance của nó: rtObject_, cho sự vận động hay thu hồi sau đó.Nó cũng kiểm tra biến lớp của nó để thấy nếu dùng multiPath routing, và thiết lập một biến instance tới tác động này Nếu multiPath routing có thể được dùng, mảng biến instance routes_ chứa một lượng các đường dẫn đươc cài trên mỗi một đích đến.Đây chỉ là mảng trong unicast routing được đánh chỉ mục bởi ID của node,hơn là node handle + Thủ tục instance rtObject?{} trả về rtObject handle cho node đó + Thủ tục instance add-routes{} tạo một node id, và một danh sách các link.Nó sẽ thêm vào danh sách các link như các đường định tuyến để tìm đến đích được xác nhận bởi node id.Sự thực hiện của multiPath routing được xác định bởi một Classifier/multiPath riêng biệt.Với một số đích đến có ID d, nếu node này có nhiều đường tới d, và classifier chính trỏ tới multipath classifier này thay cho link để tìm đường tới đích.Mỗi multiple path được xác nhận bởi các giao diện được dùng để cài đặt trong multipath classifier.Multipath classifier sẽ dùng mỗi một link cài trên nó để chuyển tiếp thành công các gói tin tới nó + Thủ tục instance delete-routes{} nắm một node id,một danh sách các giao diện và một ullAgent Nó sẽ xóa mỗi giao diện trong danh sách, nếu cổng vào trước đó không dùng một multipath classifier,sau đó chỉ có một đường định tuyến, và cổng vào đường đi được thiết lập để trỏ tới nullAgent 2.4.2 Interface to Network Dynamics and Multicast Sự hồi đáp của việc thay đổi tô pô đwocj xét theohaichủ đề: Các hoạt động xảy ra bởi các agent cục bộ tại mỗi node và các hoạt động bởi toàn thể giao thứcCác giao thức routing chi tiết như DV thực thi đòi hỏi các hoạt động được thực hiện bởi các agent giao thức cục bộ tại node đang xét Hoạt dộng tại các node cục bộ Sau đây là một số thay đổi trong tô pô, các mô hình mạng động sẽ được gọi đầu tiên Cyber Pro !!! :)) 56 Cơ sở mạng thông tin – K4X rtObject::intf-changed{} : Ở mỗi một node ảnh hưởng, với mỗi một giao thức định tuyến unicast được thực hiện taị node đó, rtObject::intf-changed{} sẽ gọi thủ tục instance của giao thức cục bộ, intf-changed{}, theo sau bởi thủ tục compute-routes{} của giao thức sau khi mỗi giao thức được tính các đường định tuyến của nó rtObject::intf-changed{} sẽ gọi compute-routes{} để có thể cài các đường định tuyến mới.Nếu các đường định tuyến mới đã được thiết lập, rtObject::compute-routes{} sẽ gọi send-updates{} chomoix giao thức được thực hiện trên node.Thủ tục cũng thiết lập cờ đối tượng định tuyến multicast của đwngf định tuyến thay đổi trên node, xác định số lượng thay đổi đã được thực hiện rtObject::flag-multicast{} sẽ thông báo đối tượng định tuyến multicast để tạo hành động thích hợp.Một ngoại lệ cho giao diện giữa unicast và multicast là sự tương tác giữa multicast cơ chế dày đặc động - dynamic dense mode và định tuyến unicast chi tiết - detailed unicast routing Sự thực hiện DM động trong NS coi node hàng xóm sẽ gửi cập nhật ngầm khi nào đường định tuyến thay đổi.mà không gửi bản cập nhất thật sự.Sau đó nó dùng thông tin để tính toán quan hệ cha-con thích hợp cho multicast spanning trees.Vì thế, detailed unicast routing sẽ gọi rtObject_ flag-multicast 1 khi nào nó nhận một cập nhật định tuyến , thậm chí khi cập nhật không biểu hiện trong bảng routing table của nó Hoạt động toàn cục : Mỗi lần hoạt động chi tiết tại các node ảnh hưởng được hoàn thành, các mô hình mạng động sẽ báo hiệu RouteLogic instance (RouteLogic::notify{}) của các sự thay đổi tới tô pô.Thủ tục này sẽ gọi thủ tục compute-all{} đối với mỗi giao thức được cài tại các node.Các giao thức định tuyến tập trung như session routing dùng tín hiệu này để tính toán lại các đường định tuýến tới tô pô.Cuối cùng thủ tục RouteLogic::notify{} sẽ báo hiệu một vài instance của centralized multicast sẽ được thực hiện tại node đó 2.5 Protocol Internals Direct Routing: Giao thức này ghi lại trạng thái của liên kết gắn liền và duy trì các đường định tuyến ngay lập tức tới các hàng xóm gần kề.Với các gikhác, nó duy trì các mảng biến instance nextHop_, rtpref_, và metric_, được đánh chỉ mục bởi handle của mỗi đích đến có thể trong tô pô Thủ tục instance compute-routes{} tính toán đường đi dựa trên trạng thái hiện thời của link, và trạng thái trước đó của link gắn với nó.Không có thủ tục hay thủ tục instance khác được định nghĩa trong giao thức này Static Routing Thủ tục compute-routes{} trong lớp RouteLogic đầu tiên tạo ra ma trận gần kề, và sauđó gọi các phương thức C++, compute_routes() của đối tượng.Cuối cùng, thủ tục khôi phục lại kết quả tính toán định tuyến tại mỗi node trong tô pô Session Routing: Lớp định nghĩa thủ tục init-all{}để tính toán dường đi khi khởi tạo mô phỏng.Nó cũng định nghĩa thủ tục compute-all{} để tính toán các đường đi khi tô pô thay đôi.Mỗi thủ tục này sẽ gọi trực tiếp compute-routes{} DV Routing: Trong một cơ chế định tuyến động, các node gửi và nhận các thông điệp, và tính toán đường đi trong tô pô dựa trên trao đổi thông điệp.Thủ tục init-all{} tạo một danh sách node làm tham số, mặc định là danh sách node trong tô pô.Tại mỗi một node thủ tục khởi tạo lớp rtObject và các agent lớp Agent/rtProto/DV Nó xác định các DV đồng đẳng với mỗi agent DV được tạo ra Và tạo các đối tượng rtPeer liên quan Constructor cho agent DV khởi tạo một số các biến instance, mỗi agent chứa một mảng được đánh chỉ mục bởi handle của node đích, của độ ưu tiên, metric, giao diện (hay link) tới next hop, Cyber Pro !!! :)) 57 Cơ sở mạng thông tin – K4X và các node ở xa, với đường đi tốt nhất cho mỗi đích đến được tính toán bởi các agent agent tạo ra các biến instance và lập lịch gửi cập nhật đầu tiên trong 0.5 giây đầu tiên khi khởi động mô phỏng Mỗi agent chứa danh sách các đồng đẳng được chỉ ra bởi handle của node dồng đẳng.Mỗi peer là một cấu trúc đồng đẳng riêng biệt nắm giữ địa chỉ của agent đồng đẳng, metric và độ ưu tiên của đường đi tới đích được quảng bá bởi agent đó.Cấu trúc peer được khởi tạo bởi thủ tục add-peer{} được gọi bởi init-all{} Chu trình send-periodic-update{} gọi send-updates{} để gửi cập nhật thực tế, nó đặt lại lịch gửi bản cập nhật tiếp theo sau khi advertInterval để chống lại sự đồng bộ có thể.ảnh hưởng send-updates{} sẽ gửi các bản cập nhật tới tập các peer đã chọn, nếu mọt vài đường thay dổi hay không cạp nhật định kỳ, thủ tục sẽ gửi cập nhật tới tất cả các peer.Nói cách khác, néu vài link được lấy lại, thủ tục sẽ gửi cạp nhật tới peer sát đó chỉ gắn với link send-updates{} Dùng thủ tục send-to-peer{} để gửi các câph nhật thực tế, thủ tục này sẽ đóng gói các cập nhật, dùng cơ chế split-horizon and poison reverse Nó gọi instproc-like, sendupdate{}để gửi cập nhật.Cập nhật thực tế được chứa trong biến lớp msg_ được đánh chỉ mục bởi số nguyên không giảm.instproc-like chỉ gửi msg_ tới peer ở xa Điều này loại trừ sự cần phải chuyển đổi từ xâu OTcl xang dạng định dạng khác.Khi một peer nhận một cập nhật, đầu tiên nó sẽ kiểm tra nếu cập nhật có khác trước không.Agent sẽ tính toán đường định tuyến mới nếu bản cập nhật có thông tin mới 2.6 Các đối tượng Unicast routing Routelogic và rtObject là hai đối tượng quan trọng đối với unicast routing trong NS Routelogic,về cơ bản sẽ mô tả bảng routing được tạo ra và duy trì với mọi mô phỏng unicast rtObject là đối tượng mà mọi node có trong định tuyến unicast độn, có một instance.Chú ý rằng không có instance của dối tượng này nếu Session routing được chạy như một detailed routing protocol khong được mô phỏng trong trường hợp này 2.7 Tỏng quan các lệnh Sau đây là danh sách các lệnh về unicast routing được dùng trong kịch bản mô phỏng: $ns_ rtproto Với định nghĩa loại giao thức routing như Static, Manual, Session , DV.Các đối số args có thể định nghĩa danh sách các node mà giao thức routing chạy Các phương thức bên trong: $ns_ compute-routes: Tính toán thông tin next_hop cho tất cả các node dùng kết nối tô pô.Thông tin next_hop này sau đó được sử dụng để tính các node classifier hay các bảng routing compute-routes triệu gọi calls compute-flat-routes hay compute-hier-routes dựa vào loại địa chỉ được dùng trong mô phỏng $ns_ get-routelogic : Trả về một handle tới đối tượng RouteLogic object (the routing table),nếu một đối tượng được tạo ra.Nói cách khác một đối tượng bảng routing sẽ được tạo ra $ns_ dump-routelogic-nh : Kết xuất ra thông tin nexthop trong bảng routing table $ns_ dump-routelogic-distance Kết xuất ra thông tin khoảng cách trong bảng routing $node add-route : Đây là một phương thức dùng để thêm vào các đầu vào routing (thông tin nexthop) trong bảng routing table của node Nexthop tới từ một node là đối tượng và thông tin này sẽ được thêm vào classifier của node Cyber Pro !!! :)) 58 Cơ sở mạng thông tin – K4X $routelogic lookup : Trả về ID của node là nexthop từ node với ID nguồn tới ID đích $routelogic dump : Kết xuất các bảng routing table của tất cả các node với ID nhỏ hơn nodeid.Các node id được gán cho các node tăng dần bắt đầu từ 0 theo thứ tự tạo ra rtobject dump-routes Kết xuất bảng routing table ra kênh ngoài được xác định theo fileID fileID phải là một file handle trả vè bởi lệnh Tcl open và phải được mở khi hoạt động $rtobject rtProto? Trả về một handle để routing protocol agent specified by proto if it exists at that node Returns an empty string otherwise $rtobject nextHop? Trả về ID của node mà next hop tới đích đặc đặc tả bởi node id, $rtobject rtpref? destID : Trả về độ ưu tiên của đường định tuyến tới node đích được cho bởi destid $rtobject metric? destID: Trả về metric cho đường định tuyến tới destid 3.Multicast Routing 3.1 Multicast API Multicast forwarding yêu cầu sự cải tiến các node và link trong tô pô.Do đó, người sử dụng phải định rõ các yêu cầu multicast tới lớp Simulator trước khi tạo ra tô pô>Sau đây là một trong hai cách: set ns [new Simulator -multicast on] hay set ns [new Simulator] $ns multicast Khi các mở rộng multicast được kích hoạt, các node sẽ được tạo ra với các classifiers và các replicators thêm vào cho multicast forwarding, và các link chứa các thành phần để gán nhãn giao diện vào cho các gói tin vào một node Một cơ chế multicast routing là cơ chế trong đó cây phân tán multicast đwocj tính toán trong mô phỏng NS hỗ trợ 3 cơ chế tính toán định tuyến multicast :centralised, dense mode(DM) hay shared tree mode(ST) Phương thức mrtproto{} trong lớp Simulator đặc tả cơ chế tính toán định tuyến cho centralised multicast routing, hay giao thức định tuyến mô tả chi tiết đưowcj dùng Sau đây là ví dụ khai báo hợp lệ cho multicast routing trong ns: set cmc [$ns mrtproto CtrMcast] ; # specify centralized multicast for all nodes ;# cmc is the handle for multicast protocol object $ns mrtproto DM ; # specify dense mode multicast for all nodes $ns mrtproto ST ; # specify shared tree mode to run on all nodes Trong ví dụ trên CtrMcast trả về một handle có thể đưqợc dùng dể thêm cấu hình của centralised multicast routing.Các giao thức routing khác sẽ trả về chuỗi Null.Tất cả các node trong tô pô sẽ chạy instance cả cùng một giao thức.Các giao thức định tuyến multicast có thể chạy trên một node, nhưng trong trường hợp này người dùng phải định rõ giao thức nào sẽ đi vào giao diện.Khi đó mrtproto-iifs{} được dùng Các địa chỉ mới, không dùng được định vị qua thủ tục allocaddr{} Cyber Pro !!! :)) 59 Cơ sở mạng thông tin – K4X Các agent dùng thủ tục instance join-group{} và leave-group{}, trong lớp Node để nhập và rời các nhóm multicast.Các thủ tục này có hia tham số bắt buộc, đầu tiên là các ID của agent tương ứng và tham số thứ hai xác định địa chỉ nhóm Sau đây là một ví dụ cấu hình multicast set ns [new Simulator -multicast on] ; # enable multicast routing set group [Node allocaddr] ; # allocate a multicast address set node0 [$ns node] ; # create multicast capable nodes set node1 [$ns node] $ns duplex-link $node0 $node1 1.5Mb 10ms DropTail set mproto DM ; # configure multicast protocol set mrthandle [$ns mrtproto $mproto] ; # all nodes will contain multicast protocol agents set udp [new Agent/UDP] ; # create a source agent at node 0 $ns attach-agent $node0 $udp set src [new Application/Traffic/CBR] $src attach-agent $udp $udp set dst_addr_ $group $udp set dst_port_ 0 set rcvr [new Agent/LossMonitor] ; # create a receiver agent at node 1 $ns attach-agent $node1 $rcvr $ns at 0.3 "$node1 join-group $rcvr $group" ; # join the group at simulation time 0.3 (sec) 3.1.1 Cấu hình giám sát Multicast NS hỗ trợ một module giám sát multicast có thể ghi vết các hoạt động gói tin do người dùng định nghĩa.Module tính toán số lượng gói tin đi qua định kỳ và instance ra kết quả ra các file đặc tả attach{} kích hoạt một module giám sát để instance kết quả ra file trace-topo{} ghép module giám sát vào các link filter{} cho phép tính toán các packet header, trường trong header và giá trị của trường đó Gọi filter{} lặp lại vớikết quả trong phép AND ở điều kiện lọc print-trace{} Thông báo module giám sát để bắt đầu kết xuất dữ liệu ptype() là một mảng toàn cục với tên loại gói tin(xem trong đầu ra của trace-all{}) và ánh xạ tới giá trị tương ứng.Một cáu hình đơn giản để lọc các gói tin CBR trong nhóm như sau: set mcastmonitor [new McastMonitor] set chan [open cbr.tr w] ; # open trace file $mmonitor attach $chan1 ; # attach trace file to McastMoniotor object $mcastmonitor set period_ 0.02 ; # default 0.03 (sec) $mmonitor trace-topo ; # trace entire topology $mmonitor filter Common ptype_ $ptype(cbr) ; # filter on ptype_ in Common header $mmonitor filter IP dst_ $group ; # AND filter on dst_ address in IP header $mmonitor print-trace ; # begin dumping periodic traces to specified files Cyber Pro !!! :)) 60 Cơ sở mạng thông tin – K4X Sau đây là một ví dụ đàu ra minh họa định dạng file (time, count): 0.16 0 0.17999999999999999 0 0.19999999999999998 0 0.21999999999999997 6 0.23999999999999996 11 0.25999999999999995 12 0.27999999999999997 12 3.1.2 Cấu hình đặc tả giao thức Centralized Multicast: centralized multicast là một cơ chế thực hiện rải rác của multicast tương tự như PIM-SM Một cây chia sẻ gốc - rooted shared tree Rendezvous Point (RP) đwocj xây dựng cho nhóm multicast.Việc gửi thực sự cũng như việc kết hợp thông điệp ,… để thiết lập trạng thái tại các node là không được mô phỏng.Một agent tính toán tập trung được dùng để tính toán cây forwarding và thiết lập trạng thái multicast forwarding,< S, G> ở các node liên quan khi những receiver mới gia nhập nhóm.Các gói tin dữ liệu từ sender tới nhóm là unicast đối với RP.Chú ý rằng các gói tin dữ liệu từ người gửi là unicast đối với RP thậm chí khi không có receiver đối với nhóm Phương thức kích hoạt centralised multicast routing trong mô phỏng là: set mproto CtrMcast ; set mrthandle [$ns mrtproto $mproto] # set multicast protocol Thủ tục lệnh mrtproto{} trả về một handle tới đối tượng multicast protocol Handle này có thể được dùng để điều khiển RP và boot-strap-router (BSR),chuyển đổi các loại tree-types cho một nhóm, từ các cây chia sẻ cho đến các cây đặc tả nguồn và tính toán lại đường định tuyến multicast $mrthandle set_c_rp $node0 $node1 ; $mrthandle set_c_bsr $node0:0 $node1:1 ; # set the RPs # set the BSR, specified as list of node:priority $mrthandle get_c_rp $node0 $group ; # get the current RP ??? $mrthandle get_c_bsr $node0 ; # get the current BSR $mrthandle switch-treetype $group ; # to source specific or shared tree $mrthandle compute-mroutes ; # recompute routes usually invoked automatically as needed Chú ý rằng khi nào mạng thay đổi hay unicast routing thay đổi,compute-mroutes{} có thể được gọi để tính toán lại multicast routes Tính năng tính toán lại ngay lập tức của các thuật toán tập trung có thể dẫn đến kết quả ngay trong hời gian định kỳ ngắn Dense Mode: giao thức Dense Mode (DM.tcl) là một sự thực thi của giao thức dense– mode–like Dựa vào giá trị của biến lớp DM CacheMissMode nó có thể chạy trong một hay hai chế độNếu CacheMissMode được thiết lập là pimdm (mặc định ), PIM-DM giống như luật forwarding sẽ được dùng.Như một lựa chọn, CacheMissMode cóthể được thiết lập là dvmrp (dựa vào DVMRP]) Sự khác nhau chính gữa hai phương thức là DVMRP duy trì quan hệ cha-con giữa các node để giảm số link khi các gói tin dữ liệu được quảng bá.Sự thực thi trên liên kết point-to-point như LAN và thích hợp với sự linh động của mạng (Các link up và down).Một vài node nhận dữ liệu cho một nhóm cụ thể không có các downstream receiver,gửi một prune upstream Một prune message gây ra upstream node để khởi tạo trạng thái prune ở node Cyber Pro !!! :)) 61 Cơ sở mạng thông tin – K4X đó.Trạng thái prune ngăn chặn node dó gửi dữ liệu xuôi xuống cho nhóm đó tới node đã gửi thông điệp prune ban đầu trong khi trạng thái đang hoạt động.Trong khoảng thời gian mà trạng thái prune được kích hoạt, được cấu hình thông qua biến lớp DM, PruneTimeout Một cấu hình DM điển hình như sau: DM set PruneTimeout 0.3 ; DM set CacheMissMode dvmrp ; $ns mrtproto DM # default 0.5 (sec) # default pimdm Shared Tree Mode Là chế độ đơn giản ST.tcl, là một phiên bản của giao thức multicast câychia sẻ - shared–tree multicast protocol Mảng biến lớp RP_ được đánh chỉ mục bởi nhóm xác định trong đó node là RP đối với nhóm Ví dụ: ST set RP_($group) $node0 $ns mrtproto ST Khi mô phỏng multicast được khởi tạo, giao thức được tạo ra và cài đặt dóng gói các đối tượng tại node có các multicast sender, mở gói các đối tượng tại các RP và kết nối chúng.Để tham gia một nhóm, một node gửi một thông điệp graft tới RP của nhóm.Để rời khỏi nhóm, nó gửi mộtthông điệp prune message Giao thức hiện nay không hỗ trợ sư thay đổi động và các LAN Bi-directional Shared Tree Mode BST.tcl là một phiên bản của bi–directional shared tree protocol Khi ở chế độ cây chia sẻ, các RP phải được cấu hình bằng cách dùng mảng lớp RP_.Giao thức hiện nay không hỗ trợ sư thay đổi động và các LAN 3.2 Internals of Multicast Routing 3.2.1 The classes Các lớp chính trong sự thực thi là lớp mrtObject và McastProtocol Đây là các phần mở rộng dựa trên các lớp cơ sở: Simulator, Node, Classifier, Các giao thức đặc tả cũng dùng cấu trúc dữ liệu thêm vào cho các tác vụ đặc biệt, như các cơ chế bộ đếm thời gian bởi chế độ detailed dense mode, các agent đóng gói /mở gói cho multicast tập trung,…; mrtObject class Đây là một đối tượng mrtObject (aka Arbiter) trên mỗi node có khả năng multicast Đối tượng này hỗ trợ khả năng một node chạy các giao thức định tuýen multicast bằng cách giữ một mảng các giao thức multicast được đánh chỉ mục bởi các giao diện đi vào Do đó, néu có nhiều giao thức multicast trên một node, mỗi giao diện sẽ được làm chủ bởi chỉ một giao thức Khi đó đối tượng này hỗ trợ khả năng một node chạy nhiều giao thức định tuyến multicast Node dùng một trọng taì để thực hiện hoạt động giao thức, cũng vậy đối với một instance giao thức đặc tả tại node đó, hay tất cả các instance giao thức tại ndoe đó addproto{instance, [iiflist]} thêm handle cho instance giao thức tới mảng giao thức của nó Tham số lựa chon thứ hai là danh sách giao diện đi vào được điều khiển bởi giao thức Nếu tham số này là danh sách rỗng thì giao thức sẽ được cho rằng chạy trên tất cả các giao diện.(chỉ một giao thức ) getType{protocol} Trả về handle ới instance giao thức kích hoạt tại node đó Chức năng này thường được dùng để định vị sự tương đương tại các node khác.Một xâu rỗng sẽ được trả về nếu giao thức không được tìm ra Cyber Pro !!! :)) 62 Cơ sở mạng thông tin – K4X all-mprotos{op, args} Chu trình bên trong để thực hiện “op” với “args” trên tất cả các instance giao thức kích hoạt tại node đó start{} stop{} Khởi tạo và dừng sự thực hiện của tất cả các giao thức notify{dummy} : Được gọi khi tô pô thay đổi.Đối số dummy hiện không được dùng dump-mroutes{file-handle, [grp], [src]} Kết xuất các đường định tuyến multicast tới file-handle join-group{G, S} Đánh dấu tất cả các instance giao thức gia nhập < S, G> leave-group{G, S} Đánh dấu tất cả các instance giao thức loại bỏ < S, G> upcall{code, s, g, iif} Đánh dấu bởi node trên lỗi forwarding errors trong classifier;chu trình này bật các tín hiệu instance giao thức làm chủ gao diện vào (iif) bởi việc triệu gọi chức năng handle thích hợp drop{rep, s, g, iif} Được gọi khi các gói tin mất.Có thể kích hoạt trạng thái prune trên giao diện Thêm vào đó, lớp mrtObject hỗ trợ khái niệm các nhóm nỗi tiếng- well known groups, ,Các nhóm này không yêu cầu hỗ trợ giao thức rõ ràng.Hai nhóm tiêu biểu là ALL_ROUTERS và ALL_PIM_ROUTERS được định nghĩa trước trong NS Lớp mrtObject định nghĩa hai thủ tục lớp để thiết lập và lấy thông tin về các nhóm này, - registerWellKnownGroups{name} Đặt tên cho địa chỉ nhóm nổi tiếng - getWellKnownGroup{name} Trả về địa chỉ được đánh cho nhóm nổi tiếng,hay tên Nếu tên không được đăng ký như nhóm nổi tiếng - well known group, thì nó sẽ trả về địa chỉ ALL_ROUTERS McastProtocol class: Đây là lớp cơ bản cho sự thực hiện tất cả các giao thức multicast Nó chứa các hàm multicast cơ bản: start{}, stop{} Thiết lập trạng thái status_ của instance giao thức getStatus{} Trả về trạng thái thực hiện instance giao thức này getType{} Trả về loại của giao thức được thực hiện bửi instance này upcall{code args} Được triệu gọi khi các tín hiệu node classifier signals có lỗi, dựa vào cache-miss hay wrong-iif cho các gói tin đến.Chu trình này gọi protocol specific handle, handle-{} với các tham số cho tín hiệu handle Multicast thực thi trong NS cho rằng dùng duplex links, nếu có một link đơn giản từ node 1 tới node 2,sẽ phải có một link ngược lại từ node 2 tới node 1 Có thẻ nói rằng với link nào nhận được gói tin, bộ mô phỏng multicast sẽ cấu hình link với một nhãn giao diện ở cuối mỗi link, với các nhãn gói tin là đơn nhất.Dó đó “incoming interface” được quy cho nhãn này và là một số >=0.Nhãn giao diện vào có thể là -1 trong trường hợp đặc biệt gói tin được gửi bởi một chi nhánh cục bộ tới agent node Ngược lại, một “outgoing interface” được quy cho một object handler, thường là một phần đầu của một link được cài tại một replicator 3.2.2 Mở rông cho các lớp khác trong NS Ta đã biết đầu vào của node đối với node multicast là switch_ Nó được xem ở bit cao nhất để quyết định nếu đích là gói tin multicast hay unicast Các gói tin multicast được forward tới một multicast classifier là nơi lưu giữ danh sách các replicator;Có một replicator trên một tuple Các replicator sao chép gói tin đến và forward tới tất cả các outgoing interface Cyber Pro !!! :)) 63 Cơ sở mạng thông tin – K4X Class Node: Node hỗ trợ cho multicast theo hai cách chính : Nó đáp ứng như một tiêu điểm để truy cập các giao thức multicast, trong các vùng dánh địa chỉ, quản lý và điều khiển, và thứ hai là nó cung cấp điều khiển và truy cập các giao diện trên các link gắn với node đó expandaddr{}, allocaddr{} Các thủ tục lớp cho việc quản lý địa chỉ expandaddr{} Hiện nay không dùng nữa allocaddr{} Định vị địa chỉ multicast tiếp theo có thể start-mcast{}, stop-mcast{} Khởi động và dừng multicast routing tại node đó notify-mcast{} notify-mcast{} Ra tín hiệu cho mrtObject tại node đó để tính toán lại đường định tuyến multicast sau khi tô pô thay đổi hay đường unicast cập nhật từ hàng xóm getArbiter{} Trả về một handle trỏ tới mrtObject thực hiện tại node đó dump-routes{file-handle} Truy xuất các bảng multicast forwarding table tại node đó new-group{s g iif code} Khi một gói tin dũ liệu multicast được nhận, và multicast classifier không thể tìm thấy slot tương ứng với gói dữ liệu đó.Nó gọi Node nstproc new-group{} để thiét lập một cỏng vào thích hợp join-group{a g} Một agent tại node gia nhập một nhóm , gọi “node join-group ” Node phát tín hiệu mrtObject để gia nhập nhóm và thêm nó vào danh sách của các agent tại nhóm này.Sau đó nó thêm agent tới tất cả các replicator trong nhóm leave-group{a g} Node instproc leave-group đảo nghịch quá trình được mô tả trước đó, vô hiệu hóa các outgoing interface để các receiver agent cho tất cả các replicator của nhóm, xóa các receiver agent từ danh sách cục bộ Agents_ ;Sau đó nó gọi trọng tài leave-group{} của instance add-mfc{s g iif oiflist} Node instproc add-mfc thêm một đầu vào multicast forwarding cache cho nhóm đặc biệt Cơ chế là: + Tạo một replicator mới (nếu không có cái nào tồn tại ), + Cập nhật mảng biến instance replicator_ tại node + Thêm tất cả các outgoing interface và local agent vào replicator thích hợp, + Gọi add-rep{} của multicast classifier để tạo ra một khe slot cho replicator trong multicast classifier del-mfc{s g oiflist} vô hiệu mỗi oif trong oiflist từ replicator với Danh sách các thành phần có thẻ sử dụng được tại node để điều khiển giao diện của nó được liệt kê dưới đây: add-iif{ifid link},add-oif{link if} Triệu gọi trong suốt qúa trình tạo link để chuẩn bị cho node về nhãn giao diện vào và các đối tượng giao diện ra get-all-oifs{} Trả về tất cả oifs cho node này get-all-iifs{} Trả về tất cả các iifs cho node này iif2link{ifid} Trả về các đối tượng link được đặt nhãn với nhãn của giao diện link2iif{link} Trả về nhãn giao diện đi vào cho link oif2link{oif} Trả về đối tượng link tương ứng với outgoing interface link2oif{link} Trả về outgoing interface cho link rpf-nbr{src} Trả về một handle tới node hàng xóm mà next hop của nó là src getReps{s g} Trả về một handle trỏ tới replicator so sánh với , các tham số có thể là wildcard Cyber Pro !!! :)) 64 Cơ sở mạng thông tin – K4X getReps-raw{s g} clearReps{s g} Như trên, nhưng trả về danh sách cặp Xóa tất cả các replicator cùng với Class Link and SimpleLink: Lớp này cung cấp các phương thức kiểm tra loại link, và nhãn nó được thêm vào trên gói tin cục bộ đi qua.Có một phương thức them vào đối tương giao diện trên link được gọi là if-label?{} Class NetworkInterface Đây là một connector đơn giản được đặt trên link, nó thêm vào ID nhãn của nó vào mỗi gói tin đi qua.ID của gói tin được dùng bởi node đích gắn trên link đó để nhận ra link nào gói tin đang tìm đến ID của nhãn được cấu hình bởi Link constructor.Đối tượng này là một đối tương bên trong, và không được thiết kế để vận hành bởi kịch bản mô phỏng cấ độ người dùng.Đối tượng này chỉ hỗ trợ hai phương thức: + label{ifid} gán ifid mà đối tượng này thêm vào cho mỗi gói tin + label{} Trả về nhãn mà đối tượng này thêm vào mỗi gói tin Biến lớp toàn cục, ifacenum_,chỉ rõ số ifid có thể tiếp theo Class Multicast Classifier Classifier/Multicast duy trì một multicast forwarding cache Có một multicast classifier trên mỗi node.Node chứa một tham chiếu tới classifier này trong biến instance multiclassifier_.Khi classifier này nhận một gói tin, nó sẽ kiẻm tra thông tin trong packet headers,và giao diện mà gói tin xuất phát (incoming interface hay iif);Thực hiện kiểm tra trong MFC và nhận diện slot được dùng để forward gói tin đó.Khe slot sẽ chỉ tới một replicator thích hợp Tuy nhiên, nếu classifier không có đầu vào cho nhóm này hay iif cho đầu vào khác, nó sẽ gọi thủ tục upcall new-group{} cho classifier,với một trong hai mã code để nhận ra vấn đề: + cache-miss xác đinh rằng classifier không tìm thấy một đầu vào nào + wrong-iif chỉ ra rằng classifier tìm thấy đầu vào nhưng không so sánh được giao diện với gói tin này _ Class Replicator Khi một replicator nhận mọt gói tin , nó sao chép tới tất cả các khe slot của nó, mỗi slot trỏ tới một outgoing interface đói với mỗi < source, group> Nếu không slot nào được tìm thấy, C++ replicator gọi thủ tục instance lớp drop{} để thúc đẩy hoạt động giao thức nhanh Các thủ tục instance để điều khiển các thành phần của mỗi slot: + insert{oif} Chèn một outgoing interface mới vào slot tiếp theo + disable{oif} Vô hiệu con trỏ slot tới oif + enable{oif} kích hoạt con trỏ slot tới oif + is-active{} Trả về true nếu replicator coits nhát một slot dược kích hoạt + exists{oif} Trả về true nếu con trỏ slot trỏ tới oif được kích hoạt + change-iface{source, group, oldiif, newiif} Sửa chữa đầu vào iif cho replicator 3.2.3 Protocol Internals Centralized Multicast CtrMcast là thừa kế của McastProtocol Một agent CtrMcast cần đwocj tạo ra chomoix node.Có một agent CtrMcastComp trung tâm để tính toán và cài đặt các đường định tuyến multicast cho toàn thể tô pô.Mỗi agent CtrMcast agent xử lý các lệnh chức năng, và gửi lại agent CtrMcastComp để tính lại đường đi thích hợp Cyber Pro !!! :)) 65 Cơ sở mạng thông tin – K4X + join-group{} Đăng ký thành viên mới với agent CtrMCastComp và gọi agent đó tính toán lại đường đi cho mỗi thành viên + leave-group{} Là đảo ngược của join-group{} + handle-cache-miss{} Được gọi khi không cổng forwarding thích hợp được tìm thấy với nguồn gói tin nào đó.Trong trường hợp centralized multicast,nguồn mới bắt đầu gửi các gói tin dữ liệu.Do đó, agent CtrMcast đăng ký với nguồn mới với agent CtrMcastComp.Nếu có các thành viên trong nhóm đó, tính toán cây multicast mới.Nếu nhóm là chế độ RPT (cây chia sẻ shared tree) , thì : 1 Tạo một agent đóng gói ở nguồn; 2 Tạo một agent mở gói tương ứng ở RP 3 Hai agent được kết nối bởi unicast; 4 Cổng vào trỏ outgoing interface của nó tới agent đóng gói CtrMcastComp là một agent tính toán đường định tuyến multicast tập trung + reset-mroutes{} Khởi động lại tất cả các đầu vào multicast forwarding + compute-mroutes{} Tính toán tất cả các đầu vào multicast forwarding + compute-tree{source, group} tính toán một cây multicast cho một nguồn để tìm tất cả các receiver trong một nhóm đặc biệt +compute-branch{source, group, member} Được thực hiện khi một receiver gia nhập một nhóm multicast Nó cũng có thể được gọi bởi compute-tree{} khi bản thân nó tính lại cây multicast Thuật toán khởi tạo tại receiver,tìm kiếm đệ quy liên tiếp các nexthop, cho tới khi tìm thấynguồn hay RP, hoặc tìm thấy một node lầ một phần của cây multicast liên quan.Trong suốt quá trình, nhều replicator mới và một outgoing interface sẽ được cài đặt + prune-branch{source, group, member} tương tự như compute-branch{} ngoại trừ outgoing interface là disabled;Nếu danh sách outgoing interface là rỗng tại mode này nó sẽ đi dọc cây multicast , pruning tại các node trung gian cho tới khi tìm thấy một node có một danh sách outgoing interface không rỗng Dense Mode + join-group{group} Gửi các thông điệp graft nếu không chứa các slot outgoing kích hoạt nào, (ví dụ no downstream receiver).Nếu nexthop hướng tới nguồn là một LAN, tăng bộ đếm của receiver cho nhóm đối với LAN + leave-group{group} Giảm bộ đếm LAN +handle-cache-miss{srcID group iface} Dựa vào giá trị cuả CacheMissMode gọi hoặc là handle-cache-miss-pimdm hay handle-cache-miss-dvmrp + handle-cache-miss-pimdm{srcID group iface} Nếu gói tin được nhận trên iif đúng(từ node mà nexthop chỉ tới nguồn), thì đưa gói tin ra tất cả oifs ngoại trừ oif mà trỏ về next–hop– neighbor và oifs là các LAN với node đó không được forward.Nói cách khác, nếu giao diện sai thì gửi một prune trở lại + handle-cache-miss-dvmrp{srcID group iface}truyền các gói tin ra chỉ ở các node là nexthop trỏ tới nguồn (parent) + drop{replicator source group iface} Gửi một thông điệp prune trở lại hop trước đó + recv-prune{from source group iface} Khởi động lại bộ đếm prune nếu giao diện bị prune trước đó.Nói cách khác, nó sẽ khởi động bộ đếm prune timer và sẽ disables interface; xa hơn,nếu danh sách outgoing interface rỗng, nó sẽ truyền thông điệp prune + recv-graft{from source group iface} Hủy bỏ một số bộ đếm prune timer,kích hoạt lại giao diện đã bị prune.Nếu danh sách giao diện trước đó rỗng, nó sẽ forward graft lên đường truyền Cyber Pro !!! :)) 66 Cơ sở mạng thông tin – K4X + handle-wrong-iif{srcID group iface} Được gọi khi multicast classifier mất gói tin vì đến sai giao diện + invoked new-group{} Chu trình này bị gọi bởi mrtObject instproc new-group{}.Khi gọi, nó gửi một thông điệp prune trở về nguồn 3.2.4 The internal variables Class mrtObject protocols_ :Một mảng của các handlecủa instance giao thức kích hoạt tại node mà giao thức hoạt động, được đánh dấu bởi giao diện vào- incoming interface mask-wkgroups : Biến lớp, định nghĩa mask được dùng để nhận dạng các nhóm nổi tiếng - well known groups wkgroups : Biến mảng lớp, mảng của các địa chỉ nhóm nổi tiếng, xác định bởi tên nhóm wkgroups(Allocd): là một biến đặc biệt định vị nhóm nổi tiếng được định vị cao nhất McastProtocol status_ có giá trị là “up” hay “down”, để biểu thị trạng thái thực hiện của protocol instance type_ chứa loại (tên lớp) của giao thức được thực hiện bởi instance này như DM, hay ST Simulator multiSim_ là 1 nếu mô phỏng multicast và 0 nếu khác MrtHandle_ Nắm giữ handle tới đối tượng mô phỏng multicast tập trung hóa Node switch_ Là handle cho classifier đwocj đặt ở bit cao nhất của địa chỉ đích trong gói tin để xác định khi nào là gói tin multicast (bit=1 ) hay gói tin unicast (bit = 0) multiclassifier_ Là handle trỏ tới classifier để thực hiện so sánh replicator_ Mảng được đánh chỉ mục bởi của các handle là bản sao của một gói tin multicast trên link yêu cầu Agents_ Mảng được dánh chỉ mục bởi nhóm multicast của danh sách các agent tại node cục bộ nghe hấy group outLink_ Cached list của outgoing interfaces tại node này inLink_ Cached list của incoming interfaces tại node này Link và SimpleLink iif_ Là thao tác cho đối tượng NetworkInterface được đặt trên link head_ Đối tượng đầu tiên trên link, một no-op connector.Tuy nhiên đói tượng này chứa biến instance, link_, được trỏ tới đối tượng container Link NetworkInterface ifacenum_ Biến lớp , nắm giữ số giao diện có thể được tiếp theo Cyber Pro !!! :)) 67 Cơ sở mạng thông tin – K4X Bảng tra cứu định dạng File Nam trace: # : comment – this line is ignored T : Dummy event to be used in time synchronization -t time n : node -t time -s node id -v shape (circle, box, hexagon) -c color -z size of node -a address -x x location -y y location -i label color -b label -l label -o previous color -S state (UP, DOWN, COLOR) -L previous label -p label location -P previous label location -i inside label color -I previous inside label color -e label color -E previous label color -u x velocity -U x velocity -V y velocity -T node stop time -w wireless node l : link -t time -s source id -d destination id -r transmission rate -D delay -h length -O orientation -b label -c color -o previous color -S state (UP, DOWN) Cyber Pro !!! :)) -l label -L previous label -e label color -E previous label color + : enqueue packet -t time -s source id -d destination id -e extent -a packet color attribute id -i id -l energy -c conversation -x comment -p packet type -k packet type - : dequeue packet -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type h : hop -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type -R wireless broadcast radius -D wireless broadcast duration 68 Cơ sở mạng thông tin – K4X r : receive -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type -R wireless broadcast radius -D wireless broadcast duration d : drop line -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type E : session enqueue -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type D : session dequeue -t time -s source id -d destination id -e extent -a attribute -i id Cyber Pro !!! :)) -l energy -c conversation -x comment -p packet type -k packet type P : session drop -t time -s source id -d destination id -e extent -a attribute -i id -l energy -c conversation -x comment -p packet type -k packet type a : agent -t time -s source id -d destination id -x remove agent -n agent name f : feature -t time -s source id -d destination id -x remove feature -T type -n name -a agent -v value -o previous value G : group -t time -n name -i node id -a group id -x remove from group L : lan link -t time -s source id -d destination id -o orientation -O orientation m : mark node -t time 69 Cơ sở mạng thông tin – K4X -n name -s node id -c color -h shape (circle, square, hexagon) -X remove mark R : routing event -t time -s source id -d destination id -g multicast group -p packet source id or * -n negative cache -x this route timed out -T timeout -m mode (iif or oif) v : execute tcl expression -t time -e tcl script V : set trace file version -t time -v time -a time N : use nam graph W : wireless range -t time -x X -y Y g : energy status – for future use Cyber Pro !!! :)) -t time A : hierarchical address space configuration – initilization only -t time -n hierarchy -p port shift -o port mask -c mulitcast shift -a multicast mask -h hierarchy -m node shift -s node mask c : color table configuration – initialization only -t time -i id -n color q : create packet queue – initialization only -t time -s source id -d destination id -a orientaion X : layout lan -t time -n name -r rate -D delay -o orientation -O orientation 70 ... tốt nghiệp chúng em : ? ?Nghiên cứu chương trình mô mạng NS công cụ hỗ trợ, sở để áp dụng toán ứng dụng NS để đánh giá tính khả thi tối ưu chúng mạng? ?? Chúng em xin chân thành cảm ơn thầy giáo TS.Đặng... lệnh sh install để chạy Script Install NS Sau Install xong ta Copy Flie thư mục Bin NS vào thư mục Bin Root User tuỳ cấp độ sử dụng Như ta sử dụng chương trình mơ mạng NS Ta cịn chạy NS Window... lỗi giao thức Khả mở rộng : Chương trình mơ phải dễ mở rộng cần thi? ??t phải thêm vào tác vụ cần thi? ??t 2.Phần mềm mô mạng Network Simulator : (NS) 2.1 Tổng quan NS : NS hệ thống mô mạng, đặc biệt