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
Trang 1MỤC LỤC
Phần I: Chương trình mô phỏng mạng 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
2.3.7 Timer: 25
2.3.8 Định dạng và header của gói tin (packet) 26
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
1.2 TCP Agents 43
Trang 22.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
Kết luận 71
Tài liệu tham khảo 72
Trang 3Lời mở đầu
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
Trang 4Phầ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ượngcủ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ó đượccá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ó đượcchấ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ứunghiê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 độclậ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ôngcầ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ánhnhiề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ưuthô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
Trang 54 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 giaothứ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ứcmạ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ệctruyề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ượnghoặ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
Trang 6và 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ệnkhá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 trongC++ 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ậptrì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ảithuậ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 quantrọ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 quantrọ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 gianquay 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, songlạ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:
Trang 7Sơ đồ 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 đốitượ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ứckhung 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ôngcua 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
Trang 82.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ộtgó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 :
Để 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 đếnthư 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ênWindow
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ớpphâ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ôngdị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ấpthô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ượngnà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 ứngtrong 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ươngthức định nghĩa trong lớp TclObject
Trang 9Khá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ặcthă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ọngbằ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ữngcách mà không biết trước
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ácnhau 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ọitkerror{} 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ínhxá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ầuhà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êucầu Tcl.eval( char* bp_ ) Một handle tới chính bộ đệm thông qua phương thứctcl.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
Trang 10Truyề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ếnthà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ả trongtcl_->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êndị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ênkế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ủalớ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àmthiế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ọihà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ởitạ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 chonó
Trang 11- Sau khi đối tượng bóng được tạo xong, hàm create_shadow(void) sẽ:
o Thêm đối tượng mới vào bảng băm của TclObjects
o Gắn cmd{} thành một thủ tục instance của đối tượng thông dịch mới Thủ tục instancenày gọi phương thức command() của đối tượng biên dịch
Các kỹ thuật tạo bóng ở trên chỉ được thực hiện khi người dùng tạo đối tượng TclObjectthông qua trình thông dịch
b,Xoá đối tượng TclObject: Hành động xoá delete sẽ huỷ đối tượng thông dịch và đối
tượng bóng của nó Giống như hàm thiết lập, hàm huỷ đối tượng phải gọi hàm huỷ cho lớp chamột cách tường minh như các lệnh cuối của hàm huỷ Hàm huỷ TclObject sẽ yêu cầu thủ tục thể
hiện delete-shadow, tiếp đó yêu cầu phương thức tương ứng trong trình biên dịch để huỷ đối
tượng bóng Trình thông dịch tự nó sẽ huỷ đối tượng thông dịch
Liên kết biến
Thông thường, việc truy xuất biến biên dịch hay biến thông dịch chỉ giới hạn trong mã
biên dịch hay mã thông dịch Tuy nhiên ns có cơ chế cho phép liên kết giữa biến biên dịch và
biến thông dịch, sự thay đổi của biến này sẽ được phản ánh vào biến liên kết với nó
Việc liên kết được thực hiện thông qua hàm khởi tạo của đối tượng biên dịch ns hỗ trợ 5
kiểu dữ liệu khác nhau, biến giá trị băng thông, biến thời gian, nguyên, thực và biến logic
Các phương thức command: định nghĩa và gọi
Mỗi TclObject được tạo, ns thiết lập một thủ tục instance, cmd{}, cho phép thực thi các
hàm thông qua các đối tượng biên dịch, cmd{} tự động gọi thủ tục command{} của đối tượngbiên dịch và truyền các tham số cần thiết
Người dùng yêu cầu phương thức cmd{} theo một trong hai cách: gọi tường minh hoặckhông tường minh Với cách tường minh, người dùng gọi thủ tục cmd{} và truyền tham số đầutiên là hành động cần thực hiện Với cách không tường minh, nếu có một thủ tục instance có têngiống như hành động cần thực hiện thì người dùng chỉ việc gọi thủ tục instance đó
Lớp TclClass
Lớp biên dịch này (TclClass) là một lớp trừu tượng Các lớp kế thừa từ lớp này cung cấphai chức năng: khởi tạo cây lớp thông dịch ánh xạ của cây lớp biên dịch và cung cấp các phươngthức để tạo các TclObject mới Mỗi lớp kế thừa được liên kết với một lớp biên dịch trong cây lớpbiên dịch
Lớp TclCommand
Lớp này chỉ cung cấp các kỹ thuật cho ns để xuất các lệnh đơn giản tới trình thông dịch,
mà sau đó được chạy trong phạm vi toàn cục bởi trình thông dịch
Lớp InstVar
Lớp này định nghĩa các phương thức và các kỹ thuật để liên kết một biến thành viên C++trong đối tượng bóng với một biến instance trong đối tượng thông dịch tương ứng Giá trị củabiến có thể truy xuất bởi mã biên dịch hay mã thông dịch tại bất kỳ thời điểm nào
Có 5 lớp tương ứng với 5 loại biến của Ns: lớp InstVarReal, lớp InstVarTime,InstVarBandwidth, lớp InstVarInt, lớp InstVarBool, tương ứng liên kết với biến thực, thời gian,băng thông, số nguyên, và biến logic
Trang 122.3 Các mô phỏng cơ sở
2.3.1 Lớp mô phỏng (class Simulator)
Hệ thống mô phỏng được thực hiện bởi lớp Tcl Simulator Lớp này cung cấp các giao tiếpcho phép cấu hình quá trình mô phỏng và lựa chọn loại lịch sự kiện (event scheduler) Các script
mô phỏng thường bắt đầu bằng việc tạo một instance của lớp Simulator Tiếp theo nó gọi các
hàm để tạo các nút mạng, cấu hình topo và các thuộc tính khác của mạng Trong ns version 2 có
một lớp thừa kế từ lớp Simulator gọi là OldSim nhằm cung cấp khả năng tuơng thích ngược với
ns version 1
2.3.1.1 Khởi tạo mô phỏng
Khi một đối tượng giả lập mới được tạo trong tcl, thủ tục khởi tạo thực hiện các hànhđộng sau:
Khởi tạo định dạng gói
Tạo một bộ lập lịch
Tạo một “null agent”
Khởi tạo định dạng gói thiét lập các trường offset trong các gói sử dụng bởi toàn bộ trình
mô phỏng Bộ lập lịch (scheduler) chạy theo kiểu điều khiển sự kiện.Null agent được tạo ra vớilời gọi sau:
set nullAgent_ [new Agent/Null]
NullAgent thường được dùng để làm sink cho các gói muốn loại hay làm đích các góikhông nhận dạng được chuyển tới
2.3.1.2 Các bộ lập lịch và các sự kiện.
Trình mô phỏng hoạt động theo kiểu hướng sự kiện Có bốn bộ lập lịch, mỗi bộ sử dụngcác cấu trúc dữ liệu khác nhau: danh sách liên kết đơn linked-list, heap, calendar queue (ngầmđịnh) và kiểu một đặc biệt được gọi là “real time” Bộ lập lịch thực hiện chọn sự kiện tiếp theogần nhất, hoàn thành nó và sau đó xử lý sự kiện tiếp theo Đơn vị sử dụng cho lập lịch là giây.Hiện tại, trình mô phỏng chạy đơn tuyến , chỉ một sự kiện được chạy ở một thời điểm Nếu cónhiều hơn một sự kiện được lập lịch để chạy đồng thời thì việc chạy chúng được thực hiện trên cơ
sở sự kiện nào được lập lịch trước sẽ được chạy trước Các sự kiện mô phỏng không bao giờđược sắp xếp lại bởi bộ lập lịch Một sự kiện thường bao gồm một “firing time” và một hàm quản
lý (handler function)
Hai kiểu đối tượng được thừa kế từ lớp cơ sở Event là packets và “events” Một event là một thủ tục được lập lịch chạy ở một thời điểm xác định Đó là một chuỗi được sử dụngtrong các script mô phỏng
at-Bộ lập lịch kiểu danh sách (List Scheduler): sử dụng một cấu trúc danh sách liên kết đơn.
Danh sách này tổ chức theo trật tự thời gian, theo đó việc chèn và xoá sự kiện yêu cầu phải quétdanh sách để tìm điểm vào thích hợp Khi chọn sự kiện tiếp theo để chạy cần cắt điểm đầu củadanh sách khỏi danh sách Cách thực hiện này đảm bảo thực hiện các sự kiện trong dãy FIFO củadòng các sự kiện
Trang 13Bộ lập lịch kiểu vun đống (heap scheduler): thực hiện lập lịch theo cấu trúc vun đống Cấu trúc
này cao cấp hơn so với cấu trúc danh sách cho một số lượng lớn các sự kiện, thời gian chèn vàxoá n sự kiện là O(log n)
Bộ lập lịch kiểu (calendar queue): sử dụng cấu trúc dữ liệu giống lịch năm để bàn, ở đó các sự
kiện cùng tháng/ngày của nhiều năm có thể được ghi cùng một ngày
Bộ lập lịch thời gian thực: đồng bộ việc thực hiện các sự kiện với thời gian thực Nó hiện tại
vẫn được đang phát triển
2.3.2 Node và truyền tải gói tin (packet forwarding)
2.3.2.1 Các cơ sở node (Node basics)
Cơ sở nguyên thuỷ để tạo node là:
set ns [new Simulator]
$ns node
Thủ tục instance node xây dựng một node bên ngoài các đối tượng phân lớp đơn giản Node tự
bản thân nó là một lớp đơn chuẩn trong OTcl Mặc dù vậy hầu hết các bộ phận của node đều làcác TclObject Cấu trúc tiêu biểu của một node (unicast) như sau:
Hình 1: Cấu trúc unicast node trong nsCấu trúc đơn giản này bao gồm 2 TclObject: một phân lớp địa chỉ (classifier_) và mộtphân lớp cổng (dmux_) Chức năng của các phân lớp này là để phân loại các gói tin đến chínhxác các agent hoặc liên kết ra.Hầu hết các node chứa ít nhất các bộ phận sau:
Một địa chỉ hoặc id_, tự động tăng đều thêm 1 (bắt đầu từ 0) trong không gian tên môphỏng mỗi khi một node được tạo ra
Danh sách các node lân cận (neighbor_)
Trang 14Khi một trình mô phỏng sử dụng rounting multicast, bit cao nhất trong địa chỉ cho biết địachỉ đó là địa chỉ multicast hay địa chỉ unicast Nếu bit này là 0 thì địa chỉ là unicast, ngược lại địachỉ đó là multicast.
Cấu trúc trong của một node multicast
Hình 2: Cấu trúc multicast node trong ns
2.3.2.2 Các phương thức node: cấu hình node
Thủ tục để cấu hình mỗi node được phân lớp trong
$node reset sẽ reset tất cả các tác tử tại node
Quản lý số hiệu cổng và địa chỉ
Thủ tục $node id trả về số hiệu node Số này tự động tăng và gắn tới mỗi node lúc khởitạo bởi phương thức lớp Simulator, $ns node Lớp Simulator cũng lưu một mảng biến instance,node_, được đánh số bởi node id, và chứa một tham chiếu tới node với id đó
Thủ tục $node agent (port) trả về handle của agent tại port xác định Nếu không có agentnào tại số hiệu cổng chỉ định sẵn sàng, thủ tục trả về một xâu rỗng
Thủ tục alloc-port trả về số hiệu cổng tiếp theo có thể được sử dụng Nó dùng một biếninstance, np_, để đánh dấu số hiệu cổng chưa được xác định
Thủ tục add-route và add-routes, dùng bởi unicast routing để thêm các đường đi vàoclassifier_ Cú pháp được dùng là:
Trang 15$node add-route <destination id> <TclObject>
$node add-routes <destination id> <TclObjects> được dùng để thêm nhiều router tới
cùng một đích
Ngược lại với thủ tục add-routes{} là delete-routes{}.
Quản lý agent
Với một <agent>, thủ tục attach{} sẽ thêm agent vào danh sách của agents_ của nó, gắn
số hiệu cổng với agent và đặt địa nguồn cho nó, đặt đích của agent ở entry{} của nó, thêm mộtcon trỏ tới bộ giải tích hợp cổng tại node (dmux_) vào agent tại slot tương ứng trong phân lớpdmux_
Ngược lại, detach{} sẽ xoá tác tử từ danh sách agents_, và bỏ điểm đích của agent, điểmvào trong dumx_ của node vào nullagent
Xác định các node lân cận
Mỗi node giữ một danh sách các node gần nó trong biến instance, neighbor_ Thủ tụcadd-neighbor{} thêm một node hàng xóm vào danh sách Thủ tục neighbors{} trả về danh sáchnày
2.3.2.3 Giao diện cấu hình node
Simulator::node-config{} điều tiết tính linh hoạt và cấu trúc module của các node khácnhau định nghĩa trong cùng lớp Node cơ sở
Giao diện cấu hình node bao gồm hai phần Phần đầu làm việc với cấu hình node, phầnhai tạo node với kiểu được định sẵn
Cấu hình node về bản chất là định nghĩa các đặc tính khác nhau của node trước khi tạochúng Chúng có thể gồm kiểu của cấu trúc địa chỉ sử dụng trong mô phỏng, định nghĩa các bộphận của mạng cho mobilenode, bật hoặc tắt tuỳ chọn dấu ở các mức Agent/Router/MAC, chọnkiểu của giao thức router cho các node không dây hoặc hạn chế chế độ hoạt động
2.3.2.4 Phân lớp ( Classifier )
Chức năng của một node khi nó nhận một gói là kiểm tra các trường của gói, thường làđịa chỉ đích, và có thể là địa chỉ nguồn Nó có thể ánh xạ giá trị tới một đối tượng giao diện ra đó
là nơi nhận tiếp theo của gói này
Trong ns công việc này được thực hiện bởi đối tượng classifier đơn.Mỗi đối tượngclassifier sẽ được đặt tại một vị trí xác định để kiểm tra việc truyền tải gói tin khi vận chuyển qua
node Một node trong ns dùng nhiều kiểu đối tượng classifier khác nhau của phân lớp cho các
mục đích khác nhau
Phân lớp địa chỉ
Phân lớp địa chỉ trợ giúp chuyển gói unicast Nó áp đặt một phép dịch bit và thực hiệngắn mặt nạ tới địa chỉ đích của gói để tạo một số hiệu slot Số hiệu slot này được trả về từ phươngthức classify()
Phân lớp Multicast.
Phân lớp multicast phân lớp các gói theo cả (nhóm) địa chỉ đích và nguồn Nó duy trì mộtbảng ánh xạ cặp nguồn/nhóm tói các số hiệu slot Khi một gói đến chứa một cặp nguồn/nhóm
Trang 16chưa xác định tới phân lớp, nó yêu cầu một thủ tục OTcl là Node::new-group{} để thêm mộtđiểm vào trong bảng của nó.
Phân lớp đa đường (MultiPath)
Đối tượng này được tạo ra để trợ giúp truyền trên nhiều đường có chi phí (cost) bằngnhau, ở đây node sẽ có nhiều đường chi phí bằng nhau tới cùng một đích, và dùng tất cả chúngđồng thời Đối tượng này không kiểm soát bất kỳ một trường nào trong gói Với mỗi gói thànhcông, nó đơn giản trả về trường slot tiếp trong chế độ làm tròn robin
Phân lớp băm
Đối tượng này được dùng để phân lớp một gói như các thành phần của một luồng Đúngnhư tên của nó chỉ ra, phân lớp băm sử dụng bảng băm để gắn các gói với các luồng Các gói cóthể được gắn tới các luồng dựa vào định danh luông (flow ID), địa chỉ đích, địa chỉ nguồn/đích,hoặc sự kết hợp địa chỉ nguồn /đích cộng với định danh luồng
Phân lớp băm được tạo ra với một tham số nguyên chỉ định kích thước khởi tạo của bảngbăm Kích thước hiện tại của bảng băm có thể thay đổi với phương thức resize Khi đã tạo, mộtbiến instance shift_ và mask_ được khởi tạo với giá trị NodeShift và NodeMask hiện tại tươngứng của trình mô phỏng Những giá trị này nhận được từ đối tượng AddrParams khi một phân lớpbăm được khởi tạo Phân lớp băm sẽ thất bại nếu cấu trúc AddrParams không được khởi tạo
Phân lớp băm nhận các gói, phân lớp theo các điều kiện luồng của chúng, và nhận cácphân lớp slot chỉ định node tiếp theo có thể nhận gói đó
Replicator
Replicator khác với các phân lớp khác, nó không dùng chức năng phân lớp Nó đơn giảnchỉ dùng các phân lớp như một bảng có n slot, nó sử dụng phương thức resv() để tạo n bản copycủa gói rồi phát tới n đối tượng được tham chiếu trong bảng
Để hỗ trợ truyền gói multicast, một phân lớp nhận một gói multicast từ nguồn S cho nhóm
G tính một hàm băm h(S,G) cho một số hiệu slot trong bảng đối tượng phân lớp
2.3.2.5 Module routing và tổ chức phân lớp
Node trong ns thực sự là một tập các phân lớp Node đơn giản nhất chứa chỉ một phân lớpđịa chỉ và một phân lớp cổng Khi muốn mở rộng chức năng một node, nhiều phân lớp đượcthêm vào node cơ sở
Phương thức để quản lý trường hợp này là thông qua lớp thừa kế Ví dụ, nếu một nodemuốn trợ giúp phân lớp routing, một cách đơn giản là thừa kế một node Node/Hier từ node cơ sở
và chèn các phương thức đặt phân lớp để chèn các phân cấp Phương thức này hoạt động tốt khi
các khối chức năng mới là độc lập và không bị “xáo trộn”(arbitrarily) tuỳ ý Ví dụ cả kiến trúc
routing và adhoc routing dùng tập phân cấp của của chúng Thừa kế yêu cầu có Node/Hier hỗ trợtrước, và Node/Mobile sau Sẽ có vấn đề khi muốn node adhoc routing hỗ trợ hierarchicalrouting Trong trường hợp này, phải sử dụng đa thừa kế để giải quyết, nhưng nó trở nên khôngkhả thi khi số khối chức năng tăng lên
Phương thức duy nhất để giải quyết vấn đề này là phép hợp đối tượng Node cơ sở cầnđịnh nghĩa một tập các giao diện cho các phân lớp truy nhập và tổ chức Những giao diện này cóthể là:
Cho phép các module routing đơn thực thi các phân lớp của chúng để chèn các phân lớpcủa chúng vào node
Trang 17 Cho phép các khối tính toán đường đưa các thông tin định tuyến tới các phân lớp trong tất
cả các module routing cần thông tin này
Cung cấp một điểm đơn quản lý các module routing đã tồn tại
Ngoài ra, nên định nghĩa một giao diện đồng nhất cho các module routing để nối tới cácgiao diện node, cũng như cung cấp một hướng tiếp cận để mở rộng chức năng node
Module routing
Mỗi module routing trong ns bao gồm 3 khối chức năng:
Routing agent chuyển đổi gói routing với các hàng xóm
Route logic sử dụng thông tin thu lượm bởi routing agent để thực hiện tính toán đườngthực
Các phân lớp nằm trong node Chúng dùng bảng routing đã được tính để thực hiện chuyểngói
Khi tính toán một giao thức routing mới, không cần thực hiện tất cả các khối đó
Khi một giao thức routing mới gộp nhiều hơn một khối chức năng, đặc biệt khi nó chứaphân cấp của chính nó, nó muốn có một đối tượng khác, mà gọi là routing module, quản lý tất cảcác khối chức năng đó và giao tiếp với node để tổ chức các phân lớp của nó
Hình sau mô tả mối liên quan chức năng giữa các đối tượng này:
Hình 3: Mudule routingCác module routing có thể có quan hệ trực tiếp với các khối tính toán đường, route logicvà/hoặc routing agent Mặc dù vậy, khối tính toán đường có thể không được cài trực tiếp cácđường của chúng thông qua module routing, bởi vì có thể tồn tại các module khác chú tâm tìmcác đường mới
Một module routing bao gồm 3 chức năng lớn:
Khởi tạo các liên kết của nó tới một node thông qua register{}, và loại bỏ liên kết quaunregister{} Thường trong register{}, một module routing
(1) nói cho node biết liệu nó có muốn biết các cập nhật đường và gắn kết các agentvận chuyển
(2) tạo các phân lớp của nó và cài chúng trong node Trong unregister{} mộtmodule routing thực hiện công việc ngược lại: xoá các phân lớp và bỏ các kết nốicủa nó tới bộ cập nhật đường của node
Trang 18 Nếu module routing muốn biết các cập nhật đường, node sẽ thông tin cho module thông
qua RtModule::add-route{dst,target} và RtModule::delete-route{dst, nullagent}
Nếu module routing muốn thức hiện gắn kết và huỷ bỏ gắn kết các agent vận chuyển
trong node, node sẽ thông tin cho module thông qua: RtModule::attach{agent, port} và
RtModule::detach{agent, nullagent}
Giao diện node
Để liên kết với các giao diện của module routing, node cung cấp các giao diện tương ứng:
* Để biết module nào đăng ký khi khởi tạo, lớp Node giữ một danh sách các module như mộtbiến lớp Giá trị ngầm định của danh sách này chứa chỉ module routing cơ sở Lớp Node cungcấp hai proc sau để xử lý danh sách module này:
Node::enable-module{[name]} Nếu module RtModule/[name] tồn tại, proc này đặt
[name] vào danh sách module
Node::disable-module{[name]} Nếu [name] là trong danh sách module, xoá nó khỏi danh
* Để cho các module routing muốn cập nhật routing, một đối tưọng node cung cấp các hàm:
Node::rouite-notify{module} Thêm module vào danh sách cập nhật module.
Node::unreg-route-notify{module} xoá module khỏi danh sách cập nhật routing.
Các thủ tục sau cung cấp các móc nối trên liên kết của các agent vận chuyển:
Node::port-notify{module} Thêm module vào danh sách thông báo kết nối agent.
Node::unreg-port-notify{module} Xoá module từ danh sách liên kết agent.
* Node cung cấp các thủ tục sau để xử lý phân cấp địa chỉ và cổng của nó:
Node::insert-entry{module, clsfr, hook} chèn phân lớp clsfr vào điểm vào của node Nó
cũng liên kết phân lớp mới với module do đó nếu phân lớp này bị loại sau đó, module sẽ bị huỷ
bỏ đăng ký Nếu hook được chỉ ra là một số, phân cấp đã tồn tại sẽ được chèn vào slot hook củaphân lớp mới
Node::install-entry{module, clsfr, hook} khác với Node::insert-entry ở chỗ nó xoá phân
lớp đã tồn tại ở điểm vào của node, bỏ đăng ký mọi module routing tương ứng, cài đặt phân lớpmới tại điểm vào Nếu hook được cung cấp, phân lớp cũ được nối vào chuỗi phân lớp, nó sẽ nốichuỗi này vào slot hook của phân lớp mới Như trên, nếu hook bằng target, clsfr sẽ được đánhdấu như một đối tượng được thừa kế từ Connector thay cho một phân lớp
Node::install-demux{demux, port} đặt phân cấp demux được cung cấp như một giải đa
hợp ngầm định Nếu port được cung cấp nó đặt bộ giải đa hợp sẵn có vào slot port của node mới.Chú ý, trong trường hợp này, không xoá bộ giải đa hợp đã tồn tại
2.3.3 Các liên kết :
Các liên kết đơn
Phần này sẽ mô tả cách tạo các liên kết để kết nối các node và hoàn thiện topology của mạng trong giới hạn mô tả các liên kết điểm-điểm đơn giản Cũng như node được cấu tạo từ các phân lớp, một liên kết đơn được xây dựng từ một chuỗi các bộ kết nối (connector)
Trang 19Lớp Link là một lớp trong OTcl, cung cấp một vài primitive (hàm nguyên thuỷ) đơn giản.
Lớp SimpleLink cung cấp khả năng để kết nối hai node bằng liên kết điểm-điểm ns cung cấp thủ
tục simplex-link{} để xây dựng các liên kết đơn hướng từ một node tới một node khác Cú pháp
mô tả như sau:
set ns [new Simulator]
$ns simplex-link (node0)( node1)(bandwidth)(delay)(queue_type)
Lệnh này tạo một liên kết từ node0 tới node1 với băng thông bandwidth và độ trễ delay Liên kếtnày dùng một queue các kiểu queue_type
Cấu trúc của một liên kết đơn giản:
Hình 4: Cấu trúc Link trong ns
head_ là điểm vào của liên kết, nó chỉ tới đối tượng đầu tiên của liên kết.
queue_tham chiếu tới hàng đợi chính các phần tử của liên kết
link_ tham chiếu tới phần tử thực sự làm mô hình cho liên kết này, về đặc tính trễ và
băng thông của liên kết
ttl_tham chiếu tới phần tử xử lý thời gian sống của mỗi gói
drophead_ tham chiếu tới một đối tượng là đầu của hàng đợi các thành phần bị bỏ qua bởi
xử lý liên kết
enqT_ tham chiếu tới phân tử đánh dấu các gói đang vào queue_
deqT_ tham chiếu tới phần tử đánh dấu các gói đang rời khỏi queue_
drpT_ tham chiếu tơi phần tử đánh dấu các gói đã bị bỏ từ queue_
rcvT_ tham chiếu tới phần tử đánh dấu các gói đã nhận được bởi node tiếp theo.
Thủ tục duplex-link{} xây dựng một liên kết hai hướng từ hai liên kết đơn giản
2.3.3.1 Các thủ tục xây dựng các liên kết và các liên kết đơn
Link procedures: lớp Link được thực thi hoàn toàn trong Otcl Lớp OTcl SimpleLink dùng lớp
C++ LinkDelay để mô phỏng độ trễ trong phân phát các gói tin Các thủ tục trong lớp Link là:
head{} trả về handle của head_
queue{} trả về handle của queue_
link{} trả về handle cho phần tử trễ, link_
up{} đặt liên kết trạng thái là “up” trong dynamics_ element
down{} ngược của up{}
up?{} trả về trạng thái liên kết Trạng thái là g “up” hay “down”; là “up” nếu
liên kết động được cho phép
all-connectors{} áp đặt mọi hành động chỉ định lên mọi connector trên liên kết.
Trang 20 cost{} đặt giá cho liên kết
cost?{}trả về giá của liên kết.
SimpleLink Procedures: Lớp (Otcl) SimpleLink thực hiện một liên kết điểm-điểm đơn giản với
một độ trễ và một queue_ tương ứng Nó được yêu cầu từ lớp (Otcl cơ sở) Link như sau:
Class SimpleLink -superclass Link
SimpleLink instproc init { src dst bw delay q { lltype "DelayLink" } } {
$self next $src $dst
$self instvar link_ queue_ head_ toNode_ ttl_
set queue_ $q
set link_ [new Delay/Link]
$link_ set bandwidth_ $bw
$link_ set delay_ $delay
$queue_ target $link_
$link_ target [$toNode_ entry]
set ttl_ [new TTLChecker]
$ttl_ target [$link_ target]
Một connector sẽ nhận một gói, thực hiện vài chức năng, và phát gói đó tới hàng xóm của
nó, hoặc loại bỏ gói Có nhiều loại connector trong ns, mỗi loại thực hiện một chức năng khácnhau:
Networkinterface : dán nhãn các gói với định danh giao diện đến - nó được dùng bởi cácgiao thức định tuyến multicast
DynaLink : đối tượng mà gate traffic phụ thuộc vào link là up hay down
DelayLink : đối tượng mà mô hình hoá tính chất độ trễ và băng thông của liên kết
Queues : kiểu output buffer gắn vào link trong một “real” router trong một mạng
TTLChecker : giảm ttl của mỗi gói tin khi nó được nhận
2.3.3.3 Phân cấp đối tượng
Lớp cơ sở dùng đẻ mô tả liên kết gọi là Link
SimpleLink Object : dùng để thể hiện một liên kết đơn hướng Không có biến trạng thái hay
tham số cấu hình gắn với đối tượng này
DelayLink Object : xác định tổng thời gian yêu cầu cho một packet băng qua một link Nó được
xác định bởi size/bw + delay với size là kích thước gói tin, bw là bandwidth của link và delay là
độ trễ khi truyền của link
2.3.4 Quản lý queue và lập lịch gói
Queue biểu diễn các vị trí là nơi mà có thể lưu các gói hay drop Packet scheduling đề cậptới các quyết định phục vụ hay là drop gói tin Hiện tại có các kiểu drop-detail queueing (FIFO),
Trang 21quản lí bộ đệm RED, CBQ và một vài loại Fair Queueing như Fair Queueing (FQ), StochasticFair Queueing (SFQ) hay Deficit Round-Robin (DRR)
Lớp Queue không chứa trạng thái trong Thường chúng là các đối tượng theo dõi đặc biệt.Thành phần qlim_ được xây dựng để điều khiển giới hạn trên của queue, nhưng nó không được
tự đặt bởi lớp Queue; nó phải được dùng bởi các lớp queue con, nếu chúng cần giá trị này Thành
phần bocked_ là một biến logic, xác định liệu queue có khả năng để gửi một gói ngay lập tức tới hàng xóm của nó hay không Khi một queue bị block, nó có thể enqueue các gói nhưng nó không
thể gửi chúng
2.3.4.2 Queue Blocking
Một queue có thể bị block hoặc unblock bất kỳ lúc nào Thường một queue bị block khi một packet đi qua giữa nó và hàng xóm của nó Một blocked queue sẽ còn bị block nếu như
downstream link vẫn bận và queue đang có ít nhất một packet được gửi Một queue chỉ được
unblock khi hàm resume của nó được gọi, thông thưòng đó là khi không có packet nào vào queue.
Khi một đối tượng Queue được tạo, nó sẽ bao gồm một đối tượng QueueHandler (qh_)được khởi tạo để chứa một tham chiếu tới đối tượng Queue mới Khi một Queue nhận một
packet, nó gọi phiên bản lớp con của hàm enque với packet đó Nếu queue không bị block nó sẽ
gửi packet và gọi hàm deque chỉ định để kết thúc packet được truyền, block queue và gửi packettới hàng xóm
2.3.4.3 Lớp PacketQueue
Lớp Queue có thể thực hiện quản lý bộ đệm và lập lịch nhưng không thực hiện các côngviệc mức thấp trên một queue xác định
Lớp PacketQueue duy trì một linked-list của các packet, và thường được dùng bởi các
chiến lược điều độ riêng biệt và quản lý bộ đệm một cách kỷ luật để giữ trật tự các packet Chiếnlược điều độ riêng biệt hoặc quản lý bộ đệm có thể sử dụng một vài đối tượng PacketQueue LớpPacketQueue duy trì số lượng hiện tại các packet được lưu trong queue, nó được phương thứclength() trả về Hàm enque đặt packet chỉ định ở cuối queue và cập nhật biến thành phần len_.Hàm deque trả về packet ở đỉnh queue và xoá nó khỏi queue, hoặc trả về NULL nếu queue rỗng.Hàm lookup trả về packet thứ r từ đỉnh queue, hoặc NULL nếu không có Hàm remove xoá gói ởđịa chỉ đã cho trong queue Nó sẽ khiến chương trình kết thúc bất thường nếu gói đó không tồntại
2.3.4.4 Các loại đối tượng queue.
Một đối tượng queue là một lớp thông thường của đối tượng có khả năng giữ và đánh dấuhoặc bỏ qua các packet khi chúng đi qua topology được mô phỏng
Các tham số cấu hình được dùng cho đối tưọng queue là:
Limit_ kích thước queue trong các packet.
Blocked_ ngầm định là false, nó là true nếu queue bị block
Trang 22 unblock_on_resume_ đặt ngầm định là true, chỉ ra một queue nên tự unblock ở thời
điểm gói cuối cùng đã gửi xong
2.3.5 Các trễ và các liên kết
Các trễ thể hiện thời gian mỗi gói qua một liên kết Một dạng cụ thể của đối tượng này(“dynamic link”) cũng hiển thị khả năng hỏng của một liên kết Tổng thời gian yêu cầu cho mộtgói vượt qua một liên kết được định nghĩa theo: s/b+d trong đó s là kích thước gói, b là tốc độ củaliên kết (bits/s), d là trễ liên kết (s) Sự thực hiện các trễ liên kết được gắn chặt chẽ với thủ tụckhối hoá queue
Đối tượng này trợ giúp một insproc-like, $object dynamic, để đặt các biến của nó,dynamic_ Biến này xác định liệu liên kết có là liên kết động hay không
Với các liên kết không động, phương thức này thực hiện bởi việc nhận một gói p và lậplịch hai sự kiện Giả sử hai sự kiện này gọi là E1 và E2, và sự kiện E1 được lập lịch xảy ra sauE2 E1 được lập lịch để xảy ra khi có packet gửi tới node với độ trễ để hoàn tất việc gửi packet
hiện tại E1 thường gắn với đối tượng Queue, do đó nó sẽ được unblock E2 thể hiện sự kiện
packet được chuyển đến nút lân cận tiếp theo Sự kiện E2 xảy ra một số giây sau E1 là trễ liênkết
Khi liên kết là động, và nhận một packet p, thì nó sẽ lập lịch cho E1 để có thể unblockqueue tại thời điểm thích hợp Tuy nhiên, E2 được lập lịch chỉ khi p là gói duy nhất hiện đangđược truyền Nếu không, phải có ít nhất một gói đang được truyền trên liên kết mà phải đượcnhận trước p tại E2 Do đó gói p được giữ trong Transit queue , itq_ Khi gói ngay trước p đượcnode lân cận nhận, đối tương DelayLink sẽ lập lịch một sự kiện cho chính nó để tác động tới E2.Tại thời điểm thích hợp, phương thức handle() của nó sẽ trực tiếp gửi p đến đích của nó Phươngthức nội tại schedule_next() sẽ điều độ các sự kiện cho các gói khi truyền tại thời điểm thích hợp
II.3.6 Agent:
Agent là các điểm cuối (endpoint) nơi các gói của tầng mạng được tạo ra hoặc sử dụng,agent còn được dùng để cài đặt các giao thức của các tầng khác nhau Lớp Agent có một phầnđược cài đặt bằng OTcl và một phần được cài đặt bằng C++
2.3.6.1 Trạng thái agent
Lớp Agent C++ chứa đầy đủ các trạng thái nội tại để gắn với các trường khác nhau củacác gói tin mô phỏng được gửi đi Bao gồm:
addr_ Địa chỉ của node (địa chỉ nguồn trong các gói dữ liệu)
dst_ Địa chỉ đích mà gói sẽ được gửi tới
size_ packet kích thước (bytes), thường đặt trong header của gói
type_ type kiểu gói (trong header gói)
fid_ định danh luồng
prio_ the trường mức ưu tiên IP
flags_ packet các cờ
defttl_ default giá trị thời gian sống ngầm định IP ttl
Các giá trị này có thể được thay đổi trong các lớp dẫn xuất của Agent, tuy nhiên không phải tất cảchúng đều cần thiết trong một agent cụ thể nào đó
2.3.6.2 Các phương thức của agent.
Trang 23Lớp agent hỗ trợ việc sinh và nhận gói Các hàm thành phần sau được thực hiện bởi lớpAgent trong C++, và các lớp dẫn xuất thường không override các phương thức này.
Packet* allocpkt() cấp phát một gói mới và gán các trường của nó
Packet* allocpkt(int) cấp phát gói mới với một tải dữ liệu n byte và gán các trường của nó
Các hàm thành viên sau của lớp Agent thường được override bởi lớp dẫn xuất:
void timeout(timeout number) lớp con chỉ định phương thức timeout
void recv(Packet*, Handler*) agent nhận receiving nhận đường dẫn
2.3.6.3 Các Agent giao thức:
Trong ns có cung cấp các agent sau: (tên trong OTcl)
TCP a “Tahoe” TCP sender (cwnd = 1 on any loss)
TCP/Reno a “Reno” TCP sender (with fast recovery)
TCP/Newreno a modified Reno TCP sender (changes fast recovery)
TCP/Sack1 a SACK TCP sender
TCP/Fack a “forward” SACK sender TCP
TCP/FullTcp a more full-functioned TCP with 2-way traffic
TCP/Vegas a “Vegas” TCP sender
TCP/Vegas/RBP a Vegas TCP with “rate based pacing”
TCP/Vegas/RBP a Reno TCP with “rate based pacing”
TCP/Asym an experimental Tahoe TCP for asymmetric links
TCP/Reno/Asym an experimental Reno TCP for asymmetric links
TCP/Newreno/Asym an experimental Newreno TCP for asymmetric links
TCPSink a Reno or Tahoe TCP receiver (not used for FullTcp)
TCPSink/DelAck a TCP delayed-ACK receiver
TCPSink/Asym an experimental TCP sink for asymmetric links
TCPSink/Sack1 a SACK TCP receiver
TCPSink/Sack1/DelAck a delayed-ACK SACK TCP receiver
UDP a basic UDP agent
RTP an RTP sender and receiver
RTCP an RTCP sender and receiver
LossMonitor a packet sink which checks for losses
IVS/Source an IVS source
IVS/Receiver an IVS receiver
CtrMcast/Encap a “centralised multicast” encapsulator
CtrMcast/Decap a “centralised multicast” de-encapsulator
Message a protocol to carry textual messages
Message/Prune processes multicast routing prune messages
SRM an SRM agent with non-adaptive timers
SRM/Adaptive an SRM agent with adaptive timers
Tap interfaces the simulator to a live network
Null a degenerate agent which discards packets
rtProto/DV distance-vector routing protocol agent
2.3.6.4 Các ví dụ: các Agent TCP, TCPSINK
Lớp TCP biểu diễn một TCP sender đơn giản Nó gửi dữ liệu tới một agent TCPSink và
xử lý các tín hiệu báo nhận (acknowledgments) của nó Nó có một đối tượng riêng biệt được kếthợp với nó mà biểu diễn yêu cầu của một ứng dụng
Trang 24Tạo một agent
Đoạn mã OTcl sau đây tạo ra một agent TCP và cấu hình nó:
set tcp [new Agent/TCP] ; # tạo agent gửi
$tcp set fid_ 2 ; # thiết lập ID luồng tầng IP
set sink [new Agent/TCPSink] ; # tạo agent nhận
$ns attach-agent $n0 $tcp ; # đặt sender lên nút $n0
$ns attach-agent $n3 $sink ; # đặt receiver lên nút $n3
$ns connect $tcp $sink ; # thiết lập kết nối TCP
set ftp [new Application/FTP] ; # tạo một ứng dụng nguồn FTP
$ftp attach-agent $tcp ; # kết hợp FTP với TCP sender
$ns at 1.2 "$ftp start" ; # sắp xếp để FTP bắt đầu vào thời điểm 1.2 giây
Bắt đầu một agent
Agent TcpAgent trong ví dụ được bắt đầu khi nguồn sinh FTP của nó nhận lệnh start ởthời điểm 1.2 giây Thao tác start là một thủ tục instance được định nghĩa trong lớp
Application/FTP Nó được định nghĩa trong ~ns/tcl/lib/ns-source.tcl như sau:
Application/FTP instproc start {} {
[$self agent] send -1
}
Trong trường hợp này, agent tham chiếu đến agent TCP đơn giản của chúng ta và send –1tương tự như gửi một file lớn tùy ý
Lời gọi đến send cuối cùng dẫn đến việc TCP sender tạo ra các gói
Xử lý đầu vào tại nơi nhận
Nhiều TCP agent có thể được sử dụng cùng với lớp TCPSink Lớp này định nghĩa cácphương thức recv() và ack()
Phương thức recv() chèn lên phương thức Agent::recv() (chỉ đơn thuần là hủy bỏ gói nhậnđược) Nó cập nhật trạng thái bên trong với số thứ tự của gói nhận được (và do đó yêu cầu biếnoff_tcp_ được khởi tạo đúng) Sau đó, nó tạo ra một tín hiệu báo nhận (acknowledgment) cho góinhận được
Phương thức ack() cho phép truy nhập đầy đủ tới các trường header của gói bao gồm sựtruy nhạp riêng biệt tới TCP header, IP header, Flags header và các header chung Lời gọi tớisend() dẫn ra phương thức Connector::send()
Xử lý các phản hồi tại nơi gửi
Một khi phía bên kia của TCP đơn giản nhận được dữ liệu và tạo ra một ACK, nơi gửithường phải xử lý ACK Trong agent TcpAgent, điều này được làm như sau:
/*
* main reception path - should only see acks, otherwise the
* network connections are misconfigured
Trang 25} }
Cài đặt các Timer
Như sẽ được trình bày trong chương tiếp theo, các lớp timer cụ thể phải được kế thừa từ
lớp cơ sở trừu tượng TimerHandler được định nghĩa trong ~ns/timer-handler Các instance của
những lớp con này sau đó có thể được sử dụng như những timer của các agent khác nhau Cácagent có thể muốn override phương thức Agent::timeout() (phương thức này không làm gì cả).Trong trường hợp Tahoe TCP agent, hai timer được sử dụng: một timer gửi trễ delsnd_timer_ vàmột timer phát lại rtx_timer_
2.3.6.5 Tạo một Agent mới
Để tạo một agent mới, phải làm những việc sau đây:
1 Quyết định cấu trúc kế thừa của nó, và tạo ra các định nghĩa lớp phù hợp
2 Định nghĩa các phương thức recv() và timeout()
3 Định nghĩa những lớp timer cần thiết nào đó
4 Định nghĩa các hàm liên kết OTcl
5 Viết mã OTcl cần thiết để truy nhập agent (Phần 10.6.4)
Ở đây ta quan tâm một số thao tác xử lý thời gian sau:
$timer sched <delay> Dừng một sự kiện nào đó mà có thể đã được lập lịch và lập
lịch lại sự kiện sau thời gian <delay>.
$timer resched <delay> Tương tự lệnh trên Có thêm các API của C++
Trang 26$timer cancel Dừng các sự kiện đã được lập lịch.
$timer distroy giống cancel
$timer exprire gọi cho một time-out Tuy nhiên thủ tục time-out phải được
định nghĩa trong các lớp con.
2.3.8 Định dạng và header của gói tin (packet)
Các đôi tượng trong lớp Packet là các đơn vị cơ sở cho việc trao đổi dữ liệu giữa các đốitượng trong hệ thống mô phỏng Các giao thức mới có thể định nghĩa các header của riêng mìnhhoặc có thể mở rộng header có sẵn với bằng việc thêm vào các trường mới
Các loại header mới được khai báo vào trong hệ mô phỏng bằng cách định nghĩa một cấutrúc dữ liệu C++ với các trường cần thiết, định nghĩa một lớp tĩnh để cung cấp khả năng liên kếtvới OTcl, sau đó thay đổi một số đoạn mã khởi tạo của hệ mô phỏng để chỉ ra địa chỉ lệch củaheader mới so với các header khác trong packet
Khi hệ mô phỏng được khởi tạo thông qua OTcl, người dùng có thể lựa chọn sử dụng mộttập con của các loại packet có sẵn, điều này giúp tiết kiệm bộ nhớ trong quá trình mô phỏng Mặcđịnh hầu hết các loại packet đều được kích hoạt Việc quản lý xem loại packet nào đang đượckích hoạt trong quá trình mô phỏng được quản lý bởi một đối tượng quản lý các header củapacket Đối tượng này cung cấp một phương thức OTcl cho phép chỉ ra header nào được sử dụngtrong quá trình mô phỏng Việc sử dụng một trường trong header không được kích hoạt sẽ dẫnđến lỗi nghiêm trọng (fatal) thoát chương trình
2.3.8.1 Thêm một kiểu header mới
Giả sử muốn thêm một kiểu header gói mới gọi là newhdr, thực hiện các bước sau:
Tạo một cấu trúc mới định nghĩa các trường dữ liệu thô (raw field - dữ liệu tạo nên dữliệu mới), định nghĩa offset_ và các phương thức truy cập
Định nghĩa các hàm thành phần cho các trường cần thiết
Tạo ra một lớp tĩnh để cung cấp khả năng liên kết với OTcl, thực hiện bind_offset() tronghàm khởi tạo của của nó
Soạn thảo ~ns/tcl/lib/ns-packet.tcl để cho phép khuôn dạng gói mới
2.3.8.2 Lựa chọn các header gói gộp vào trong chương trình giả lập
Ngầm định, ns gộp tất cả các header của tất cả các giao thức có trong ns vào mỗi packettrong chương trình giả lập Việc này dẫn đến dung lượng mỗi packet tăng thêm khoảng 1.9 KB!Nếu chỉ gộp các header của các giao thức thông thường như IP, TCP thì dung lượng tăng thêmchỉ khoảng 100 byte Do đó chỉ nên gộp các kiểu header cần dùng
Để gộp chỉ các header mong muốn khi thực hiện giả lập, trước hết loại bỏ các kiểu header
đã được gôp trước khi khởi tạo trình giả lập Sau đó gộp tập các header chỉ định như sau (ví dụ IP
và TCP):
remove-all-packet-headers
add-packet-header IP TCP
set ns [new Simulator]
2.3.8.3 Các lớp liên quan đến packet
Có 4 lớp C++ để xử lý các packet và các header là: Packet, p_info, PacketHeader vàPacketHeaderManager Lớp Packet mô tả các kiểu gói trong giả lập Lớp packet_info giữ tất cả
Trang 27các dạng text cho các tên gói Lớp PacketHeader là lớp cơ sở cho mọi header LớpPacketHeaderManager là một lớp được dùng để tập hợp và quản lý các header.
2.3.9 Mạng LAN
Đặc tính của mạng LAN khác với các liên kết điểm-điểm Một mạng bao gồm nhiều liênkết điểm - điểm không thể hiện được các thuộc tính chia sẻ và tương tranh của LAN Để môphỏng những thuộc tính này, cần tạo ra một kiểu node mới, LanNode Các cấu hình và giao diệncho LanNode được thực hiện như sau:
2.3.9.1 Cấu hình Tcl
Giao diện để tạo và cấu hình một LAN hơi khác so với các liên kết điểm-điểm Ở mứcđỉnh, lớp OTcl Simulator cung cấp một phương thức mới gọi là make-lan Các tham số chophương thức này giống phương thức duplex-link, ngoại trừ rằng make-lan chỉ chấp nhận mộtdanh sách các node như một tham số đơn thay vì 2 tham số như trong duplex-link
Simulator instproc make-lan {nodes bw delay lltype ifqtype mactype chantype}
Các tuỳ chọn để tạo Lan chỉ ra kiểu của tầng liên kết (LL), hàng đợi, tầng MAC (Mac), vàtầng vật lý (Channel) Ví dụ tạo ra một mạng LAN (ethernet) CSMA/CD như sau:
$ns make-lan "$n1 $n2" $bw $delay LL Queue/DropTail Mac/Csma/Cd
Câu lệnh trên tạo ra một LAN với kiểu cơ bản cho tầng liên kết, hàng đợi DropTail, vàCSMA/CD cho tầng MAC
2.3.9.2 Các thành phần của LAN
LanLink chứa các chức năng của 3 tầng thấp nhất trong stack mạng: Link Layer (LL),Medium Access Control Layer (MAC), Physical Layer (PHY)
Hình sau, mô phỏng stack mạng mở rộng tạo giả lập của mạng LAN trong ns
Hình 5: Giả lập mạng LAN trong ns
Một packet đi xuống lần lượt qua tầng liên kết (Queue và LL), tầng MAC (Mac) và tầngvật lý (Channel đến Classifier/Mac) Tiếp theo packet sẽ đi ngược trở lên qua tầng Mac và LL
Tại đáy của stack, tầng vật lý bao gồm hai đối tượng Channel và Classifier/Mac Đốitượng Channel mô phỏng chia sẻ đường truyền và các kỹ thuật truy cập đường truyền của bêngửi Tại phía nhận, Classifier/Mac chịu trách nhiệm chuyển và (có thể) lặp các packet tới các đốitượng MAC nhận
Trang 28Tuỳ thuộc vào kiểu của tầng vật lý, tầng MAC phải chứa một tập nhất định các chức năngnhư, cảm nhận sóng mang (carrier sense), phát hiện xung đột, tránh xung đột, Vì các chức năngnày ảnh hưởng tới cả bên gửi và bên nhận nên chúng được thực hiện trong một đối tượng Mac.Với bên gửi, đối tượng Mac phải sử một giao thức truy cập đường truyền nhất định trước khitruyền packet lên channel Với bên nhận, tầng MAC chịu trách nhiệm chuyển packet tới tầnglink.
Lớp Channel
Lớp Channel mô phỏng giao truyền các packet của tầng vật lý Lớp Channel cơ bản cungcấp khả năng mô phỏng xung đột trên đường truyền Nó cho phép tầng MAC thực hiện cảm nhậnsóng mang, xung đột, tắc nghẽn Nếu có nhiều cuộc truyền xảy ra đồng thời, channel sẽ bật cờxung đột Bằng việc kiểm tra cờ này, đối tượng MAC có thể thực hiện phát hiện xung đột và xử
lý nó
Đối tượng Channel chỉ đặt tín hiệu busy của nó trong khoảng thời gian được yêu cầu bởiđối tượng MAC Nó cũng lập lịch các gói để phân phát tới các đối tượng MAC đích sau thời giantruyền cộng với trễ truyền lan
Lớp MacClassifier
Lớp MacClassifier kết thừa lớp Classifier để cài đặt kỹ thuật broadcast đơn giản Nó thayđổi phương thức recv() như sau: vì việc lập lại các gói thường tốn kém, nên thường một góiunicst sẽ được phân loại bởi địa chỉ đích MAC macDA_ và chuyển trực tiếp tới đối tượng MACvới địa chỉ này Nếu địa chỉ của đối tượng đích không tìm thấy hoặc nếu địa chỉ đích MAC làbroadcast BCAST_ADDR, gói sẽ được nhân bản và gửi tới mọi MAC trên LAN trừ MAC nguồn
Lớp MAC
Đối tượng Mac mô phỏng các giao thức truy cập đường truyền cần thiết trong các môitrường chia sẻ đường truyền như là mạng không dây, LANs, do việc truyền và gửi luôn đi kèmvới nhau trong hầu hết các loại tầng MAC nên đối tượng MAC được cài đặt cả 2 khả năng này
Tại bên gửi, đối tượng Mac làm nhiệm vụ thêm header MAC và truyền packet lênchannel Tại phía nhận đối tượng Mac nhận không đồng bộ các gói từ classifier của tầng vật lý.Sau khi xử lý giao thức MAC, nó chuyển gói dữ liệu tới tầng link
Lớp LL (tầng link)
Đối tượng LL mô phỏng các giao thức liên kết dữ liệu Nhiều giao thức có thể thực hiệntrong lớp này như là phân đoạn (fragmentation) packet, tái hợp (reassembly) packet, giao thứcliên kết tin cậy
Một chức năng khác của tầng link là đặt các địa chỉ đích MAC trong header MAC củapacket Công việc này hiện tại yêu cầu 2 vấn đề tách biệt: tìm kiếm địa chỉ IP của nút theo (next-hop-node) và tìm địa chỉ MAC ứng với địa chỉ này Để đơn giản, ánh xạ ngầm định giữa các địachỉ MAC và IP là tương ứng 1-1
Lớp LanRouter
Ngầm định chỉ có một đối tượng LanRouter cho mỗi LAN Nó được tao ra khi mộtLanNode mới được khởi tạo Với mỗi node trên LAN, đối tượng LL có một con trỏ tớiLanRouter, do đó nó có khả năng để tìm trạm tiếp cho packet được truyền trên LAN
Packet* LL::sendto(Packet* p, Handler* h)
{
Trang 29int nh = (lanrouter_) ? lanrouter_->next_hop(p) : -1;
.
}
2.3.9.3 Routing trong LAN.
Khi tạo một LAN trong ns, một nút ảo LAN (“virtual LAN node”) LanNode được tạo ra.
LanNode chứa các đối tượng chia sẻ trong LAN: Channel, Classifier/Mac và LanRouter Với mỗinút trong LAN, một đối tượng LanIface được tạo ra LanIface chứa mọi đối tượng dành riêng chomỗi nút: Queue, LL, Mac, v.v LanNode chỉ có ý nghĩa cho giải thuật chọn đường, nó có rất ítđiểm chung với nút bình thường Một trong những điểm chung đó là 2 loại nút này chia sẻ cùngmột không gian id nút (Node ID-space) Nếu chọn đường phân cấp (hierarchical routing) được sửdụng, LanNode cũng được gán một địa chỉ phân cấp như mọi nút khác Đối với vấn đề chọnđường (tĩnh) của NS, LanNode được coi như một nút nối vào tất cả các nút khác trong LAN Liênkết nối giữa LanNode và các nút của LAN cũng là “ảo” (VLink), giá mặc định cho một liên kếtnhư vậy là ½, do đó, giá cho việc truyền từ một nút này đến một nút khác trong LAN được tính là1
2.3.10 Cấu trúc địa chỉ hoá trong ns
Không gian địa chỉ có thể xem như một trường liên tục các n bit, ở đó n có thể là khácnhau tuỳ mỗi yêu cầu của việc mô phỏng Giá trị ngầm định của n là 16 Giá trị cực đại của n cóthể đặt tới 32
Không gian địa chỉ gồm 2 phần node-id và port-id Các bít cao được gán làm địa chỉ nút,id_, các bít thấp hơn còn lại được được gán cho port-id hoặc định danh cho agent gắn với node.Trong các bít cao, có một bít được dùng cho multicast Không gian địa chỉ bao gồm 32 bít, vàkhông gian port-id (định danh cổng) bao gồm 32 bít 32 bít địa chỉ cao dành cho node-id, MSBcho multicast và 32 bít địa chỉ thấp cho port-id Ngoài ra không gian địa chỉ cũng có thể đặt trongđịnh dạng phân cấp, bao gồm nhiều mức của phân cấp địa chỉ
set ns [new Simulator]
Nó cũng có thể được gọi tường minh như sau:
Trang 30gán trong 3 mức của phân cấp – các bít (10 11 11) cho 3 mức đó – hoặc (9 11 11) nếu kích hoạtmulticast
Ví dụ một cấu hình như sau: $ns set-address-format hierarchical 2 8 15
Trong đó có 2 mức phân cấp được chỉ định và gán 8 bít cho mức một và 15 bít cho mức 2
Dạng rút gọn của lệnh này có dạng như sau:
expend-port-field-bits<#bits for portid#>
expend-port-field-bits kiểm tra và đưa ra lỗi như sau nếu yêu cầu kích thước cổng không thể điềutiết (số lượng các bít rỗi là không đủ để đáp ứng) hoặc nếu kích thước cổng là nhỏ hơn hoặc bằngkích thước cổng đã tồn tại
2.3.10.5 Lỗi khi đặt định dạng địa chỉ
Các lỗi trả về cho cả set-address-format và expend-port-field-bits nguyên thuỷ trong cáctrường hợp sau:
Nếu số các bít chỉ định là nhỏ hơn 0
Nếu vị trí bít xung đột (số kề nhau của các bít trống được yêu cầu là không tìm thấy)
Nếu tổng số các bít yêu cầu là vượt quá MAXADDRSIZE_
Nếu expend-port-field-bits đòi số bít nhỏ hơn hoặc bằng số bít của kích thước cồng đã tồntại
Nếu số mức phân cấp không tương ứng với số các bít số các bít chỉ định (cho mỗi level)
Phần II.Công cụ hình ảnh hoá mô phỏng : NAM
1.Giới thiệu chung về NAM :
1.1 Tổng quan
Nam là một công cụ mô phỏng hoạt động dựa trên Tcl/Tk dành cho việc quan sát mộtcách trực quan các vết mô phỏng và vết dữ liệu(Tracedata packet) gói tin trong thực tế
Trang 31Nguyên lý thiết kế nam đã tạo ra một bộ mô phỏng chuyển động có khả năng đọc các tập dữ
liệu chuyển động lớn và có thể mở rộng vừa đủ vì vậy nó có thể được sử dụng trong các tìnhhuống mạng trực quan khác nhau Nam được thiết kế để đọc các câu lệnh sự kiện đơn giản từmột File Trace lớn Để thực hiện đối với dữ liệu hoạt động lớn cần phải thiết lập một lượngnhỏ thông tin được lưu giữ trong bộ nhớ Các câu lệnh sự kiện được giữ trong file và đọc lại
từ File đó bất cứ khi nào thấy cần thiết
Bước đầu tiên sử dụng Nam là tạo ra File vết File vết chứa thông tin về Topology :
Nodes, links, cũng như các vết gói Thường thì các File vết được tạo ra bởi ns Đối với Ns,
người sử dụng có thể tạo các cấu hình Topology, đưa ra các thông tin, và các vết gói sử dụng
các sự kiện vết trong ns Tuy nhiên, bất kì ứng dụng nào cũng có thể tạo ra một File vết của
nam
Trong khi các File vết được tạo ra, nó có thể được hoạt động bởi nam Khi khởi độngNam sẽ đọc File vết, tạo Topology, hiện cửa sổ, đưa ra nếu cần và dừng lại tại thời điểm 0.Thông qua giao diện người sử dụng, Nam cung cấp điều khiển thông qua nhiều yếu tố của sựhoạt động
Nó thực hiện lại các sự kiện từ một File vết của nam (nam Trace File ) File này có thể sẽrất lớn khi thời gian mô phỏng dài hoặc các sự kiện xảy ra mạnh
Để chạy nam ta làm như sau :
Trang 331.2.Các lựa chọn dòng lệnh của NAM:
Các lựa chọn dòng lệnh:
-g : Định dạnh hình học của cửa sổ khởi động
-t : Chỉ định Nam sử dụng tkgraph, và định dạng đầu vào file nam cho tkgraph
-i : [ Thông tin cho lựa chọn này có khi không đúng] Chỉ ra tỉ lệ (thực tế) triệu giây đối với tỉ lệ cập nhật màn hình
-N : Chỉ ra tên ứng dụng của ví dụ nam Tên ứng dụng này có lẽ sau đó được sử dụng trong đồng bộ cùng cấp
-c : Kích thước lớn nhất của bộ nhớ cache được sử dụng để lưu trữ các đối tượng active khi
thực hiện hoạt động ngược lại
-f : Tên của các File khởi động được load khi khởi động Trong file này, người dùng có thể định nghĩa các chức năng sẽ được gọi trong ?
-a : Tạo các ví dụ riêng biệt của Nam
-p : In ra định dạng File vết của Nam
-S : Cho phép đồng bộ hoạt động X vì vậy dễ dàng hơn cho việc tìm lỗi đồ hoạ Đối với hệ thống UNIX chỉ chạy X
<tracefile> là tên của File chứa dữ liệu vết được hoạt động Nếu <tracefile> không thểđọc, nam sẽ cố gắng mở <tracefile>
1.3 Giao diện người sử dụng:
Khi bắt đầu khởi động lên, việc đầu tiên Nam làm là khởi động cửa sổ đơn Bạn có nhiều hoạtđộng chạy trong cùng một ví dụ Nam Trên cungd của tất cả các cửa sổ của Nam là một MenuBar Đối với cửa sổ đơn của Nam có các Menu “File” và “Help” Dưới “File” có một câu lệnh
New để tạo một ns topology sử dụng nam editor(Đang làm chức năng này), một cây lệnh Open
cho phép bạn mở các File vết đang tồn tại, một câu lệnh WinList mở ra một cửa sổ liệt kê tên của tất cả các File vết đang có, và một câu lệnh Quit để thoát khỏi Nam Thư mục “Help” chứa các
màn hình giúp đỡ và một câu lệnh hiện lên Version và thông tin bản quyền
“View” menu có 4 nút :
New view : Tạo một view mới của cùng một hoạt động Người dùng có thể
cuộn hay Zoom trên new view Tất cả các view sẽ được hoạt động một cách
đồng bộ
Show monitor checkbox : Nếu được chọn, sẽ hiện lên một bảng tại nửa dưới
của cửa sổ, ở đó các màn hình sẽ được hiển thị
Show autolayout checkbox : Nếu được chọn, sẽ hiện lên một bảng ở nửa dưới
của cửa sổ, chứa các hộp input và một nút cho việc tự động đưa ra các điều chỉnh Hộp này sẽ không được kích hoạt khi sử dụng các liên kết layout.
Show annotation checkbox : Nếu được chọn, sẽ hiện lên một hộp danh sách tại
nửa dưới của cửa sổ, sẽ được sử dụng để liệt kê các chú thích trong qúa trìnhtăng thời gian
Trang 34Dưới Menu Bar, có một bar điều khiển chứa 6 nút, một nhãn, và một thanh cuộn nhỏ.
Chúng có thể được nhấn vào theo bất cứ thứ tự nào
( << ) – Rewind : Khi được nhấn, hoạt động sẽ quay lại tỉ lệ 25 lần tỉ lệ cập
nhật màn hình hiện thời
( < ) – Backward play : Khi được nhấn, hoạt động sẽ quay lại với thời gian
giảm
( Hình vuông ) – Stop : Khi được nhấn, hoạt động sẽ dừng lại.
( > ) – Forward play : Khi được nhấn, hoạt động sẽ chuyển đến trước với thời
gian tăng
( >> ) – Fast Forward : Khi được nhấn, thời gian hoạt động sẽ chuyển đến tốc
độ 25 lần tốc độ cập nhật màn hình hiện thời
(Biểu tượng chữ V ) : Đóng cửa sổ hoạt động hiện thời
Nhãn thời gian: Thể hiện thời gian hoạt động hiện thời ( ví dụ : Thời gian mộ phỏng như
trong File vết) Rate Slider : Điều khiển tỉ lệ cập nhật màn hình Tỉ lệ hiện thời được hiển thị trong
nhãn trên con trượt (Slider)
Dưới thanh điều khiển đầu tiên, có Màn hiển thị chính, nó chứa một thanh công cụ và ô
quan sát chính với hai thanh cuộn Tất cả new view được tạo ra bởi menu “Views/New view” sẽ
có 3 công cụ này Thanh công cụ chứa 2 nút Zoom Nút với mũi tên chỉ lên là phóng to, nút có
mũi tên xuống là thu nhỏ Hai thanh cuộn được sử dụng để mở rộng màn hiển thị hoạt động.Nhấn chuột trái lên bất kì đối tượng nào trong khung nhìn chính sẽ hiện ra cửa sổ thông tin Đốivới các đối tượng là gói tin và tác tử (agent), có một nút “monitor” trên cửa sổ hiển thị Nhấn vào
đó ta sẽ thấy hiện ra khung màn hình (nếu nó không có ở đó), và thêm vào một màn hình tới đốitượng Đối với các đối tượng là Link, sẽ có một nút “Graph” Nhấn vào nút đó sẽ có một cửa sổhiển thị, ở đó người sử dụng có thể lựa chọn giữa vẽ một hình với sự sử dụng băng thông hay vẽ
một link mất hình của một simplex edge của Duplex Link.
“Views/ Show monitors” : Tất cả màn hình sẽ được thiết lập Một màn hình nhìn nhu một nút lớntrong khung Chỉ các gói tin và Agent hiện thời mới có các màn hình
Một màn hình gói tin thể hiện : Kích thước, id, và thời gian gửi Khi gói tin đến được đích, mànhình vẫn ở đó, nhưng sẽ thông báo rằng gói tin ẩn_invisible Một màn hình Agent thể hiện têncủa Agent và khi có bất kì biến vết nào liên quan đến agent này, chúng cũng được thể hiện luônlúc đó
Thanh trượt thời gian : Nhìn giống như một cái thước kẻ, với một con trượt TIME (tagTIME) thả dọc theo thước Khi ta nhìn thấy con trượt TIME, hoạt động hiện thời sẽ được thể hiệntrong nhãn thời gian trong thanh điều khiển(control bar) ở trên Cạnh bên trái của thanh trượt thểhiện thời gian sự kiện sớm nhất trong file vết và cạnh phải thể hiện thời gian trễ nhất Nhấn chuột
trái lên thước( không phải con trượt) có cùng ảnh hưởng như Rewind và Fast Forward, phụ thuộc
vị trí ấn chuột
Khung Automatic Layout có khi là hiện hoặc ẩn Nếu là hiện, nó sẽ ở dưới thanh trượt thời gian.
Nó có 3 hộp Input và một nút relayout Khi người dùng ấn Enter trong hộp Input, hay ấn vào nút
Relayout , số các tương tác sẽ được thực hiện
Dưới cùng là Hộp danh sách thông báo, ở đó các thông báo được hiển thị Thông báo là một
cặp (time,string), mô tả một sự kiện xảy ra tại một thời điểm Nháy đúp vào một thông báo trong
hộp danh sách sẽ đưa Nam đến thời gian khi mà thông báo được ghi lại Khi con trỏ ở trong hộp
Trang 35danh sách, nháy chuột phải ta sẽ có ba lựa chọn: Add, Delete, Info để thêm, xoá và hiển thị thông
báo
1.3 Các câu lệnh bàn phím:
1 <return> - Typing a <return> will pause nam if it’s not already paused If nam is paused,
<return> will step the animation one simulated clock tick (If your keyboard autorepeats, holding down <return> is a goodway to slow-step through the animation.)
2 ’p’ or ’P’ - Pause but not step if paused
3 ’c’ or ’C’ - Continue after a pause
4 ’b’ or ’B’ - Decrease animation time for one screen update interval
5 ’r’ or ’R’ - Rewind
6 ’f’ or ’F’ - Fast Forward
7 ’n’ or ’N’ - Jump to time of next event in the tracefile
8 ’x’ or ’X’ - Undo the last rate change
9 ’u’ or ’U’ - Undo the last time slider drag
10 ’>’ or ‘.’ Increase the granularity (speed up) by 5%
11 ’<’ or ’,’ Decrease the granularity (slow down) by 5%
12 <space bar> - Toggle the pause state of nam
13 ’q’, ’Q’ or <control-c> - Quit
1.4 Tạo ra các hoạt động bên ngoài từ Nam :
Các hoạt động của Nam có thể được ghi và chuyển sang file Gifs hay chuyển động MPEG
Để ghi lại các khung và hoạt động, khởi động Nam với File vết và thiết lập ở chỗ bạn muốn
nó bắt đầu và thêm các thông số khác (bước tỉ lệ, kích cỡ, …) Chọn “Record Animation” từ FileMenu để bắt đầu ghi các khung Mỗi bước hoạt động được ghi trong một cửa sổ thả X (X-
Window) gọi là “nam%d.xwd” ở đó %d là số khung Các File này có thể sau đó được ghép lại
trong file chuyển động GIFs hay MPEGs với các các công cụ xử lý thích hợp
Dưới đây là một đoạn Script chuyển các File này thành một File chuyển động định dạng Gif:
Chú ý xwdtoppm, ppmtogif, và gifmerge không phải của Ns.
1.5 Network Layout:
Trong Nam, Một topology được nhận dạng bởi sự chuyển đổi của các đối tượng Node.Nhưng để thể hiện topology trong một cách có thể hiểu được, chúng ta cần phải có kĩ thuật
layout Hiện nay Nam cung cấp 3 phương pháp Layout :
Người sử dụng nhận dạng layout bởi các hướng của Link Một hướng kết nối là mộtgóc giữa cạnh và đường nằm ngang, trong khoảng [0;2] Trong quá trình Layout,