Kiến trúc của NS2

Một phần của tài liệu Đánh giá và so sánh hiệu quả đảm bảo QoS cho truyền thông đa phương tiện của mô hình IntServ và DiffServ (Trang 66)

3. Cấu trúc các chương

5.1.2Kiến trúc của NS2

NS là bộ mô phỏng hướng sự kiện viết bằng C++, với một trình thông dịch OTcl (Object Oriented Tool Command Language) giao tiếp với người sử dụng. Để giảm thời gian xử lý gói tin và thời gian xử lý sự kiện, bộ lập lịch sự kiện và các đối tượng mạng cơ bản trong đường truyền dữ liệu được viết và dịch bằng C++. Những đối tượng được biên dịch này sẽ được kết nối tới bộ thông dịch OTcl qua trình liên kết OTcl. Trình liên kết này sẽ tạo ra các đối tượng OTcl tương ứng với mỗi đối tượng trong C++. Các hàm và biến trong đối tượng C++

chuyển thành các hàm và biến trong đối tượng OTcl tương ứng. Do đó, việc điều khiển các đối tượng C++ có thể được thực hiện trong ngôn ngữ mô phỏng OTcl. Các lớp trong C++ được tổ chức dưới dạng cây phân cấp, và tạo ra tương ứng trong OTcl. Hai cây phân cấp này có mối quan hệ chặt chẽ với nhau, với một lớp trong cây phân cấp thông dịch OTcl thì cũng có một lớp tương ứng trong cây phân cấp biên dịch. Đỉnh của cây phân cấp OTcl là TclObject. Người sử dụng tạo ra những đối tượng mô phỏng mới thông qua trình thông dịch OTcl, những đối tượng này được thiết lập tự động thông qua các phương thức được định nghĩa trong lớp TclClass. Chúng ta có thể thay đổi các tham số cho các đối tượng mô phỏng thông qua các phương thức được định nghĩa trong lớp TclObject.

Hình 5.1: Sự tương đồng giữa C++ và OTcl

NS sử dụng hai ngôn ngữ là vì hai lý do. Thứ nhất, các giao thức mô phỏng yêu cầu một ngôn ngữ lập trình hệ thống có thể làm việc hiệu quả với các thao tác trên byte, các header của gói tin và cài đặt các giải thuật thực hiện trên các tệp dữ liệu lớn. Với nhiệm vụ này thì tốc độ xử lý là quan trọng, còn thời gian thay đổi chương trình và thực hiện mô phỏng ít quan trọng hơn. Thứ hai, phần lớn công việc nghiên cứu về mạng là thay đổi các tham số mô phỏng, thực hiện cấu hình mạng, hoặc thăm dò nhanh một số trường hợp được cho là có khả năng. Trong trường hợp này, thời gian lặp đi lặp lại quan trọng hơn. C++ chạy nhanh hơn nhưng khi thay đổi thì chậm hơn, nên C++ thích hợp cho việc cài đặt chi tiết các giao thức và các đối tượng mạng. OTcl chạy chậm hơn nhưng có thể thay đổi rất nhanh, thích hợp cho việc cấu hình mô phỏng.

Quy trình thực hiện mô phỏng từ góc nhìn người dùng:

Hình 5.2: Tổng quan về NS từ góc nhìn của người sử dụng

Từ góc nhìn của người dùng, NS là bộ thông dịch script OTcl chứa bộ lập lịch các sự kiện mô phỏng, thư viện đối tượng các thành phần mạng, thư viện mô- đun thiết lập mạng. Để mô phỏng với NS, người nghiên cứu phải viết kịch bản bằng ngôn ngữ OTcl được gọi là chương trình mô phỏng hay kịch bản mô phỏng. Chương trình mô phỏng sẽ khởi tạo bộ lập lịch các sự kiện, thiết lập cấu hình mạng mô phỏng sử dụng các đối tượng mạng và các hàm thiết lập mạng trong thư viện, lập lịch cho các nguồn lưu lượng bắt đầu và kết thúc truyền tin…

