Hoàng Đăng Hải Học Viên: Lê Đăng Phong [1-22] Vũ Anh Tuấn


Cấu hình nút về mặt chức năng



tải về 0.59 Mb.
trang8/19
Chuyển đổi dữ liệu13.08.2016
Kích0.59 Mb.
#17954
1   ...   4   5   6   7   8   9   10   11   ...   19

4.3 Cấu hình nút về mặt chức năng

4.3.1 Giao diện cấu hình nút


Giao diện cấu hình nút gồm có 2 phần. Phần thứ nhất giải quyết cấu hình nút, phần thứ 2 thực sự tạo ra nút theo kiểu cụ thể. Cấu hình nút gồm có định nghĩa các đặc tính khác nhau của nút trước khi tạo ra chúng, có thể gồm có kiểu cấu trúc đánh địa chỉ trong việc mô phỏng, định nghĩa các thành phần mạng cho các nút di đông, bật hoặc tắt các lựa chọn theo dõi ở mức tác tử, bộ định tuyến hoặc MAC, lựa chọn kiểu các thủ tục định tuyến thay đổi cho các nút không dây hoặc định nghĩa mô hình năng lượng của chúng. Toàn bộ API cấu hình nút như sau:

OPTION_TYPE AVAILABLE OPTION_VALUES

------------- --------------------------

$ns_ node-config -addressingType flat or hierarchical or expanded

-adhocRouting DSDV or DSR or TORA or AODV

-llType LL

-macType Mac/802_11

-propType Propagation/TwoRayGround

-ifqType Queue/DropTail/PriQueue

-ifqLen 50

-phyType Phy/WirelessPhy

-antType Antenna/OmniAntenna

-channelType Channel/WirelessChannel

-topoInstance $topo_instance

-wiredRouting ON or OFF

-mobileIP ON or OFF

-energyModel EnergyModel

-initialEnergy (in Joules)

-rxPower (in W)

-txPower (in W)

-agentTrace ON or OFF

-routerTrace ON or OFF

-macTrace ON or OFF

-movementTrace ON or OFF

-reset

Giá trị mặc định cho tất cả lựa chọn trên là rỗng trừ kiểu đánh địa chỉ, -addressingType có giá trị mặc định là kiểu phẳng, lựa chọn -reset có thể được lựa chọn để thiết lập lại toàn bộ tham số cấu hình nút mang giá trị mặc định của chúng.



Cấu hình nút cho nút không dây, di động chạy AODV như là giao thức định tuyến adhoc trong cấu trúc mạng phân cấp được chỉ ra dưới đây, chúng ta quyết định bật theo dõi chỉ ở mức tác tử và mức bộ định tuyến. Hơn nữa chúng ta giả sử rằng sơ đồ kiến trúc mạng đã được tạo ra với lệnh "set topo [new Topography]". Lệnh cấu hình nút như sau:

$ns_ node-config -addressingType hierarchical

-adhocRouting AODV

-llType LL

-macType Mac/802_11

-ifqType Queue/DropTail/PriQueue

-ifqLen 50

-antType Antenna/OmniAntenna

-propType Propagation/TwoRayGround

-phyType Phy/WirelessPhy

-topoInstance $topo

-channelType Channel/WirelessChannel

-agentTrace ON

-routerTrace ON

-macTrace OFF

-movementTrace OFF

Chú ý rằng lệnh cấu hình có thể ngắt thành những dòng riêng biệt như:

$ns_ node-config -addressingType hier

$ns_ node-config -macTrace ON

Các lựa chọn cần phải thay đổi chỉ thay đổi khi được gọi đến, ví dụ sau khi cấu hình cho các nút di động AODV như trên, chúng ta có thể cấu hình cho các nút trạm gốc AODV theo cách sau:

$ns_ node-config -wiredRouting ON

Trong khi tất cả các đặc tính khác của các nút trạm gốc và các nút di động là giống nhau, các nút trạm gốc có khả năng định tuyến hữu tuyến, trong khi các nút di động thì không có khả năng này. Trong trường hợp này chúng ta cần phải thay đổi cấu hình nút chỉ khi nó là bắt buộc.

Tất cả các nút cụ thể được tạo ra sau lệnh cấu hình nút đã cho có cùng thuộc tính trừ khi một phần hoặc tất cả lệnh cấu hình nút được thực hiện với các giá trị tham số khác nhau. Nhưng sau khi tạo ra các nút di động và nút trạm gốc AODV, nếu chúng ta muốn tạo ra các nút đơn, chúng ta sẽ sử dụng lệnh cấu hình nút sau:

