Đây là vấn đề thứ hai trong việc xác định cấu trúc mạng. Mục 5 chúng ta đã mô tả cách tạo ra một node trong cấu trúc ns, mục này chúng ta sẽ mô tả cách tạo ra các liên kết để liên kết các node và hoàn thiện cấu trúc mạng trong ns. Ở đây chúng ta sẽ hạn chế chỉ mô tả liên kết điểm điểm đơn. ns hỗ trợ nhiều môi trường khác nhau, bao gồm mô phỏng đa truy nhập LAN sử dụng các liên kết đơn hình lưới, các mô phỏng thực tế của môi trường truyền thông không dây và truyền thông quảng bá khác. Chúng sẽ được mô tả trong các mục riêng biệt. Liên kết CBQlink được hình thành từ các liên kết đơn và là dạng liên kết phức tạp hơn nhiều và cũng không được mô tả trong mục này.
connector, đối tượng connector, bao gồm cả mô tả tóm tắt về các connector liên kết thông dụng.
Lớp Link là lớp đứng độc lập trong OTcl, nó cung cấp một vài nguyên tố ban đầu đơn giản. Lớp SimpleLink cho phép nối 2 node bằng một liên kết điểm - điểm. ns cung cấp thủ tục simplex-link{} để tạo nên liên kết đơn hướng từ một node này tới một node khác. Liên kết này nằm trong lớp SimpleLink. Dòng lệnh dưới đây mô tả cú pháp của một liên kết một chiều:
set ns [new Simulator]
$ns simplex-link <node0> <node1> < bandwidth> <delay> <queue_type>
Lệnh để tạo liên kết từ <node0> đến <node1>, với đặc tính <bandwidth> và <delay> cụ thể. Liên kết sử dụng một loại hàng đợi <queue_type>. Thủ tục này cũng thêm vào liên kết bộ kiểm tra TTL . 5 biến số định nghĩa cho một liên kết bao gồm:
head_ điểm bắt đầu liên kết, trỏ đến đối tượng đầu tiên trong liên kết.
queue_ tham chiếu tới phần tử hàng đợi chính của liên kết. Các liên kết đơn thường có một hàng đợi trên liên kết. Các loại liên kết phức tạp hơn có thể có nhiều phần tử hàng đợi trên liên kết.
link_ tham chiếu đến phần tử thực sự hình thành nên liên kết, xét trên các khía cạnh của các đặc tính trễ và băng thông của liên kết.
ttl_ tham chiếu đến phần tử điều khiển ttl trong tất cả mỗi gói.
drophead_ tham chiếu đến một đối tượng đứng đầu hàng đợi của các phần tử thực hiện xử lý loại bỏ liên kết.
Hình 6.1: Các thành phần cấu trúc của tuyến liên kết một hướng:
Thêm vào đó, nếu nếu biến $traceAllFile của bộ mô phỏng được định nghĩa, thủ tục sẽ đưa thêm phần tử tìm dấu thực hiện việc tìm dấu vết khi một gói được xếp vào hàng đợi và loại bỏ khỏi hàng đợi từ queue_. Hơn nữa, việc tìm vết đặt một phần tử tìm vết sau drophead_. Các biến sau cho các cách tìm vết trong các phần tử tìm vết:
enqT_ Tham chiếu đến phần tử tìm vết các gói đi vào queue_.
deqT_ Tham chiếu đến phần tử tìm vết các gói rời khỏi queue_. drpT_ Tham chiếu đến phần tử tìm vết các gói được loại bỏ khỏi queue_. rcvT_ Thám chiếu đến phần tử tìm vết các gói được nhận bởi node tiếp theo. Lưu ý rằng, nếu người sử dụng cho phép tìm dấu nhiều lần trên liên kết, các biến này sẽ chỉ lưu giữ một tham chiếu đến phần tử cuối cùng được chèn vào.
Các cấu hình khác có thể đưa thêm các thành phần vào một liên kết đơn là các giao tiếp mạng (được sử dụng trong định tuyến đa đường), các mô hình tuyến liên kết động, lần vết và giám sát.
5.1. Thủ tục cho Links và SimpleLinks
Các thủ tục Link: Lớp Link được thực hiện hoàn toàn trong OTcl. Lớp SimpleLink trong OTcl sử dụng lớp C++ LinkDelay để mô phỏng trễ chuyển phát gói. Các thủ tục trong lớp Link là:
head{} trả về kênh điều khiển cho head_. queue{} trả về kênh điều khiển cho queue_. link{} trả kênh điều khiển cho phần tử trễ, link_.
up{} thiết lập trạng thái “up” trong phần tử dynamics_. Đồng thời ghi lại dấu vết vào mỗi file riêng biệt thông qua thủ tục trace-dynamics{}.
down{} Giống như up{}, thiết lập trạng thái “down” trong phần tử dynamics_. Đồng thời ghi dấu vết cho mỗi file riêng biệt thông qua thủ tục trace- dynamics{}.
up?{} trả về trạng thái của liên kết. Trạng thái của liên kết là “up” hoặc “down”, trạng thái là “up” nếu tuyến liên kết động không được kích hoạt.
all-connectors{} Áp dụng hoạt động cụ thể cho tất cả các connector trên liên kết. Ví dụ về áp dụng là all-connectors reset.
cost{} Thiết lập chi phí cho tuyến kết nối với một giá trị nhất định.
cost?{} Trả về giá trị chi phí của tuyến liên kết. Mặc định giá trị chi phí của tuyến liên kết là 1 nếu không có giá trị cụ thể được thiết lập trước đó.
Các thủ tục SimpleLink. Lớp SimpleLink của Otcl thực hiện một liên kết đơn điểm-điểm với hàng đợi và trễ có liên quan. Lớp này được thừa kế từ lớp cơ sở Link của Otcl 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_
# put the ttl checker after the delay
# so we don’t have to worry about accounting # for ttl-drops within the trace and/or monitor # fabric
#
set ttl_ [new TTLChecker] $ttl_ target [$link_ target] $link_ target $ttl_
}
Chú ý rằng khi một đối tượng SimpleLink được tạo lập, các đối tượng Delay/Link và TTLChecker mới cũng được tạo lập. Cũng cần phải lưu ý rằng đối tượng Queue phải đã được tạo lập.
Có 2 phương pháp bổ sung khác được thực hiện (trong OTcl) như là một phần của lớp SimpleLink: trace và init-monitor.
5.2. Các Connector
Các Connector, các bộ phân loại không liên kết, chỉ tạo ra số liệu cho một nguời nhận, các gói được đưa ra tới target_ lân cận hay nó được gửi tới drop-target_.
Một connector sẽ nhận một gói, thực hiện một vài chức năng và đưa gói đó đến nút lân cận hoặc loại bỏ gói. Có một số loại connector khác nhau trong ns. Mối Connector thực hiện một chức năng khác nhau.
networkinterface: dán nhãn các gói với việc định dạng giao tiếp tới, nó được sử dụng trong một số giao thức định tuyến nhiều đường. Lớp có thể thay đổi “mô phỏng số đầu giao tiếp -1” chỉ ra rằng ns chèn giao tiếp này, và sau đó nó được chèn phần còn lại trong luyến liên kết đơn.
Đối tượng DynaLink: tạo cổng lưu lượng phụ thuộc việc liên kết là up hay down. Chúng ta mong muốn đặt đối tượng này ở đầu của liên kết và được chèn vào liên kết trước khi bắt đầu mô phỏng. Biến status_ điều khiển trạng thái của liên kết là up hoặc down. Đối tượng DelayLink: Lập mô hình cho các đặc tính băng thông và trễ của tuyến liên kết. Nếu tuyến liên kết không phải là liên kết động, thì đối tượng này sẽ định trình một cách đơn giản các sự kiện nhận gói cho đối tượng luồng xuống với mỗi gói nó nhận được ở thới điểm tương ứng của gói đó. Tuy nhiên, nếu là liên kết động thì đối tượng xếp các gói vào hàng đợi bên trong nó và tự định trình một sự kiện nhận gói cho gói phải được phát đi kế tiếp. Bởi vậy nếu tuyến liên kết có trạng thái down tại một số điểm, phương thức reset() của đối tượng được thực hiện, và đối tượng sẽ loại bỏ tất cả các gói đang truyền dẫn trong lúc tuyến liên kết có sự cố.
Các Queue: lập mô hình của bộ đệm đầu ra được gắn vào liên kết trong một bộ định tuyến “thực” trong mạng. Trong ns, chúng ta gắn vào và được xem như một phần của liên kết.
TTLChecker: sẽ giảm giá trị của ttl trong mỗi gói mà nó nhận được. Nếu ttl sau đó có giá trị dương, gói sẽ được chuyển tiếp tới phần tử tiếp theo trên liên kết. Trong
các liên kết đơn, TTLChecker được tự động thêm vào và vị trí của chúng là phần tử cuối cùng trong tuyến liên kết, giữa phần tử trễ và điểm vào cho node kế tiếp.
5.3 Phân cấp đối tượng.
Lớp cơ sở được sử dụng để thể hiện các tuyến liên kết được gọi là Link. Các phương thức của lớp này được liệt kê trong phần kế tiếp. Các đối tượng liên kết khác được dẫn xuất từ lớp cơ sở bao gồm:
- Đối tượng SimpleLink: được sử dụng để thể hiện một tuyến liên kết một chiều. Không có biến trạng thái hoặc tham số cấu hình nào có liên quan đến đối tượng này. Các phương thức cho lớp này là:
$simplelink enable-mcast <src> <dst>.
Phương thức này kích hoạt đa hướng cho liên kết bằng việc tạo ra một giao tiếp mạng đầu vào cho đích đến và thêm vào giao diện đầu ra cho nguồn.
$simplelink trace <ns> <file> <optional:op>
Thiết lập các đối tượng tìm vết cho tuyến liên kết và cập nhật liên kết đối tượng. Nếu op được định nghĩa là “nam” thì tạo ra các file lần vết là nam.
$simplelink nam-trace <ns> <file>
Thiết lập lần vết nam trong tuyến liên kết
$simplelink trace-dynamics <ns> <file> <optional:op>
Thiết lập này đặc biệt để lần vết cho các tuyến liên kết động. <op> cũng cho phép thiết lập quá trình lần vết theo nam.
$simplelink init-monitor <ns> <qtrace> <sampleInterval>
Chèn các đối tượng cho phép chúng ta giám sát kích thước hàng đợi của tuyến liên kết này. Trả lại tên của đối tượng có thể truy vấn để xác định kích thước trung bình của hàng đợi.
$simplelink attach-monitors <insnoop> <outsnoop> <dropsnoop> <qmon> Tương tự init-monitor, nhưng cho phép chỉ định nhiều thông số hơn.
$simplelink dynamic
Thiết lập cờ dynamics cho tuyến liên kết này. $simplelink errormodule <args>
Chèn một module lỗi trước hàng đợi. $simpleilnk insert-linkloss <args> Chèn một module lỗi sau hàng đợi.
// Các đối tượng của tuyến liên kết khác được dẫn xuất từ lớp SimpleLink bao gồm: FQLink, CBQLink và IntServLink.
queueManagement_ Kiểu quản lý hàng đợi được sử dụng trong liên kết. Giá trị mặc định là DropTail. Không có tham số cấu hình được chỉ định cho CBQLink và IntServLink.
• Đối tượng DelayLink: các đối tượng này xác định thời tổng gian cần thiết để một gói đi qua một liên kết. Thời gian này được tính theo công thức size/bw + delay với size là kích thước gói, bw là độ rộng băng của liên kết và delay là trễ lan truyền của liên kết. Không có phương thức hay biến trạng thái nào có liên quan tới đối tượng này.
Các tham số cấu hình là:
bandwidth_ Độ rộng băng thông của tuyến liên kết tính bằng bit/giây (bps). delay_ Trễ lan truyền của liên kết tính bằng giây.