Khi mô phỏng kết thúc, NS sinh ra một hay nhiều tệp tin vết chứa các thông tin chi tiết về các sự kiện xảy ra trong mạng mô phỏng dưới dạng văn bản. Tệp vết có hai loại, tệp vết có tên mở rộng .tr và tệp vết có tên mở rộng .nam. Tệp vết có tên mở rộng .tr chứa các thông tin chi tiết về những gì xảy ra và xảy ra khi nào. Có thể thực hiện rất nhiều phân tích khác nhau dựa vào file này. Tệp vết có đuôi là .nam ghi lại các 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.

Như đã nói trước đây, bộ mô phỏng NS-2 là mã nguồn mở. Điều này có nghĩa là trong trường hợp cần thiết, muốn tăng lượng thông tin trong tệp vết hoàn toàn có thể sửa đổi mã nguồn của NS-2 để thực hiện điều này.

Để phân tích, đánh giá được các tham số hiệu suất cần thiết từ các thông tin mà NS kết xuất ra tệp tin vết, người nghiên cứu thường phải dùng thêm một số công cụ dùng để vẽ đồ thị (như XGRAPH, gnuplot,...) và công cụ để tổng hợp các dữ liệu trong các tệp tin vết. Tất nhiên, người nghiên cứu hoàn toàn có thể tự viết lấy các đoạn mã (script) hoặc chương trình để phân tích kết quả theo yêu cầu của mình. Các ngôn ngữ Awk, PERL, hoặc Tcl thường được sử dụng để làm việc này. Nhiều nhà nghiên cứu đã chia sẻ một số kịch bản mô phỏng cũng như kịch bản xử lý kết quả tệp tin vết cho cộng đồng người sử dụng NS. Đây cũng chính là lợi thế cho người mới nghiên cứu mô phỏng mạng sử dụng bộ mô phỏng NS.

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

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 việc mô phỏng 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.

Hiện tại, NS hỗ trợ bốn loại nguồn phát sinh lưu lượng [14]:

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 trên mạng thật.

Các nguồn sinh lưu lượng trên thường do các thực thể giao thức 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 [19], 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 thực thể giao thức TCP.

5.2 Thực nghiệm mô phỏng mô hình IntServ

Giao thức dành trước tài nguyên RSVP là giao thức chính được dùng trong mạng với các dịch vụ tích hợp IntServ. Do vậy trong phần này tôi sẽ tập trung vào mô phỏng giao thức RSVP, cụ thể ở đây là giao thức RSVP_TE (RSVP Traffic Engineering) được thực hiện trong mạng chuyển mạch nhãn MPLS.

Do thư viện công cụ NS2 của gói phần mềm ns-allinonce-2.33 chưa hỗ trợ các tập lệnh RSVP nên tôi đã phải tìm và tải bản patch mns_rsvp.patch và thực hiện biên dịch lại ns-2.33 để hỗ trợ tập lệnh cần thiết trong các bài mô phỏng RSVP_TE.

Để thuận tiện cho việc mô phỏng và đánh giá, tất cả các bài mô phỏng trong phần này đều thống nhất sử dụng một mô hình mạng gồm 11 nút router như hình 5.3. Trong cấu hình này có nhiều đường đi từ nguồn tới đích và băng thông giữa các nút cũng khác nhau, do vậy nó đáp ứng được việc tìm đường đi và đặt trước tài nguyên trong mô phỏng mô hình IntServ.

Hình 5.3: Mô hình vật lý mạng thực hiện mô phỏng.

Các nguồn phát lưu lượng đều đặt tại nút 0 và các đích nhận lưu lượng (sink) đều đặt tại nút 10. Các kết nối giữa các nút đều là full-duplex với thời gian trễ là 30ms và có băng thông như trên hình (M: Mbps).

Sau đây là các bài mô phỏng đánh giá giao thức RSVP_TE.

5.2.1 Thực nghiệm 1: Mô phỏng mạng IP không hỗ trợ RSVP_TE

Mục tiêu của thực nghiệm này nhằm đánh giá lưu lượng trong mạng IP thông thường không hỗ trợ RSVP, nó truyền dữ liệu theo kiểu best effort. Nói chung không hạn chế số kết nối vì vậy các kết nối có thể chia sẽ một cách tương đối công bằng băng thông có thể sử dụng. Kết quả của thực nghiệm này còn được dùng để so sánh với kết quả của mạng IP có hỗ trợ RSVP_TE trong phần 5.2.2.

5.2.1.1 Thiết lập cấu hình mô phỏng 1

