.8 Ví dụ định dạng của tệp tin vết

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 56 - 73)

Ý nghĩa của từng trƣờng nhƣ sau:

− Trường event: nhận các giá trị +, -, d, r trong đó: + là sự kiện gói tin tới hàng đợi, - là sự kiện ra khỏi hàng đợi, d (drop) là sự kiện loại bỏ gói tin tại hàng đợi, r (receive) là sự kiện gói tin tới nút đích ( “to node”).

− Trường time: thời điểm xảy ra sự kiện (chú ý: time là giá trị thực, trong trường hợp mô phỏng mạng có dây, có tối đa 6 chữ số sau dấu chấm thập phân).

− Trường from node: số của node mạng gửi gói tin.

− Trường to node: số của node mạng nhận gói tin. Hai trường from node và to node xác định đường truyền (link) trên đó xảy ra sự kiện. (Chú ý: số của node mạng do NS sinh ra theo thứ tự tạo ra node – “create node_”, bắt đầu từ số 0).

− Trường pkt type (packet type): cho biết kiểu của gói tin, với mô phỏng tương tác với mạng thực thì tất cả các gói tin đến từ mạng thực đều có kiểu là “live”.

− Trường pkt size: kích thước của gói tin, đơn vị là byte.

− Trường flags: trường cờ, gồm 6 cờ, mỗi cờ tương ứng với 1 bit trong header của gói tin. Giá trị 0 của mỗi cờ được thể hiện bằng ký tự „-‟. Hiện tại, đối với mạng có dây, NS mới chỉ sử dụng 4 cờ sau để thông báo ECN (Explicit Congestion Notification):

+ “E” để báo có tắc nghẽn (CE - Congestion Experienced).

+ “N” để thông báo tầng Giao vận có khả năng xử lý báo hiệu ECT (ECN - Capable-Transport) trong IP header.

+ “C” (ECN-Echo): gói tin chứa thông báo tắc nghẽn, do bên nhận gửi cho bên gửi sau khi nó nhận được gói tin có cờ “E”.

+ “A” để báo giảm cửa sổ tắt nghẽn (CWR - Congestion Window Reduced).

− Trường fid (flow id): Chứa giá trị fid của IPv6, người lập trình có thể thiết lập giá trị fid cho các gói tin thuộc mỗi kết nối khi viết chương trình mô phỏng bằng OTcl script để phục vụ cho việc phân tích tệp vết của mình và để chương trình NAM có thể hiển thị màu của các gói tin căn cứ theo giá trị của fid.

− Trường src addr (source address): địa chỉ nguồn gửi gói tin, có dạng “node.port".

− Trường dst addr (destination address): địa chỉ đích nhận gói tin, có dạng “node.port".

− Trường seq number (sequence number): số thứ tự của gói tin của giao thức tầng Mạng (và tầng Giao vận). Nếu một gói tin bị loại, gói phát lại sẽ có cùng giá trị của trường sequence number. Khi mô phỏng tương tác với mạng thực, gói tin PT_LIVE chưa được xử lý. Để thêm seq number cho gói tin PT_LIVE ta cần sửa mã nguồn hàm Trace::get_seqno(Packet*p) của tệp ~ns\trace\trace.cc.

− Trường pkt id (packet id): chứa số định danh của gói tin. Mỗi gói tin được sinh ra sẽ có giá trị định danh riêng (kể cả các gói tin phát lại), nhằm hỗ trợ việc phân tích kết quả.

Mặc định NS sinh ra 12 trường trong tệp vết. Tuy nhiên, chúng ta có thể thay đổi số trường hoặc nội dung từng trường ở hàm Trace::format của tệp tin ~ns\trace\trace.cc.

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

Mỗi dòng ghi lại một sự kiện trong mạng và các thông tin liên quan đến sự kiện, dùng cho chương trình NAM để hiển thị dưới dạng đồ hoạ topo mạng và sự hoạt động của mạng [5],[8].

