Lớp LinkDelay

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 56)

7. Trễ và các tuyến liên kết

7.1 Lớp LinkDelay

Lớp LinkDelay được dẫn xuất từ lớp cơ sở Connector. Nó được định nghĩa trong ~ns/delay.cc và được mô tả vắn tắt như sau:

class LinkDelay : public Connector { public:

LinkDelay();

void send(Packet* p, Handler*); void handle(Event* e);

double delay(); /* line latency on this link */ double bandwidth(); /* bandwidth on this link */ inline double txtime(Packet* p) { /* time to send pkt p on this link */ hdr_cmn* hdr = (hdr_cmn*) p->access(off_cmn_);

return (hdr->size() * 8. / bandwidth_); }

protected:

double bandwidth_; /* bandwidth of underlying link (bits/sec) */ double delay_; /* line latency */

int dynamic_; /* indicates whether or not link is ~ */ Event inTransit_;

PacketQueue* itq_; /* internal packet queue for dynamic links */

Packet* nextPacket_; /* to be delivered for a dynamic link. */

Event intr_; };

Phương thức recv() nạp chồng từ lớp cơ sở Connector. Nó được định nghĩa như sau:

void LinkDelay::recv(Packet* p, Handler* h) {

double txt = txtime(p);

Scheduler& s = Scheduler::instance(); if (dynamic_) {

Event* e = (Event*)p;

e->time_ = s.clock() + txt + delay_; itq_->enque(p);

schedule_next(); } else {

/* XXX only need one intr_ since upstream object should * block until it’s handler is called

*

* This only holds if the link is not dynamic. If it is, then * the link itself will hold the packet, and call the upstream * object at the appropriate time. This second interrupt is * called inTransit_, and is invoked through schedule_next() */

s.schedule(h, &intr_, txt); }

Đối tượng này hỗ trợ một thủ tục cài đặt (instproc-like), $object dynamic, để thiết lập biến dynamic_ của nó. Biến này xác định xem liên kết có phải là động hay không (tức là khả năng xảy ra lỗi/phục hồi tại các thời điểm tương ứng). Cách xử lý nội tại của mỗi liên kết là khác nhau.

Với trường hợp các liên kết không động (non-dynamic), phương thức này hoạt động bằng cách nhận một gói, p, và định trình hai sự kiện. Giả sử hai sự kiện này là E1 và E2, và sự kiện E1 được định trình để xảy ra trước sự kiện E2. E1 được định trình để xảy ra khi node ở luồng lên đính với phần tử trễ này đã hoàn thành việc gửi gói hiện tại (có thời gian tương đương với kích thước gói chia cho băng thông của liên kết). E1 thường có liên quan tới đối tượng Queue, và sẽ khiến cho nó (có thể) bị khóa (xem Phần 7.1.1). E2 thể hiện sự kiện đến của một gói tại luồng xuống lân cận của phần tử trễ. Sự kiện E2 xảy ra chậm hơn sự kiện E1 vài giây tương đương với trễ của liên kết.

Cứ lần lượt như vậy, khi liên kết là động, và nhận p, sau đó nó sẽ định trình E1 để có thể mở khóa hàng đợi tại thời điểm tương ứng. Tuy nhiên, E2 được định trình chỉ nếu p là gói duy nhất hiện đang được truyền đi. Mặt khác, có ít nhất một gói đang truyền đi trên liên kết phải được nhận trước p tại E2. Do đó, gói p được giữ trong hàng đợi inTransit của đối tượng, itq_. Khi gói ngay trước p đang truyền trên liên kết được nhận tại node lân cận, đối tượng DelayLink sẽ tự định trình một sự kiện để phát ra tại E2. Tại thời điểm tương ứng đó, phương thức handle() của nó sẽ gửi p trực tiếp tới đích của mình. Phương thức nội tại schedule_next() của đối tượng sẽ định trình các sự kiện này cho các gói đang được truyền tại thời điểm tương ứng

8.Các dịch vụ trong ns.

Mục này mô tả các dịch vụ có nguồn gốc từ các dịch vụ của Nortel trong ns. Các dịch vụ hoặc Diffserv là cấu trúc IP QoS cơ sở trong nhãn gói mà nó cho phép mức độ ưu tiên của các gói theo yêu cầu người sử dụng. Trong thời gian tắc nghẽn các gói có mức đô ưu tiên thấp sẽ bị loại bỏ nhiều hơn các gói có mức độ ư tiên cao.

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 56)

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

(88 trang)
w