Mô hình vật lý của mạng mô phỏng có cấu hình như đã giới thiệu trong hình 5.3, tất cả các nút đều là router thông thường không hỗ trợ RSVP. Có hai nguồn lưu lượng được gắn vào nút n0 tương ứng có 2 đích lưu lượng được gắn vào nút n10. Mỗi nguồn phát lưu lượng với tốc độ 0.9 Mbps, kích thước gói 600B. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 5.4: Cấu hình mạng mô phỏng thực nghiệm 1

5.2.1.2 Thực hiện và phân tích kết quả mô phỏng 1

Thực hiện mô phỏng với lịch trình quy định trong script mô phỏng:

 Thời điểm 0.5s luồng 1 bắt đầu truyền.

 Thời điểm 2s luống 2 bắt đầu truyền.

 Thời điểm 5s cả hai luồng ngưng truyền. Kết quả:

 Luồng 1: Truyền 84 gói, mất 244 gói, tỉ lệ mất 28.9%

 Luồng 2: Truyền 599 gói, mất 240 gói, tỉ lệ mất 42.9%

Hình 5.5: Lưu lượng các luồng trong thực nghiệm 1

1 3 5 7 9 0 10 2 4 6 8 UDP CBR CBR UDP Sink Sink

Nhận xét:

Mạng IP sử dụng giải thuật định tuyến chọn đường ngắn nhất, do vậy cả hai đường đều đi theo con đường là 1_3_5_7_9. Băng thông trên đường này không đủ cho cả hai luồng, do vậy tất yếu xảy ra tắc nghẽn. Kết quả quan sát cho thấy cả hai luồng chia sẽ băng thông khá cân bằng và đều bị rớt gói tin tại router n3. Trong khi đó các đường khác có đủ băng thông nhưng lại không được sử dụng. Đây chính là vấn đề sử dụng tài nguyên không hiệu quả trong mạng IP thông thường.

5.2.2 Thực nghiệm 2: Mô phỏng mạng IP có hỗ trợ việc đặt trƣớc tài nguyên

Mục tiêu của thực nghiệm này nhằm mô phỏng quá trình tranh chấp dự trữ trước tài nguyên. Khi một nguồn tài nguyên đã được dự trữ trước, nếu có một yêu cầu giành trước tài nguyên tiếp theo mà không còn tài nguyên khả dụng thì yêu cầu đó bị từ chối.

5.2.2.1 Thiết lập cấu hình mô phỏng 2

Mô hình vật lý của mạng mô phỏng có cấu hình như đã giới thiệu trong hình 5.3, trong đó nút 0 và nút 10 là các router thông thường. Các nút từ 1 đến 9 là các router hỗ trợ RSVP tạo thành một miền IntServ.

Hai nguồn sinh lưu lượng được gắn vào nút n0 tương ứng với nó có hai đích nhận lưu lượng (sink0 và sink1) gắn vào nút n10 tương tự như thực nghiệm 1. Mỗi nguồn phát lưu lượng với tốc độ 0.8Mbps, kích thước gói 600B. Các luồng đều được truyền theo tuyến tường minh ER (Explicit Routing) định trước.

5.2.2.2 Thực hiện và phân tích kết quả mô phỏng 2

Thực hiện mô phỏng với lịch trình quy định trong script mô phỏng, các thời điểm bắt đầu, kết thúc các sự kiện như trong thực nghiệm 1.

 Thời điểm 0.5s luồng một bắt đầu truyền trên tuyến được thiết lập tường minh ER = 1_2_4_6_5_7_9 ràng buộc BW = 0.8Mbps.

 Thời điểm 2s luồng hai bắt đầu truyền trên tuyến được thiết lập tường minh ER = 1_3_5_7_9 với ràng buộc BW = 0.8Mbps.

 Thời điểm 5s cả hai luồng ngưng truyền. Quan sát hoạt động của mạng trên cửa sổ NAM:

Với NAM, ta có thể quan sát được hoạt động của mạng mô phỏng trong thực nghiệm. Nguồn lưu lượng màu xanh da trời là luồng một, luồng lưu lượng màu xanh lá cây là luồng hai. Hai luồng cùng truyền qua kết nối n5-n7, luồng hai bị rớt gói tin tại nút n7,