3.5 Các mô hình sinh lỗi trong NS-2

Xác định đặc điểm hành trạng của việc mất gói số liệu là một nhiệm vụ quan trọng, bởi vì đó là một trong số ít các tham số quan trọng nhất ảnh hưởng đến tất cả các tầng của bộ giao thức.

Trong mô phỏng, các lỗi có thể được sinh ra bởi một mô hình đơn giản hoặc từ nhiều mô hình được xây dựng theo kinh nghiệm và thống kê phức tạp. Để hỗ trợ nhiều mô hình lỗi, đơn vị lỗi có thể được chỉ ra là tỉ lệ gói tin, tỉ lệ bit bị lỗi hay khoảng thời gian xảy ra lỗi...

Lớp ErrorModel được kế thừa từ lớp connector, nó kế thừa một số phương thức của đối tượng như phương thức targetdrop-target. Nếu drop- target được sử dụng, nó sẽ nhận các gói tin bị lỗi từ ErrorModel, khi đó các gói tin này xem như đã bị loại trên đường truyền. Hoặc là, ErrorModel đánh dấu cờ error_ trong phần hearder của gói tin, cho phép các agent nhận ra gói tin bị lỗi. ErrorModel cũng định nghĩa thêm phương thức unit để chỉ rõ đơn vị lỗi và ranvar để chỉ các biến ngẫu nhiên cho việc sinh lỗi. Nếu không được chỉ rõ thì đơn vị lỗi là gói tin, các biến ngẫu nhiên được phân bố từ 0 đến 1.

Trong C++, lớp ErrorModel được khai báo như sau:

enum ErrorUnit { EU_PKT=0, EU_BIT, EU_TIME }; class ErrorModel : public Connector {

public:

ErrorModel();

void recv(Packet*, Handler*); virtual int corrupt(Packet*);

inline double rate() { return rate_; } protected:

int command(int argc, const char*const* argv); ErrorUnit eu_; /* thiết lập đơn vị lỗi */

RandomVariable* ranvar_; double rate_;

};

Phương thức recv sẽ loại gói tin khỏi đường truyền, còn phương thức corrupt sẽ làm hỏng gói tin.

Thí dụ, tạo mô hình lỗi cho kịch bản mô phỏng với tỉ lệ lỗi gói tin là 1%:

set loss_module [new ErrorModel] $loss_module set rate_ 0.01

# Thiết lập tùy chọn đơn vị lỗivà biến ngẫu nhiên

$loss_module unit pkt ; # đơn vị lỗi là gói tin

$loss_module ranvar [new RandomVariable/Uniform] # Sử dụng phương thức drop-targetđể loại gói tin $loss_module drop-target [new Agent/Null]

Lớp ErrorModel chỉ thực hiện chính sách đơn giản dựa trên tỉ lệ lỗi đơn trong các gói tin, các bit. Nhiều mô hình lỗi phức tạp khác đã được cài đặt trong C++ dựa vào mô hình lỗi ErrorModel và định nghĩa lại phương thức corrupt.

Mô hình lỗi có thể được chèn vào nhiều vị trí trên đường truyền đơn công (SimpleLink), hiện tại, NS hỗ trợ các phương thức để chèn mô hình lỗi vào ba vị trí khác nhau trên đường truyền đơn:

− Chèn mô hình lỗi vào trong liên kết đơn công tại vị trí trước đối tượng hàng đợi. Với cách chèn lỗi này, trong OTcl cung cấp hai phương thức:

+ SimpleLink::errormodule args: Khi mô hình lỗi được đưa ra như là một tham biến, nó chèn mô hình lỗi vào bên trong đường truyền đơn, ngay trước hàng đợi và đặt drop-target của mô hình lỗi là đối tượng drop trace của đường truyền đơn. Chú ý rằng điều này yêu cầu thứ tự cấu hình như sau: $ns namtrace-all, tiếp theo là các cấu hình đường truyền, chèn mô hình lỗi vào. Khi không có đối số nào được đưa ra thì nó sẽ trả về mô hình lỗi hiện tại trong đường truyền, phương thức này được định nghĩa trong