$ns_ node-config -reset

Điều này sẽ thiết lập tất cả giá trị các tham số tới giá trị mặc định cơ bản được định nghĩa khi cấu hình một nút đơn.

4.4 Bộ phân lớp


Chức năng của một nút khi nó nhận một gói là xem xét các trường của gói đó, thông thường là địa chỉ đích và một vài trường hợp là địa chỉ nguồn. Sau đó nó ánh xạ các giá trị tới đối tượng giao diện ra của phía người nhận tiếp theo của gói tin này.

Trong ns, nhiệm vụ này được thực hiện bởi đối tượng classifier đơn, Các đối tượng trong bộ đa phân lớp, xem xét việc phân chia cụ thể của việc chuyển gói tin qua nút. Một nút trong ns sử dụng nhiều kiểu khác nhau của bộ phân lớp cho nhiều mục đính khác nhau. Trong phần này xem xét một vài đối tượng phân lớp chung hơn, đơn giản hơn trong ns.

Chúng ta bắt đầu mô tả lớp cơ sở trong phần này. Đoạn tiếp theo sẽ mô tả bộ phân lớp địa chỉ (4.4.1), bộ phân lớp đa hướng (4.4.2), bộ phân lớp đa đường (4.4.3) và cuối cùng bộ tái tạo (bản sao)(4.4.5)

Bộ phân lớp cung cấp cách đối xử với một gói tin dựa vào vài điều kiện logic và lấy tham chiếu tới đối tượng mô phỏng khác dựa trên kết quả tính toán. Mỗi bộ phân lớp gồm có một bảng các đối tượng mô phỏng được đánh chỉ mục bằng số khe (slot number). Công việc của một bộ phân lớp là xác định số khe kết hợp với gói tin nhận được và chuyển gói tin này tới đối tượng được tham chiếu bởi khe liên quan. Lớp Classifier cung cấp một lớp cơ sở từ đó các bộ phân lớp khác được dẫn xuất từ lớp này.

class Classifier : public NsObject {

public:


~Classifier();

void recv(Packet*, Handler* h = 0);

protected:

Classifier();

void install(int slot, NsObject*);

void clear(int slot);

virtual int command(int argc, const char*const* argv);

virtual int classify(Packet *const) = 0;

void alloc(int);

NsObject** slot_; /* table that maps slot number to a NsObject */

int nslot_;

int maxslot_;

};

Phương thức classify() là hoàn toàn ảo, chỉ định lớp Classifier được sử dụng như một lớp gốc, phương thức alloc() cấp phát động không gian đủ cho bảng chứa số cụ thể của các khe. Phương thức install() và clear() thêm vào hoặc xóa bỏ các đối tượng từ bảng này. Phương thức recv() và giao diện OTcl là được thực thi như sau:



/*

* objects only ever see "packet" events, which come either

* from an incoming link or a local agent (i.e., packet source).

*/

void Classifier::recv(Packet* p, Handler*)



{

NsObject* node;

int cl = classify(p);

if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0) {

Tcl::instance().evalf("%s no-slot %d", name(), cl);

Packet::free(p);

return;

}

node->recv(p);



}

int Classifier::command(int argc, const char*const* argv)

{

Tcl& tcl = Tcl::instance();



if (argc == 3) {

/*

* $classifier clear $slot



*/

if (strcmp(argv[1], "clear") == 0) {

int slot = atoi(argv[2]);

clear(slot);

return (TCL_OK);

}

/*



* $classifier installNext $node

*/

if (strcmp(argv[1], "installNext") == 0) {



int slot = maxslot_ + 1;

NsObject* node = (NsObject*)TclObject::lookup(argv[2]);

install(slot, node);

tcl.resultf("%u", slot);

return TCL_OK;

}

if (strcmp(argv[1], "slot") == 0) {



int slot = atoi(argv[2]);

if ((slot >= 0) || (slot < nslot_)) {

tcl.resultf("%s", slot_[slot]->name());

return TCL_OK;

}

tcl.resultf("Classifier: no object at slot %d", slot);



return (TCL_ERROR);

}

} else if (argc == 4) {



/*

* $classifier install $slot $node

*/

if (strcmp(argv[1], "install") == 0) {



int slot = atoi(argv[2]);

NsObject* node = (NsObject*)TclObject::lookup(argv[3]);

install(slot, node);

return (TCL_OK);

}

}

return (NsObject::command(argc, argv));



}

