.7 Cấu trúc gói tin

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu khả năng tương tác với mạng thực của bộ mô phỏng NS-2 (Trang 52 - 56)

Mỗi header trong ngăn xếp tương ứng với một lớp cụ thể. Thêm vào đó, một header chung cho tất cả các tầng, một trace header chứa thông tin hỗ trợ việc dò vết (trace) của người nghiên cứu. Người sử dụng có thể thêm vào các giao thức mới, tạo các header riêng cho gói tin hoặc sử dụng các header đã có bằng cách thêm trường.

Trong C++, mỗi header là một biến kiểu bản ghi, được trang bị hàm access cho phép truy xuất header tương ứng của một gói tin. Thí dụ, ta có thể sử dụng các biến con trỏ th, iph, tcph, rh để trỏ đến các header tương ứng nhờ hàm access như sau:

hdr_cmn *th = hdr_cmn::access(p); hdr_ip *iph = hdr_ip::access(p); hdr_tcp *tcph = hdr_tcp::access(p); header Packet data (option) cmn header ip header tcp header rtp header trace header ... uid_ : unique id ptype_ : pkt type

size_ : simulated pkt size ts_ : time stamp . . . src_ : source address dst_ : destination address ttl_ : time to live fid_ : flow id . . .

seqno_ : sequence number reason_ : reason for a retransmit hlen_ : header length

hdr_rtp *rh = hdr_rtp::access(p);

Khi đó, biến iph->src_ và iph->dst_ là địa chỉ IP nguồn và IP đích của gói tin p,... Các đối tượng header trên cũng được trang bị thêm hàm accessdata() để trỏ đến dữ liệu thực của gói tin.

Trong thực tế, một gói tin phải chứa dữ liệu của ứng dụng, nhưng trong mô phỏng điều này không cần thiết. Hầu hết các ứng dụng và các agent có trong NS không hỗ trợ việc tạo gói tin mang dữ liệu thực. Tuy nhiên, trong mô phỏng có tương tác với mạng thực, cần sử dụng dữ liệu thực trong gói tin NS. Khi đó ta cần sửa lại các agent hoặc sử dụng các agent có hỗ trợ việc tạo gói tin có dữ liệu thực.

3.3.5 Tác tử (Agent)

Các agent được sử dụng để cài đặt các giao thức tại các tầng khác nhau. Các agent đại diện cho các điểm cuối, nơi mà các gói tin tầng mạng được tạo ra hoặc hủy bỏ. Lớp Agent cơ sở được cài đặt trong OTcl(~ns/tcl/lib/ns- agent.tcl) và C++(~ns/agent.cc). Lớp Agent trong C++ định nghĩa các trạng thái của một agent, các trạng thái của agent được sử dụng để tạo gói tin mô phỏng trước khi được gửi đi. Các trạng thái bao gồm:

addr_ địa chỉ của agent (địa chỉ nguồn của gói tin). dst_ địa chỉ đích của gói tin.

size_ kích thước gói tin tính bằng bytes (được đặt trong phần common header – “header chung”).

type_ kiểu gói tin (trong phần common header). fid_ luồng gói tin IP.

prio_ trường ưu tiên. flags_ các cờ của gói tin. defttl_ giá trị ttl mặc định.

Tất cả các agent đều thừa kế từ lớp Agent trong C++. Các hàm thành viên sau được cài đặt trong lớp Agent và không được nạp chồng (over-ridden) bởi các lớp dẫn xuất:

 Packet* allocpkt(): cấp phát một gói tin mới và ấn định các trường của nó.

 Packet* allocpkt(int n): cấp phát một gói tin mới với kích thước n byte dữ liệu và ấn định các trường của nó.

Phương thức allocpkt() được sử dụng bởi lớp dẫn xuất nhằm tạo ra các gói tin để gửi đi. Hàm này điền thông tin vào các trường uid, ptype, size trong phần common header của gói tin và những trường src, dst, flowid, prio, ttl trong phần header của gói tin IP. Điền zero vào những trường ecn, pri, usr1, usr2 cho các cờ của header. Các thông tin còn lại sẽ được bổ sung bởi các lớp dẫn xuất từ Agent.