Hình 5.6: Hình ảnh hoạt động của mạng trong thực nghiệm 2 trên cửa sổ

nam

Phân tích quá trình thiết lập dự trữ tài nguyên qua tệp vết thu được:

Để thiết lập một luồng dự trữ trước tài nguyên, trước tiên bên gửi phát một bản tin Path dọc theo tuyến tường minh ER. Bản tin Path chứa một session-id và các yêu cầu băng thông. Khi bản tin Path tới đích bên nhận đáp ứng bằng một bản tin Resv. Bản tin Resv được truyền theo hướng ngược với bản tin Path bằng cách dùng thông tin của hop kề trước trong bản tin Path, nó cũng chứa cùng session-id như bản tin Path tương ứng. Bản tin Resv sẽ thiết lập việc giữ trữ tài nguyên ở các router, khi bản tin Resv tới đích thì quá trình thiết lập dự trự tài nguyên hoàn thành.

2 PATH EVENT at 0.132 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 4 PATH EVENT at 0.163 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0

6 PATH EVENT at 0.194 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 5 PATH EVENT at 0.225 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 7 PATH EVENT at 0.256 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 9 PATH EVENT at 0.287 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 7 RESV EVENT at 0.318 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 5 RESV EVENT at 0.349 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 6 RESV EVENT at 0.380 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 4 RESV EVENT at 0.410 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 2 RESV EVENT at 0.441 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 1 RESV EVENT at 0.473 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 3 PATH EVENT at 0.732 : SID: 0 RATE: 800000 BUCKET: 5000 SENDER: 0 5 PATH EVENT at 0.763 : SID: 1 RATE: 800000 BUCKET: 5000 SENDER: 0 7 PATH EVENT at 0.793 : SID: 1 RATE: 800000 BUCKET: 5000 SENDER: 0 9 PATH EVENT at 0.828 : SID: 1 RATE: 800000 BUCKET: 5000 SENDER: 0 9 RESVERROR EVENT at 0.893 : SID: 1 CODE: 1 VALUE: 0 NODE: 7 Kết quả truyền các luồng:

 Luồng 1 truyền 751 gói tỉ lệ mất gói 0%. (adsbygoogle = window.adsbygoogle || []).push({});

 Luồng 2 truyền 500 gói, mất 358 gói tỉ lệ mất gói 71.5 %.

Hình 5.7: Lưu lượng các luồng trong thực nghiệm 2

Nhận xét:

Luồng một được thiết lập trước theo tuyến ER = 1_2_4_6_5_7_9, luồng hai được thiết lập sau theo tuyến ER = 1_3_5_7_9. Như vậy hai luồng lưu lượng cạnh tranh băng thông nhau trên đường truyền n7-n9 do đường truyền này không

đủ băng thông cho cả hai tuyến. Do luồng một được thiết lập trước và đã thực hiện quá trình đặt trước tài nguyên, đến khi luồng hai thiết lập thì không còn đủ tài nguyên nữa nên việc thiết lập đặt trước tài nguyên của luồng hai bị thất bại. Luồng hai sẽ truyền theo kiểu best-effort, nghĩa là tận dụng lượng băng thông 0.2Mbps còn lại trên kết nối.

5.2.3 Thực nghiệm 3: Mô phỏng hoạt động tự khôi phục kết nối đƣờng truyền bị “đứt”

Mục tiêu của thực nghiệm này nhằm mô phỏng hoạt động của mạng RSVP khi một kết nói bị đứt. Nó sẽ tự động khôi phục và truyền theo một tuyến khả dụng mới với tài nguyên được dự trữ trước.

5.2.3.1 Thiết lập cấu hình mô phỏng 3

Mô hình vật lý của mạng mô phỏng có cấu hình như đã giới thiệu trong hình 5.3, trong đó nút 0 và nút 10 là các router thông thường. Các nút từ 1 đến 9 là các router hỗ trợ RSVP tạo thành một miền IntServ.

Có một nguồn sinh lưu lượng được gắn vào nút n0 tương ứng với nó có một đích nhận lưu lượng (sink0) gắn vào nút n10. Nguồn phát lưu lượng với tốc độ

Một phần của tài liệu Đánh giá và so sánh hiệu quả đảm bảo QoS cho truyền thông đa phương tiện của mô hình IntServ và DiffServ (Trang 66)