Khi bộ phân lớp recv() nhận một gói tin nó gọi phương thức classify(), khuôn mẫu thông thường là phương thức này xác định và trả về chỉ mục của khe trong bảng về số các khe. Nếu chỉ mục là hợp lệ, và chỉ tới TclObject hợp lệ, bộ phân lớp sẽ xử lý gói tin này tới các đối tượng sử dụng phương thức recv() của đối tượng. Nếu chỉ mục này là không hợp lệ, bộ phân lớp sẽ gọi đến một thủ tục no-slot{} để cố gắng đưa đến một bảng phù hợp. Tuy vậy trong lớp gốc Classifier::no-slot{} in ra thông báo lỗi và ngắt sự thực hiện.

Phương thức command() cung cấp theo các thủ tục tương tự tới bộ thông dịch:

clear{(slot)} xóa điểm vào trong một khe riêng biệt

installNext {(object)} cài đặt đối tượng trong khe khả dụng tiếp theo và trả về số khe.

slot {(index)} trả về đối tượng được lưu trữ trong một khe nào đó

install {(index), (object)} cài đặt một đối tượng nào đó trong một khe

Chú ý rằng các thủ tục tương tự cũng là được nạp chồng bởi một thủ tục cụ thể có cùng tên mà nó lưu trữ một tham chiếu tới đối tượng được lưu trữ.


4.4.1 Bộ phân lớp địa chỉ


Một bộ phân lớp địa chỉ được sử dụng hỗ trợ chuyển gói tin đơn hướng. Nó áp dụng một bit trạng thái shift và mask thao tác địa chỉ đích của gói tin đưa ra số khe, số khe này được trả về từ phương thức classify(). Lớp AddressClassifier được định nghĩa như sau:

class AddressClassifier : public Classifier {

public:

AddressClassifier() : mask_(~0), shift_(0) {



bind("mask_", (int*)&mask_);

bind("shift_", &shift_);

}

protected:



int classify(Packet *const p) {

IPHeader *h = IPHeader::access(p->bits());

return ((h->dst() >> shift_) & mask_);

}

nsaddr_t mask_;



int shift_;

};

Lớp này lợi dụng việc không có ý nghĩa về ngữ nghĩa trực tiếp trong trường địa chỉ đích của gói tin. Đúng hơn là, nó trả về vài số của bit từ trường dst_ của gói tin như là số khe được dùng trong phương thức Classifier::recv(). Giá trị của mask_ và shift_ được thiết lập qua OTcl.


4.4.2 Bộ phân lớp đa hướng


Bộ phân lớp đa hướng phân loại các gói tin theo cả hai địa chỉ nguồn và đích (nhóm địa chỉ). Nó duy trì bảng ánh xạ cặp địa chỉ nguồn/ nhóm và các số khe. Khi mà một gói tin chứa địa chỉ nguồn/nhóm không rõ đến bộ phân lớp, nó gọi đến một thủ tục Otcl Node::new-group{} để thêm một điểm vào cho bảng này. Thủ tục OTcl này có thể sử dụng phương thức set-hash để thêm 3 phần (nguồn, nhóm, khe) vào bảng của bộ phân lớp. Bộ phân lớp đa hướng được định nghĩa như sau:

static class MCastClassifierClass : public TclClass {

public:

MCastClassifierClass() : TclClass("Classifier/Multicast") {}



TclObject* create(int argc, const char*const* argv) {

return (new MCastClassifier());

}

} class_mcast_classifier;



class MCastClassifier : public Classifier {

public:


MCastClassifier();

~MCastClassifier();

protected:

int command(int argc, const char*const* argv);

int classify(Packet *const p);

int findslot();

void set_hash(nsaddr_t src, nsaddr_t dst, int slot);

int hash(nsaddr_t src, nsaddr_t dst) const {

u_int32_t s = src ^ dst;

s ^= s >> 16;

s ^= s >> 8;

return (s & 0xff);

}

struct hashnode {



int slot;

nsaddr_t src;

nsaddr_t dst;

hashnode* next;

};

hashnode* ht_[256];



const hashnode* lookup(nsaddr_t src, nsaddr_t dst) const;

};

int MCastClassifier::classify(Packet *const pkt)



{

IPHeader *h = IPHeader::access(pkt->bits());

nsaddr_t src = h->src() >> 8; /*XXX*/

nsaddr_t dst = h->dst();

const hashnode* p = lookup(src, dst);

if (p == 0) {

/*

* Didn’t find an entry.



* Call tcl exactly once to install one.

* If tcl doesn’t come through then fail.

*/

Tcl::instance().evalf("%s new-group %u %u", name(), src, dst);



p = lookup(src, dst);

if (p == 0)

return (-1);

}

return (p->slot);



}

