8.3 Cấu hình
Số lượng các hàng đợi vật lý và hàng đợi ảo có thể được thiết lập như sau:
$dsredq set numQueues_ 1
$dsredq setNumPrec 2
$dsredq configQ 0 1 10 20 0.10
Ví dụ trên xác định đặc tính RED cho một hàng đợi ảo (hàng đợi vật lý 0/ hàng đợi ảo 1)
$dsredq addPHBEntry 11 0 1
Lệnh addPHBEntry đưa một cổng vào tới bảng PHB. Trong ví dụ này, mã con trỏ 11 được ghép vào hàng đợi vật lý 0 và hàng đợi ảo 1. Trong ns, giá trị mặc định của mã con trỏ là 0, bởi vậy để điều khiển một lưu lượng ở mức có thể cần thiết trèn một PHB đầu vào cho giá trị 0 của mã con trỏ.
$dsredq meanPktSize 1500
Lệnh này thiết lập kích cỡ gói mean theo byte được sử dụng cho tính toán độ dài hàng đợi RED.
Thêm nữa, lệnh này cho phép người dùng có khả năng lựa chọn các kiểu định trình giữa các hàng đợi.
9. Agents
Các agent đóng vai trò các điểm cuối (endpoint) nơi các gói dữ liệu lớp mạng được hình thành hoặc sử dụng, chúng thường được dùng để thực hiện các giao thức ở nhiều lớp khác nhau. Lớp Agent được thực hiện một phần bằng ngôn ngữ OTcl và một phần bằng C++. Phần thực hiện bằng C++ nằm trong ~ns/agent.cc và ~ns/agent.h, còn phần thực hiện bằng ngôn ngữ hỗ trợ OTcl nằm trong ~ns/tcl/lib/ns-agent.tcl.
9.1. Trạng thái Agent
Lớp agent có trạng thái bên trong được dùng để ấn định nhiều trường khác nhau cho gói tin được mô phỏng trước khi gửi nó đi. Trạng thái này bao gồm:
addr_ địa chỉ nút của chính tôi (địa chỉ nguồn trong gói)
dst_ nơi tôi được gửi đến
size_ kích thước gói (đặt vào phần header của gói chung)
type_ dạng gói (trong phần header chung, xem packet.h)
fid_ định danh dòng IP (class trước đây trong ns-1)
prio_ trường ưu tiên IP
flags_ các cờ gói (tương tự như ns-1)
defttl_ giá trị ttl IP mặc định
Các biến này có thể bị thay đổi bởi các class xuất từ Agent.
9.2. Các phương thức của Agent
Lớp Agent hỗ trợ việc tạo và nhận các gói. Các hàm bộ phận sau đây được thực hiện nhờ lớp Agent, lớp này thường không bị chiếm dụng (override) bởi các lớp dẫn xuất:
Packet* allocpkt() cấp gói mới và ấn định trường của nó
Packet* allocpkt(int) cấp gói mới với tải tin n bytes và ấn định trường của nó.
Các hàm bộ phận sau đây cũng được định nghĩa bởi lớp Agent nhưng sẽ bị chiếm dụng bởi các lớp dẫn xuất từ Agent:
void timeout(timeout number) phương thức quá hạn lớp con
void recv(Packet*, Handler*) nhận đường dẫn nhận chính của agent
Phương thức allocpkt() được dùng nhờ các lớp dẫn xuất để tạo ra các gói. Hàm này điền vào tất cả các trường trong phần header gói chung (Section 12): uid, ptype, size và các trường trong phần header IP: src, dst, flowid, prio, ttl. Nó cũng điền 0 vào các trường của header của các cờ (flag): ecn, pri, usr1, usr2. Thông tin header của gói bất kỳ không nằm trong danh sách này thì phải được bao hàm trong lớp dẫn xuất từ Agent.
Phương thức recv() là điểm đầu vào chính của một Agent, nó nhận các gói và liên hệ với nút phía trên khi gửi gói. Trong hầu hết các trường hợp, các Agent không sử dụng đối số thứ hai (điều khiển được định nghĩa bởi nút phía trên).
9.3. Protocol Agents
Sau đây là một số agent được hỗ trợ trong bộ mô phỏng (tên của chúng trong OTcl):
TCP “Tahoe” TCP sender (cwnd = 1 on any loss)
TCP/Reno “Reno” TCP sender (with fast recovery)
TCP/Newreno sửa đổi Reno TCP sender (khôi phục nhanh sự thay đổi)
TCP/Sack1 SACK TCP sender
TCP/Fack “forward” SACK sender TCP
TCP/FullTcp more full-functioned TCP with 2-way traffic
TCP/Vegas “Vegas” TCP sender
TCP/Vegas/RBP Vegas TCP with “rate based pacing”
TCP/Vegas/RBP 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 Reno or Tahoe TCP receiver (not used for FullTcp)
TCPSink/DelAck TCP delayed-ACK receiver
TCPSink/Asym an experimental TCP sink for asymmetric links
TCPSink/Sack1 SACK TCP receiver
TCPSink/Sack1/DelAck a delayed-ACK SACK TCP receiver
UDP basic UDP agent
RTP RTP sender and receiver
RTCP RTCP sender and receiver
LossMonitor packet sink which checks for losses
IVS/Source IVS source
IVS/Receiver IVS receiver
CtrMcast/Encap “centralised multicast” encapsulator
CtrMcast/Decap “centralised multicast” de-encapsulator
Message protocol to carry textual messages
Message/Prune processes multicast routing prune messages
SRM SRM agent with non-adaptive timers
SRM/Adaptive 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
Các Agent được dùng để thực hiện các giao thức ở nhiều lớp khác nhau. Vì vậy, đối với một số giao thức vận chuyển (ví dụ, UDP) việc phân phối kích thước gói và/hoặc các thời gian khởi hành có thể được điều khiển bởi một số đối tượng riêng rẽ đặc trưng cho yêu cầu của ứng dụng. Như vậy, các agent biểu hiện là một API đối với ứng dụng. Đối với các agent được sử dụng để thực hiện các giao thức ở các lớp thấp (ví dụ, các agent định tuyến) thì kích thước và định thời đi thường được điều khiển bởi việc xử lý bản tin giao thức của chính agent đó.
9.4. Liên kết trong OTcl
Các Agent có thể được tạo ra trong OTcl, trạng thái bên trong của agent có thể thay đổi bằng cách sử dụng hàm set của Tcl và các hàm Tcl của Agent (hoặc các lớp cơ sở của nó). Chú ý rằng, một số trạng thái bên trong của Agent có thể chỉ tồn tại trong OTcl và như vậy không thể truy nhập trực tiếp từ C++.
9.4.1 Tạo và sửa đổi các Agent
Ví dụ sau đây mô tả việc tạo và sửa đổi một Agent trong OTcl:
set newtcp [new Agent/TCP] ;# create new object (and C++ shadow object)
$newtcp set window_ 20 ;# sets the tcp agent’s window to 20
$newtcp target $dest ;# target is implemented in Connector class
$newtcp set portID_ 1 ;# exists only in OTcl, not in C++
9.4.2. Các giá trị mặc định
Các giá trị mặc định của các biến bộ phận, các biến này chỉ thấy trong OTcl dùng để liên kết OTcl và C++ được khởi tạo trong file ~ns/tcl/lib/ns-default.tcl. Ví dụ, Agent được khởi tạo như sau:
Agent set fid_ 0
Agent set prio_ 0
Agent set addr_ 0
Agent set dst_ 0
Agent set flags_ 0
Thông thường, việc khởi tạo các biến này được thực hiện trong OTcl trước khi các đối tượng của chúng được tạo. Như vậy, khi một đối tượng Agent được tạo, lệnh liên kết các đối tượng sẽ dẫn đến việc các biến bộ phận tương ứng được gán giá trị mặc định.
9.4.3. Các phương thức trong OTcl
Các thủ tục được định nghĩa cho lớp Agent trong OTcl nằm trong ~ns/tcl/lib/ns-agent.tcl. Chúng bao gồm:
port định danh cổng của agent
dst-port định danh cổng đích
attach-source tạo, gắn một đối tượng vào Agent
Chia sẻ với bạn bè của bạn: |