ns/tcl/lib/ns-link.tcl

+ Simulator:: lossmodel (em)(src)(dst): phương thức này sẽ gọi phương thức SimpleLink::errormodule để chèn mô hình lỗi cho trước vào trong đường truyền đơn (src, dst). Phương thức này được định nghĩa trong

− Chèn mô hình lỗi trong liên kết đơn sau hàng đợi nhưng trước đối tượng DELAY đường truyền, được cung cấp hai phương thức sau:

+ SimpleLink::insert-linkloss args: Cách xử lý giống như SimpleLink::Errormodule ngoại trừ việc nó thêm vào một mô hình lỗi ngay sau đối tượng hàng đợi, phương thức này được định nghĩa trong

ns/tcl/lib/ns-link.tcl

+ Simulator::link-lossmodel(em)(src)(dst): phương thức này bao

hàm cả phương thức SimpleLink::insert-linkloss, được định nghĩa trong ns/tcl/lib/ns-link.tcl.

− Chèn vào mô hình lỗi vào sau đối tượng DELAY: sử dụng phương thức Link::install-error.

Mô hình lỗi trên được thực hiện xuyên suốt toàn bộ thời gian mô phỏng, để thay đổi mô hình lỗi trong từng khoảng thời gian mô phỏng ta cần sử dụng mô hình lỗi đa trạng thái. Mô hình lỗi đa trạng thái thực hiện việc chuyển trạng thái lỗi dựa trên thời gian. Việc chuyển đến trạng thái lỗi tiếp theo xảy ra tại thời điểm kết thúc của khoảng thời gian của trạng thái hiện tại. Sau đó, trạng thái lỗi tiếp theo được chọn bằng cách sử dụng ma trận trạng thái chuyển. Để tạo mô hình lỗi đa trạng thái, các tham biến sau được sử dụng để tạo mô hình lỗi:

- States: một mảng các trạng thái.

- Periods: một mảng các khoảng thời gian trạng thái. - Trans: ma trận mô hình chuyển trạng thái.

- Transunit: đơn vị lỗi, có thể là gói tin, byte hoặc time.

- Sttype: kiểu chuyển trạng thái sử dụng hoặc là time hoặc là pkt. - Nstates: số lượng các trạng thái.

- Start: trạng thái bắt đầu.

Thí dụ đơn giản mô hình lỗi đa trạng thái:

set tmp [new ErrorModel/Uniform 0 pkt] set tmp1 [new ErrorModel/Uniform .9 pkt] set tmp2 [new ErrorModel/Uniform .5 pkt]

# Tạo mảng các trạng thái

set m_states [list $tmp $tmp1 $tmp2] # Thời gian thực hiện của các trạng thái

set m_periods [list 0 .0075 .00375] # Mô hình ma trận chuyển trạng thái

set m_transmx { {0.95 0.05 0} {0 0 1} {1 0 0}} set m_trunit pkt

# Chuyển trạng thái theo thời gian

set m_sttype time set m_nstates 3

set m_nstart [lindex $m_states 0]

set em [new ErrorModel/MultiState $m_states $m_periods $m_transmx $m_trunit $m_sttype $m_nstates $m_nstart]

3.6 Các nguồn sinh lƣu lƣợng trong NS-2

Có thể sử dụng các giao thức tầng Giao vận như: TCP hoặc UDP để tạo ra các kết nối và sử dụng các giao thức tầng Ứng dụng như: web, ftp, telnet,... để truyền lưu lượng qua các kết nối đó.

Trong mô phỏng NS, lưu lượng được tạo ra bởi các nguồn sinh lưu lượng

bằng nhiều cách khác nhau, như sử dụng các mô hình toán học hoặc ghi lại các sự kiện và thời gian xảy ra các sự kiện của các hệ thống thực rồi đưa vào mô phỏng. Mỗi nguồn phát sinh lưu lượng thường chỉ thích hợp cho một vài loại ứng dụng nhất định. Vấn đề của người thực hiện mô phỏng là phải chọn nguồn lưu lượng cho thích hợp với ứng dụng được nghiên cứu. Để làm được điều này, người thực hiện mô phỏng cần hiểu rõ các đặc tính của các nguồn sinh lưu lượng cũng như các đặc tính của tải thực của các hệ thống truyền thông.

1. EXPOO_Traffic: tạo lưu lượng dựa vào một phân phối On/Off theo hàm mũ. Các gói tin được gửi đi với tốc độ xác định trong suốt quãng thời gian on, và không có gói tin nào được gửi trong khoảng thời gian off. Khoảng thời gian on và off được tạo ra theo phân phối hàm mũ. Kích thước các gói tin không thay đổi.

2. POO_Traffic: tạo lưu lượng dựa vào phân phối On/Off Pareto. Loại này tương tự phân phối theo hàm mũ trừ khoảng thời gian on/off được thực hiện theo phân phối pareto.

3. CBR_Traffic: tạo lưu lượng với tốc độ không đổi được định sẵn. Kích thước gói tin là cố định nhưng có thể chọn các giá trị khác nhau. Ngoài ra, một bộ tạo số ngẫu nhiên có thể được kích hoạt, để thay đổi khoảng thời gian các gói tin khởi hành trong một phạm vi nhất định.

4. TrafficTrace: là nguồn lưu lượng được ghi lại dưới dạng vết của một nguồn lưu lượng đến từ mạng thật.

Các nguồn sinh lưu lượng trên thường do các agent UDP vận chuyển, còn nguồn sinh lưu lượng do TCP vận chuyển dưới dạng các “ứng dụng mô phỏng”. Theo tài liệu ns Manual, hiện tại có hai lớp “ứng dụng mô phỏng” thừa kế từ lớp ứng dụng, đó là ứng dụng truyền file FTP và ứng dụng Telnet. Việc truyền các gói tin thuộc lớp này vào mạng tuân theo sự điều khiển lưu lượng và trách tắc nghẽn của các agent TCP.

Hiện tại, hầu hết các nguồn sinh lưu lượng được sử dụng trong NS là các nguồn lưu lượng có sẵn, được sinh ra bởi mô hình Toán học. Các mô hình sinh lưu lượng có sẵn trong NS được cộng đồng sử dụng NS tin dùng, vì có thể chủ động sinh ra luồng các sự kiện mô phỏng. Để đánh giá một giao thức, người ta sẽ cho nguồn lưu lượng của giao thức này tương tác với các nguồn lưu lượng khác sẵn có trong NS, từ đó rút ra những hiểu biết về quá trình truyền tải của giao thức. Tuy nhiên, khó có thể đảm bảo được rằng, một giao thức cho kết quả mô phỏng tốt thì cũng sẽ vận hành tốt trên mạng thực. Do đó, nếu thực hiện được mô phỏng giao thức có tương tác với nguồn lưu lượng

đến từ mạng thực, sẽ là một ưu điểm vượt trội, làm tăng đáng kể tin cậy của kết quả so với mô phỏng thông thường. Giả thiết trên chính là mục tiêu nghiên cứu chính của luận văn này.

Khả năng tương tác với mạng thực (emulation) của bộ mô phỏng NS không những có thể vận hành trực tiếp nguồn lưu lượng đến từ mạng thực, hay giữ lại vết của nguồn lưu lượng đến từ mạng thực để thực hiện mô phỏng về sau mà còn có thể tương tác với mạng thực. Vết của nguồn lưu lượng thực được giữ lại dưới dạng tệp tin vết (trace file), được sử dụng làm nguồn lưu lượng cho các kịch bản mô phỏng. Điều này có ý nghĩa quan trọng, vì các nguồn sinh lưu lượng có sẵn trong NS được tạo ra từ các mô hình lý thuyết toán học mang tính xác suất, chắc chắn không phản ánh hết các tác động môi trường lên nguồn lưu lượng.

Chính bộ mô phỏng NS có khả năng sinh ra các gói tin để truyền thông với các thực thể mạng thực. Đặc biệt, mô phỏng tương tác với mạng thực được kế thừa tất cả các tài nguyên của mô phỏng NS thông thường. Những khả năng tương tác với mạng thực chúng tôi sẽ trình bãy kỹ ở chương 4.

3.7 NAM (Network Animator) và một số công cụ hỗ trợ việc phân tích và hiển thị kết quả mô phỏng

3.7.1 NAM

NAM là công cụ hiển thị topo mạng và các vết dữ liệu mô phỏng mạng. Để sử dụng NAM, ta phải tạo tệp vết cho NAM, tệp này chứa các thông tin về mô phỏng như topo mạng (các node mạng và các đường truyền) và các sự kiện xảy ra trong mạng trong thời gian mô phỏng. Khi thực hiện, NAM sẽ đọc các thông tin về topo mạng, các vết của các sự kiện mô phỏng và vẽ lên cửa sổ NAM như Hình 5.10. NAM cũng được trang bị một số chức năng như: sắp xếp nút mạng (Edit), thực hiện (Play), tua ngược (BackPlay), và dừng (Stop),... giúp người sử dụng quan sát chi tiết các nguồn lưu lượng, vết của gói tin và các hành vi của hàng đợi.

3.7.2 Một số công cụ đƣợc tích hợp trong Linux

Chạy chương trình mô phỏng sẽ cho ta một tệp dữ liệu lớn dưới dạng tệp tin vết, ghi lại các sự kiện của các gói tin trên đường truyền. Do đó, người nghiên cứu cần phải phân tích tệp dữ liệu kết quả mô phỏng mới có thể thu thập được các độ đo theo mục đích nghiên cứu, công việc này có thể được thực hiện bởi sự trợ giúp của một số công cụ có sẵn trong Linux hoặc ta có thể tự viết lấy. Một số công cụ hỗ trợ phân tích kết quả mô phỏng có sẵn trong LINUX thường được sử dụng như cat, grep, awk, ...

Bởi vì, các tệp tin vết mô phỏng (được trình bày ở mục 3.4.1) được lưu trữ dưới dạng các dòng, mỗi dòng là một chuỗi ký tự tướng ứng với một sự kiện của gói tin. Nên ở đây, chúng tôi chỉ trình bày các lệnh nhằm vào việc xử lý các tệp vết loại này.

Lệnh cat

Lệnh cat dùng để đọc một hay nhiều tệp tin và xuất ra các thiết bị xuất chuẩn như file hay màn hình.

Cú pháp: cat <file1> <file2> ... <fileN> [>filename]

Trong trường hợp không chỉ định rõ thiết bị xuất [>filename] thì lệnh cat sẽ xuất kết quả ra màn hình.

Trong phân tích kết quả mô phỏng, người ta thường dùng lệnh cat để sao chép, trích lọc dữ liệu bằng cách kết hợp với một số lệnh khác như grep, awk,...

Lệnh grep

Grep là một lệnh trong Unix|Linux, là thuật ngữ viết tắt của: “Global Regular Expression Parser”. Grep là một bộ lọc, nó tìm và hiển thị các dòng trong input có chứa mẫu ký tự (pattern) mà người sử dụng chỉ ra. Có 2 cách chính để sử dụng grep:

Cách 1: lọc output của một chương trình khác. Cú pháp như sau: <command> | grep <pattern>.

Thí dụ 1, giả sử chúng ta có tệp tin kết quả mô phỏng là out.tr, có dạng như Hình 3.8. Chúng ta cần lọc ra các sự kiện (các dòng) nhận 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 56 - 73)

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

(110 trang)