Lớp MCastClassifier thực thi một bảng băm theo chuỗi và sử dụng hàm băm trong cả nguồn gói tin và địa chỉ đích. Hàm băm trả về số khe đánh chỉ mục trong bảng slot_ tại đối tượng ưu tiên. Một điểm băm thiếu ngụ ý gói tin được giao tới nhóm không biết rõ trước đó, OTcl sẽ được gọi để xử lý tình huống này. Mã OTcl mong muốn chèn một điểm vào thích ứng trong bảng băm


4.4.3 Bộ phân lớp đa đường


Đối tượng này được nghĩ ra để hỗ trợ chuyển đa đường tương giá, khi mà nút có nhiều định tuyến tương giá tới cùng một địa chỉ, và muốn sử dụng tất cả chúng một cách đồng thời. Đối tượng này không xem xét mọi trường trong gói tin. Với mỗi gói tin nối tiếp nhau, nó dễ dàng trả về khe được điền kế tiếp theo kiểu quay tròn. Định nghĩa cho lớp này được chỉ ra như sau:

class MultiPathForwarder : public Classifier {

public:

MultiPathForwarder() : ns_(0), Classifier() {}



virtual int classify(Packet* const) {

int cl;


int fail = ns_;

do {


cl = ns_++;

ns_ %= (maxslot_ + 1);

} while (slot_[cl] == 0 && ns_ != fail);

return cl;

}

private:


int ns_; /* next slot to be used. Probably a misnomer? */

};

4.4.4 Bộ phân lớp băm


Đối tượng này được sử dụng để phân lớp gói tin như là một thành viên của một luồng riêng biệt, bộ phân lớp băm sử dụng bảng băm bên trong để gán các gói tin vào các luồng. Các đối tượng này được sử dụng khi thông tin mức luồng được cần đến (ví dụ, trong các nguyên tắc hàng đợi đặc trưng của luồng và sự thu thập thông tin thống kê), các gói được gán vào luồng dựa trên ID của luồng, địa chỉ đích, địa chỉ nguồn/đích hoặc tổ hợp của địa chỉ nguồn/đích cộng với ID của luồng. Những trường được truy nhập bởi bộ phân lớp băm được giới hạn ở ip header: src(),dst(), flowid() (trong ip.h).

Bộ phân lớp băm được tạo ra với đối số nguyên chỉ định kích thước khởi tạo của bảng băm. Kích cỡ bảng băm hiện tại có thể được sửa chữa sau đó với phương thức resize (xem bên dưới). Khi tạo ra, biến shift_ và mask_ được khởi tạo với các giá trị của NodeShift và NodeMask hiện tại của bộ mô phỏng. Các giá trị này được lấy từ đối tượng AddrParams khi bộ phân lớp băm được gọi đến, bộ phân lớp băm sẽ không hoạt động nếu cấu trúc AddrParams không được khởi tạo, các bộ dựng dưới đây được sử dụng cho nhiều bộ phân lớp băm

Classifier/Hash/SrcDest

Classifier/Hash/Dest

Classifier/Hash/Fid

Classifier/Hash/SrcDestFid

Bộ phân lớp băm nhận các gói tin, phân loại chúng theo điều kiện về luồng của chúng, và gọi ra bộ phân lớp slot chỉ thị nút tiếp theo sẽ nhận gọi tin. Trong vài trường hợp với bộ phân lớp băm, hầu hết gói tin được kết hợp với một khe đơn, trong khi chỉ vài luồng được hướng tới vài nơi khác. bộ phân lớp băm gồm có biến default_ chỉ thị khe nào sẽ được sử dụng cho các gói tin không phù hợp với mọi điều kiện trên một luồng. giá trị default_ có thể được thiết lập một cách tùy chọn. Phương thức cho bộ phân lớp băm như sau:

$hashcl set-hash buck src dst fid slot

$hashcl lookup buck src dst fid

$hashcl del-hash src dst fid

$hashcl resize nbuck