Những hàm sau đây cũng được định nghĩa bởi lớp Agent nhưng chúng có thể bị ghi đè bởi các lớp dẫn xuất từ Agent:

 void timeout(timeout number)  void recv(Packet*, Handler*)

Phương thức recv() nhận các gói tin từ điểm vào của một Agent, và được gọi bởi những nút gửi khi gửi đi một gói tin. Phương thức timeout xác định thời gian hết hạn của một gói tin.

Danh sách các agent khác nhau hiện tại được NS hỗ trợ tại tầng Giao vận có thể được tìm thấy ở tài liệu [5].

Cách thêm một Agent mới vào bộ mô phỏng NS

NS cho phép người sử dụng mở rộng ngăn xếp các giao thức đã có bằng cách thêm vào các agent tự xây dựng. Chúng tôi sẽ trình bày cách thêm một agent đơn giản MyAgent vào NS. Đầu tiên, chúng ta tạo một lớp đối tượng mạng trong C++ là “MyAgent” thừa kế từ lớp “Agent”. Sau đó, tạo một thể hiện của đối tượng “MyAgent” trong OTcl bằng cách định nghĩa một đối tượng liên kết có tên là “MyAgentClass” dẫn xuất từ lớp “TclClass”. Khi đó, trong chương trình mô phỏng ta có thể tạo đối tượng OTcl thông qua tên “Agent/MyAgentOtcl”

Ví dụ về thành phần C++ và đối tƣợng liên kết

Khi NS khởi động lần đầu, nó tạo ra một đối tượng “MyAgentClass”. Lớp “Agent/MyAgentOTcl” và các phương thức của nó được tạo ra trong không gian OTcl. Sau đó, người sử dụng có thể tạo đối tượng của “MyAgentClass” bằng lệnh “new Agent/MyAgentOtcl”. Khi đó phương thức “MyAgentClass::create” được gọi để tạo đối tượng “MyAgent” và trả về địa chỉ đối tượng được tạo.

Trong không gian OTcl có thể gọi các biến thành viên của đối tượng C++ “MyAgent” bằng cách sử dụng hàm liên kết (binding function) cho mỗi biến trong lớp C++. Hàm liên kết có hai tham số. Tham số thứ nhất là tên biến thành viên sẽ được tạo của lớp “Agent/MyAgentOtcl” tương ứng tham số thứ hai, là địa chỉ của biến thành viên lớp “MyAgent”. Hàm bind tạo liên kết hai chiều giữa các biến của lớp OTcl và các biến trong C++. Vì vậy, ta có thể thay đổi các tham số mô phỏng trong ngôn ngữ OTcl hoặc trong C++. Giả sử lớp “MyAgent” có hai biến là “my_var1” và “my_var2”, ta có thể nhập xuất cho hai biến này từ các kịch bản mô phỏng OTcl. Các hàm bind được đặt trong cấu tử của lớp MyAgent như sau:

Sau đó chúng ta định nghĩa một hàm thành viên “command” trong lớp “MyAgent”. Hàm này giống như một lệnh biên dịch OTcl. Khi người sử dụng gọi một hàm thành viên trong đối tượng OTcl, OTcl sẽ tìm kiếm hàm thành viên này để thực hiện. Trong trường hợp không tìm thấy hàm thành viên được gọi thì OTcl sẽ thực hiện hàm “Agent::command”

Ví dụ về lệnh biên dịch trong OTcl

3.4 Tệp vết (trace file) chứa kết quả mô phỏng

Sau khi mô phỏng kết thúc, bộ mô phỏng NS có thể sinh ra hai loại tệp vết có kiểu văn bản thông thường (plain text), mỗi dòng ứng với một sự kiện xảy ra trong mạng. Ở đây, chúng tôi chỉ xét mạng mô phỏng có dây.

3.4.1. Tệp vết có tên mở rộng .tr

Mỗi dòng trong tệp tin vết gồm 12 trường, mô tả một sự kiện xảy ra trong mạng và các thông tin liên quan đến sự kiện.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu khả năng tương tác với mạng thực của bộ mô phỏng NS-2 (Trang 52 - 56)

Tải bản đầy đủ (PDF)

(110 trang)