Phương thức set-hash()chèn thêm một mục từ mới vào bảng băm với bộ phân lớp băm. Đối số buck chỉ rõ số thùng bảng băm được sử dụng cho việc chen thêm mục từ này. Khi số thùng là không rõ ràng, buck có thể được chỉ ra là auto, Đối số src, dst và fid chỉ rõ nguồn IP, đích, và ID của luồng trở thành phù hợp cho sự phân loại luồng. Các trường không được sử dụng bởi bộ phân lớp riêng biệt là được bỏ qua, đối số slot chỉ thị chỉ mục trong bảng khe ưu tiên trong đối tượng Classifier gốc từ đó bộ phân lớp băm được dẫn xuất ra. Chức năng lookup trả về tên của đối tượng được kết hợp với buck/src/dst/fid, đối số buck có thể auto, như là cho set-hash. hàm del-hash xóa mục từ theo danh nghĩa từ bảng băm. Hiện tại việc này được thực hiện chỉ là đánh dấu mục từ như là không hoạt động, tuy nhiên nó vẫn ở trong bảng băm với các mục từ không dùng đến.

Chức năng resize giảm kích thước bảng băm bao gồm số các thùng được chỉ rõ bởi đối số nbuck.

4.4.5 Bộ tạo bản sao


Bản sao là bộ phân lớp khác với những bộ phân lớp chúng ta đã mô tả trước đó, nó không sử dụng chức năng phân loại, đúng hơn là, nó chỉ sử dụng bộ phân lớp như là một bảng các khe, nó nạp chồng phương thức recv() sinh ra n bản sao của gói tin, mà được đưa đến tất cả n các đối tượng tham chiếu trong bảng. Để hỗ trợ chuyển gói tin đa hướng, bộ phân lớp nhận gói tin đa hướng từ nguồn S định trước cho nhóm G tính toán bằng hàm băm h(S,G) đưa ra số khe trong bảng đối tượng của bộ phân lớp. Trong việc phân phối đa hướng, gói tin phải được sao chép một cho mỗi liên kết dẫn đến các nút đã đăng ký trừ đi 1. Sự sản sinh thêm ra bản sao của gói tin được thực hiện bởi lớp Replicator được định nghĩa trong replicator.cc:

/*

* A replicator is not really a packet classifier but



* we simply find convenience in leveraging its slot table.

* (this object used to implement fan-out on a multicast

* router as well as broadcast LANs)

*/

class Replicator : public Classifier {



public:

Replicator();

void recv(Packet*, Handler* h = 0);

virtual int classify(Packet* const) {};

protected:

int ignore_;

};

void Replicator::recv(Packet* p, Handler*)



{

IPHeader *iph = IPHeader::access(p->bits());

if (maxslot_ < 0) {

if (!ignore_)

Tcl::instance().evalf("%s drop %u %u", name(),

iph->src(), iph->dst());

Packet::free(p);

return;


}

for (int i = 0; i < maxslot_; ++i) {

NsObject* o = slot_[i];

if (o != 0)

o->recv(p->copy());

}

/* we know that maxslot is non-null */



slot_[maxslot_]->recv(p);

}

Như chúng ta thấy từ mã lệnh trên, lớp này không thực sự phân loại gói tin, thay vào đó, nó sao lại gói tin, một cho mỗi mục từ trong bảng của nó, và phân phối bản sao tới mỗi nút được liệt kê trong bảng. Mục từ cuối cùng trong bảng chưa gói tin nguyên bản.



Каталог: Hoc%20Tap -> Cong%20Nghe%20Wan
Hoc%20Tap -> Point to Point Protocol (ppp) ppp được xây dựng dựa trên nền tảng giao thức điều khiển truyền dữ liệu lớp cao (High-Level Data link Control (hdlc)) nó định ra các chuẩn cho việc truyền dữ liệu các giao diện dte và dce của mạng wan như V
Hoc%20Tap -> Cấu hình Application Port-Mapping với cbac mục tiêu: Cấu hình để router nhận ra các ứng dụng không sử dụng port chuẩn. Mô hình
Hoc%20Tap -> ĐẢng cộng sản việt nam đẢng ủy phưỜng 04
Hoc%20Tap -> CiR = Bc / Tc
Hoc%20Tap -> Mean command : ip ospf mtu-ignore Diagram : Problems
Hoc%20Tap -> R1# ip route 0 0 0 0 FastEthernet0/0 R2# show run
Cong%20Nghe%20Wan -> Câu hỏi về kết nối chi nhánh về Head Office dùng wan
Cong%20Nghe%20Wan -> 1/ Cáp đồng gshdsl
Cong%20Nghe%20Wan -> 1. xu hưỚng chuẩn hoá VÀ CẤu trúc giao thứC

tải về 0.59 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   4   5   6   7   8   9   10   11   ...   19




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương