WISSIM 1.0 đáp ứng được việc mô phỏng các thuật toán và các thực nghiệm đơn, khảo sát quá trình hoạt động của các gói tin truyền đi trong mạng.. Chưa có tính năng so sánh và đánh giá c
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
Đinh Văn Đông
NGHIÊN CỨU XÂY DỰNG CÔNG CỤ PHẦN MỀM HỖ TRỢ PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN ĐỊNH TUYẾN TRÊN
Trang 2LỜI CAM ĐOAN
Tôi – Đinh Văn Đông – cam kết luận văn là công trình nghiên cứu của bản thân tôi dưới sự hướng dẫn của PGS.TS Nguyễn Khanh Văn
Các kết quả nêu trong luận văn là trung thực, không phải là sao chép toàn văn của bất
Trang 3LỜI CẢM ƠN
Lời đầu tiên em xin cảm ơn các thầy cô giáo trong trường Đại Học Bách Khoa Hà Nội và đặc biệt là các thầy cô trong viện Công Nghệ Thông Tin đã truyền đạt cho em những kiến thức, những bài giảng vô cùng quý giá trong suốt thời gian học Đại học cũng như học Cao học tại trường để em có một nền tảng kiến thức chắc chắn và vững vàng như ngày hôm nay
Đặc biệt em xin gửi lời cảm ơn đến PGS.TS Nguyễn Khanh Văn,
người thầy đã tận tình giúp đỡ và chỉ bảo em trong suốt thời gian chuẩn bị và làm luận văn tốt nghiệp Trong thời gian làm việc với thầy, em đã tiếp thu được rất nhiều kiến thức bổ ích và học hỏi nhiều kinh nghiệm trong nghiên cứu khoa học Đây là nền tảng vô cùng cần thiết cho những người muốn làm những công việc đòi hỏi nghiên cứu chuyên sâu, sáng tạo và để phát triển xa hơn trong lĩnh vực liên quan đến khoa học và công nghệ Điều này rất cần thiết cho em trong quá trình công tác và phát triển bản thân về sau
Và cuối cùng em xin gửi lời cảm ơn tới gia đình, bạn bè đã động viên, giúp đỡ cũng như các lãnh đạo và đồng nghiệp tại cơ quan đã hỗ trợ tạo điều kiện giúp em trong suốt thời gian theo học
Trang 4MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
MỤC LỤC iii
DANH MỤC CÁC HÌNH vi
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ viii
DANH MỤC CÁC BẢNG ix
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI 1
1.1 Giới thiệu tổng quan về đề tài 1
1.1.1 Tính cấp thiết của đề tài nghiên cứu 1
1.1.2 Nhiệm vụ cụ thể chi tiết của đề tài luận văn 2
1.1.3 Cấu trúc luận văn 2
CHƯƠNG 2: CÁC NỀN TẢNG VỀ CÔNG CỤ MÔ PHỎNG MẠNG 4
2.1 Tổng quan về công cụ mô phỏng mạng 4
2 1.1 Khái niệm cơ bản về mô phỏng mạng 4
2.1.2 Phân loại các công cụ mô phỏng mạng 4
2.1.3 So sánh nền tảng mô phỏng phổ biến OMNET++ và NS2 5
2.2 Công cụ mô phỏng mạng không dây OMNeT++ 6
2.2.1 Giới thiệu về OMNeT++ 6
2.2.2 Các thành phần chính của OMNeT++ 7
2.2.3 Mô hình OMNeT++ 8
2.2.4 Lập trình thuật toán trong Omnet++ 12
2.2.5 Xây dựng module cơ sở - Thuật toán Greedy 13
2.2.5.1 Cấu trúc một node mạng 13
2.2.5.2 Phương thức nhận/ gửi gói tin data 14
2.2.5.3 File Network.NED 15
2.2.5.4 File Omnetpp.ini 16
2.2.5.5 Trích xuất thông tin kết quả mô phỏng 16
2.2.6 Cài đặt thuật toán mới vào trong thư viện 17
Trang 52.2.7 Hạn chế của việc sử dụng thư viện INET 20
2.3 Castalia 20
2.3.1 Giới thiệu về Castalia 21
2.3.2 Tại sao sử dụng Castalia? 21
2.3.3 Sử dụng Castalia để cài đặt thuật toán định tuyến 22
CHƯƠNG 3: XÂY DỰNG CÔNG CỤ NÂNG CAO HỖ TRỢ MÔ PHỎNG PHỨC TẠP 24
3.1 Công cụ mô phỏng Wissim cũ 24
3.2 Xây dựng mô hình client-server để triển khai thực nghiệm 27
3.2.1 Mô hình mẫu cho phiên bản Wissim client 29
3.2.1.1 Định nghĩa traffic bằng các lựa chọn tập nguồn và tập đích 29
3.2.1.2 Chạy các cuộc thực nghiệm 30
3.2.1.3 Cho phép lựa chọn các tiêu chí và đưa so sánh dưới dạng biểu đồ 31
3.2.2 Thiết kế lớp cho phiên bản Wissim client 34
3.2.3 Thiết kế cho Wissm Server 37
3.2.3.1 API khởi tạo mạng (network) 38
3.2.3.2 API tạo một group trong mạng 39
3.2.3.3 API tạo một traffic trong mạng 41
3.2.3.4 API lấy về danh sách toàn mạng do người dùng tạo ra 41
3.2.3.5 API thực thi một kịch bản mạng 43
3.2.3.6 API lấy về trạng thái của thực nghiệm bằng các truyền vào sessionId 44
3.2.3.8 Lưu trữ lại các cuộc thực nghiệm 45
3.2.4 Sử dụng mongoDB để lưu trữ 46
3.2.4.1 Lữu trữ cấu hình và dữ liệu của mạng 46
3.2.4.2 Lưu trữ nhóm các nút mạng trong groups collection 47
3.2.4.3 Lữu trữ cặp nguồn đích trong traffics collection 47
3.2.4.4 Lữu trữ kết quả các cuộc thực nghiệm trong experiments collection 48
3.3 Thực nghiệm trên WISSIM 2.0 49
3.3.1 Khởi tạo một kịch bản mạng 49
3.3.2 Tiến hành các cuộc thực nghiệm 50
Trang 63.3.2.1 Tạo mới một cuộc thực nghiệm 50
3.3.2.2 Tạo một thực nghiệm phức hợp 51
3.3.2.3 So sánh các cuộc thực nghiệm 51
3.3.2.4 So sánh về thời gian sống trung bình 52
3.3.2.5 So sánh về năng lượng tiêu thụ trung bình 54
3.3.2.6 So sánh trên nhiều traffic khác nhau 56
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 59
4.1 Kết luận 59
4.2 Hướng phát triển 60
TÀI LIỆU THAM KHẢO 61
Trang 7DANH MỤC CÁC HÌNH
Hình 1: Các module đơn giản và kết hợp 8
Hình 2: Các kết nối 10
Hình 3: Truyền message 11
Hình 4 File kịch bản omnetpp.ini 16
Hình 5 File ned định nghĩa một simple module 17
Hình 6 Định nghĩa một message trong Omnet++ 18
Hình 7 Cài đặt thuật toán Greedy 19
Hình 8 Hàm handleMessage trong thuật toán Greedy 19
Hình 9 Biểu đồ use case của người dùng tác động vào hệ thống Error! Bookmark not defined Hình 10 Biểu đồ quá trình tạo mạng Error! Bookmark not defined Hình 11 Biểu đồ quá trình tạo các cuộc thực nghiệm Error! Bookmark not defined Hình 12 Các bước tạo một biểu đồ so sánh kết quả thực nghiệm Error! Bookmark not defined. Hình 13 Kiến trúc hệ thống WIssim cũ 24
Hình 14 Kiến trúc cải tiến của Wissim 2.0 27
Hình 15 Mô hình thiết kế chức năng tạo traffic cho mạng trong Wissim mới 29
Hình 16 Mô hình thiết kế hạy các thực nghiệm trong Wissim mới 30
Hình 17 Mô hình thiết kế cho việc so sánh giữa các cuộc thực nghiệm trong bản Wissim mới 31
Hình 18 Thiết kế cho việc chọn các cuộc thực nghiệm của bản Wissim mới 32
Hình 19 Ví dụ về một biểu đồ được trích xuất cho bản Wissim mới 33
Hình 20 Luồng xử lý của Wissim server 37
Hình 21 API thêm mới một network 38
Hình 22 Kết quả trả về khi thực hiện API tạo mới network 39
Hình 23 Lớp Java NetworkModel thể hiện cấu trúc của 1 Network 39
Hình 24 Lớp Java AddGroupModel thể hiện cấu trúc của một Group 40
Trang 8Hình 25 Lớp Java AddTrafficMode thể hiện cấu trúc của một Traffic 41
Hình 26 Phần body cho việc gọi về danh sách mạng cho client tạo ra 42
Hình 27 Kết quả trả về danh sách các network đã tạo 42
Hình 28 Cấu trúc body khi thực thi một kịch bản mạng 43
Hình 29 Kết quả API trả về khi thực hiện một kịch bản mạng 43
Hình 30 Kết quả API trả về trạng thái của cuộc thực nghiệm 44
Hình 31 Kết quả API trả về khi cuộc thực nghiệm kết thúc 44
Hình 32 Class Java thể hiện model của cuộc thực nghiệm 45
Hình 33 Class Java ResultModel thể hiện model của kết quả trả về 46
Hình 34 Dữ liệu cấu hình network bên trong MongoDB 47
Hình 35 Dữ liệu của các nhóm nút mạng trong mongoDb 47
Hình 36 Dữ liệu của traffic bên trong mongoDb 48
Hình 37 Dữ liệu kết quả các cuộc thực nghiệm trong mongoDb 48
Hình 38 Tạo mới một mạng Error! Bookmark not defined Hình 39 Hình ảnh khi một mạng được tạo ra Error! Bookmark not defined Hình 40 Tạo một hố mạng Error! Bookmark not defined Hình 41 Hình ảnh của một hố mạng được tạo ra Error! Bookmark not defined Hình 42 Định nghĩa 2 group bên vùng hố để tiến hành khảo sát Error! Bookmark not defined Hình 43 Tạo ra một traffic trong mạng Error! Bookmark not defined Hình 44 Lưu trữ lại network Error! Bookmark not defined Hình 45 Nạp lại thông tin của mạng tên sedic1 đã tạo trước đó Error! Bookmark not defined Hình 46 Nạp lại cấu hình mạng được lưu trữ ở H.35 từ server Error! Bookmark not defined. Hình 47 Các thông số cần thiết cho việc chạy một cuộc thực nghiệm 51
Hình 48 Kết quả thu được sau khi chạy xong các cuộc thực nghiệm 51
Hình 49 Cấu hình mạng tiến hành các thử nghiệm 52
Hình 50 Thí nghiệm với thuật toán GPSR 53
Hình 51 Thí nghiệm với thuật toán ShortestPath 53
Hình 52 Chọn khu vực cần so sánh về mặt năng lượng 55
Hình 53 So sáng năng lượng tiêu thụ trung bình của toán mạng và của vùng ven hố 55
Hình 54 Định nghĩa hai phân vùng truyền tin 56
Hình 55 Trafic với 5 cặp nguồn đích 56
Hình 56 Traffic với 10 cặp nguồn đích 57
Trang 9Hình 57 Chạy trên 2 traffic với cùng 1 thuật toán 57Hình 58 Kết quả so sánh thời gian sống của mạng giữa 2 traffic khác nhau 58Hình 59 Biểu đồ thể hiện so sánh năng lƣợng trung bình trên toàn mạng với traffic khác nhau 58
Trang 10DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ
OMNeT++ Objective Modulear Network Testbed in C++ OPNET OPtimized Network Engineering Tool
IDE Integrated Development Environment
Trang 11DANH MỤC CÁC BẢNG
Bảng 1 Các công cụ mô phỏng mạng hiện tại 5 Bảng 2 So sánh giữa OMNeT++ và NS2 6
Trang 12CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI
Trong phần này, luận văn (LV) trình bày tổng quan về đề tài nghiên cứu cũng như khả năng ứng dụng thực tế, từ đó định hướng giải quyết nhiệm vụ Sau đó, LV giới thiệu tổng quan về các công cụ mô phỏng phổ biến, và chi tiết về công cụ mô phỏng OMNET++ đã được lựa chọn ứng dụng
1.1 Giới thiệu tổng quan về đề tài
1.1.1 Tính cấp thiết của đề tài nghiên cứu
Sự phát triển nhanh chóng của công nghệ thông tin và truyền thông tạo điều kiện cho các thế hệ cảm biến mới ra đời với giá thành thấp, khả năng triển khai quy mô lớn
và có độ chính xác cao Mạng cảm biến không dây (WSN) đang được sử dụng rộng rãi trong các lĩnh vực về chăm sóc sức khỏe, bảo vệ môi trường, năng lượng, khoa học, quân sự Với mục tiêu giảm giá thành, tăng hiệu quả trong công nghiệp và thương mại, mạng cảm biến không dây sẽ mang lại những tiện nghi và ứng dụng vào trong đời sống hàng ngày Để việc triển khai vào thực tế sao cho hiệu quả cần một công cụ mô phỏng
để tiến hành thực nghiệm về các thuật toán để cài đặt lên các bộ cảm biến (sensor) sao cho hiệu quả nhất để làm giảm chi phí, giá thành của sản phẩm
Phòng thí nghiệm SEDIC, thuộc Đại học Bách Khoa Hà Nội là nơi phát triển nhiều thuật toán định tuyến và công cụ mô phỏng mạng Một trong những sản phẩm đó là bộ công cụ mô phỏng mạng không dây WISSIM 1.0 chạy trên nền tảng NS2 WISSIM 1.0 đáp ứng được việc mô phỏng các thuật toán và các thực nghiệm đơn, khảo sát quá trình hoạt động của các gói tin truyền đi trong mạng Tuy nhiên, sản phẩm này còn có nhiều hạn chế với phiên bản này, bao gồm:
Việc cấu hình kịch bản mạng quá phức tạp gây khó khăn với nhà phát triển công cụ WISSIM và cài đặt thuật toán trên nền tảng NS2
Thời gian chạy các cuộc thực nghiệm quá lâu với các kịch bản mạng quy
mô lớn và thuật toán phức tạp
Trang 13 Chưa cho phép thực hiện các cuộc thực nghiệm phức hợp ( thực hiện cùng một thuật toán chạy nhiều lần, thay đổi các cặp nguồn đích và triển khai song song đồng thời nhiều thử nghiệm, )
Chưa có tính năng so sánh và đánh giá các kết quả đạt được ( so sánh đánh giá giữa các cuộc thử nghiệm)
Nhiệm vụ cần đặt ra là tìm kiếm một nền tảng mô phỏng mạng mới thay thế NS2, mô phỏng chính xác quá trình truyền tin của mạng cảm biến không dây, tốc độ triển khai phải nhanh, hỗ trợ cho các nhà phát triển thuật toán dễ dàng cài đặt Hơn thế nữa cần phải cải tiến công cụ WISSIM 1.0 để có thể thực hiện đồng thời các cuộc thực nghiệm cũng như đưa ra các kết quả đánh giá trực quan trong thời gian hợp lý
1.1.2 Nhiệm vụ cụ thể chi tiết của đề tài luận văn
Phần mềm mô phỏng mạng chuyên dụng WISSIM 1.0, phiên bản cũ được xây dựng và phát triển trên nền tảng NS2 với những tính năng tạo các cuộc thực nghiệm đơn và mô phỏng lại quá trình truyền tin của mỗi thực nghiệm Với những hạn chế của nền tảng NS2 cũng như của công cụ mô phỏng mạng WISSIM 1.0 đã nêu ở trên thì nhiệm vụ cụ thể của đề tài luận văn sẽ bao gồm các công việc :
Tìm hiểu chung về các công cụ mô phỏng và đi sâu tìm hiểu về nền tảng
mô phỏng mạng OMNET++ cũng như tiến hành cài đặt thuật toán định tuyến đơn giản
Tiến hành cải tiến công cụ WISSIM 1.0 , xây dựng lại giao thức giữa client-server và thay đổi các tổ chức dữ liệu trên nền tảng cũ
Xây dựng bổ sung chức năng cho phép tiến hành các thực nghiệm phức hợp và thực hiện đồng thời nhiều cuộc thực nghiệm
Xây dựng tính năng vẽ biểu đồ so sánh đánh giá giữa các cuộc thực nghiệm
1.1.3 Cấu trúc luận văn
Cấu trúc luận văn bao gồm 4 chương với các nội dung chính của từng chương như sau :
Chương 1 : Giới thiệu tổng quan về đề tài : Chương này trình bày tổng quan về yêu
cầu cũng như tính cấp thiết và các nhiệm vụ cần đạt được của đề tài
Trang 14Chương 2 : Các nền tảng về công cụ mô phỏng mạng : Trình bày tổng quan về các nền
tảng mô phỏng mạng và chi tiết về nền tảng OMNeT++ đồng thời trình bày về cách sử dụng thư viện Castalia để thay thế nền tảng cũ giúp cải tiến việc thực hiện thực nghiệm
Chương 3 : Xây dựng công cụ mô phỏng mạng phức tạp : Trong chương này luận văn
trình bày về các đóng góp chính của tác giả trong việc xây dựng công cụ mô phỏng mạng phức tạp cũng như cách triển khai các cuộc thực nghiệm để tiến hành so sánh giữa các thuật toán định tuyến
Chương 4 : Kết luận và hướng phát triển : Đây là phần cuối của luận văn, tác giả trình
bày về các kết quả đạt được trong luận văn và đưa ra hướng phát triển tiếp theo của đề
tài nghiên cứu
Trang 15CHƯƠNG 2: CÁC NỀN TẢNG VỀ CÔNG CỤ MÔ PHỎNG MẠNG
2.1 Tổng quan về công cụ mô phỏng mạng
Trong phần này luận văn sẽ trình bày tổng quan về các công cụ mô phỏng hiện nay trên thị trường và đi sâu vào tìm hiểu công cụ mô phỏng OMNeT++ Các kiến thức về OMNET++ được các tổng hợp từ tài liệu trên trang chủ OMNET++ (tài liệu tham khảo
số [1], [2])
2 1.1 Khái niệm cơ bản về mô phỏng mạng
Các công cụ mô phỏng mạng thực hiện mô hình hóa mạng máy tính một cách trực quan nhất Mô hình hóa giúp cho việc hình dung và thay đổi các đặc tính và phân tích các kết quả một cách đơn giản hơn Việc tạo ra một mô hình mô phỏng giúp cho việc triển khai thực tế sẽ bớt rủi ro và dự đoán trước các tính huống xảy ra trong thực tế, từ
đó giảm được chi phí so với việc thực nghiệm thực tế
Các công cụ mô phỏng nghiên cứu trong môi trường lí tưởng nên nhiều khi cũng chưa thể chính xác tuyệt đối và vẫn có sai số trong thực tế Tuy nhiên, việc tạo ra các
mô hình đủ tốt để giúp việc mô phỏng sát với thực tế nhất có thể giúp các nhà nghiên cứu có thể kiểm tra các hoạt động của mạng và thực hiện triển khai các thuật toán chạy một các hiệu quả nhất
2.1.2 Phân loại các công cụ mô phỏng mạng
Các công cụ mô phỏng mạng khác nhau có thể được phân loại dựa trên một vài tiêu chuẩn, ví dụ như là sản phẩm thương mại hay mã nguồn mở, hoặc phân loại theo đó là một công cụ mô phỏng đơn giản hay phức tạp, …
Một số công cụ mô phỏng mạng điển hình và có lượng người dùng đông là NS2, NS3, Omnet++, OPNET
Bảng 1: Phân loại một số công cụ mô phỏng mạng
Trang 16Công cụ
Bảng 1 Các công cụ mô phỏng mạng hiện tại
Trong đó, NS2 và Omnet++ là hai công cụ mã nguồn mở đang được phần lớn các nhà nghiên cứu sử dụng, bởi mức độ chi tiết và chính xác cao NS2 có mô hình mô phỏng đơn giản, hơn nữa hỗ trợ rất ít các giao thức được sử dụng trong mạng cảm biến không dây, bên cạnh đó, các định dạng gói tin, mô hình năng lượng, hay các mô hình cảm biến hiện tại trong NS2 cũng không phù hợp với mạng cảm biến không dây Omnet++
có thể đáp ứng được điều này, cụ thể là framework mô phỏng mạng - bao gồm mạng cảm biến không dây - INET
2.1.3 So sánh nền tảng mô phỏng phổ biến OMNET++ và NS2
Một số đặc điểm của chương trình mô phỏng mạng OMNeT++ và NS2 (NS2 tham khảo tài liệu số [8] , [9]) được so sánh ở bảng dưới đây:
Nền tảng tính toán Song song Phân tán
Các topo Cấu trúc phân cấp Cấu trúc thống
nhất Công cụ định nghĩa các
Trang 17Các module dành cho các
Tính linh hoạt của các mô
Sự thừa nhận của khoa
2.2 Công cụ mô phỏng mạng không dây OMNeT++
2.2.1 Giới thiệu về OMNeT++
OMNeT++ viết tắt của Objective Modulear Network Testbed in C++, là một chương trình mô phỏng sự kiện rời rạc, với các module phân cấp lồng nhau và giao tiếp với nhau bằng các gói tin message được gửi qua các kênh truyền OMNeT++ là một hệ thống công cụ cơ bản để viết các kịch bản mô phỏng chứ không cung cấp các thành phần đặc biệt cho việc mô phỏng mạng máy tính, mạng hàng đợi, kiến trúc hệ thống hay bất kỳ lĩnh vực nào khác Tuy nhiên cũng có nhiều mô hình mô phỏng đã được xây
Trang 18dựng sẵn từ trước ví dụ như internet, Ipv6, mạng di động,… Việc lập trình trên OMNeT++ được thực hiện với C++
OMNeT++ có một số ưu điểm như có cấu trúc tốt, có tính module cao, không chỉ giới hạn trong việc mô phỏng các giao thức mạng Tuy nhiên OMNeT++ cũng vẫn tồn tại một số nhược điểm, ví dụ như còn khá mới và có ít mô hình mô phỏng
OMNeT++ cung cấp sẵn các thành phần tương ứng với các mô hình thực tế Các thành phần này (còn được gọi là các module) được lập trình theo ngôn ngữ C++, sau
đó được tập hợp lại thành những thành phần hay những mô hình lớn hơn bằng một ngôn ngữ bậc cao (NED) OMNeT++ hỗ trợ giao diện đồ hoạ, tương ứng với các mô hình cấu trúc của nó đồng thời phần nhân mô phỏng (simulation kernel) và các module của OMNeT++ cũng rất dễ dàng nhúng vào trong các ứng dụng khác
2.2.2 Các thành phần chính của OMNeT++
OMNeT++ bao gồm các thành phần chính sau:
• Thư viện nhân mô phỏng (simulation kernel)
• Trình biên dịch cho ngôn ngữ mô tả hình trạng (topology description language) - NED (nedc)
• Trình biên tập đồ hoạ (graphical network editor) cho các file NED (GNED)
• Giao diện đồ hoạ thực hiện mô phỏng, các liên kết bên trong các file thực hiện mô phỏng (Tkenv)
• Giao diện dòng lệnh thực hiện mô phỏng (Cmdenv)
• Công cụ vẽ đồ thị kết quả vector ở đầu ra (Plove) với giao diện đồ họa
• Công cụ mô tả kết quả vô hướng ở đầu ra (Scalars) với giao diện đồ họa
• Công cụ tài liệu hoá các mô hình
• Các tiện ích khác
Trang 19• Các tài liệu hướng dẫn, các ví dụ mô phỏng
2.2.3 Mô hình OMNeT++
1 Cấu trúc phân cấp của các module
Một mô hình trong OMNeT++ chứa các module lồng nhau có cấu trúc phân cấp, trao đổi thông tin với nhau bằng cách gửi các gói tin Mỗi mô hình này thường biểu diễn cho một hệ thống mạng Module mức cao nhất trong cấu trúc phân cấp được gọi là module hệ thống Module này có thể chứa các module con, các module con cũng có thể chứa các module con của riêng nó Độ sâu phân cấp đối với các module là không giới hạn, điều này cho phép người sử dụng có thể dễ dàng biểu diễn cấu trúc logic của một
hệ thống trong thực tế bằng cấu trúc phân cấp của OMNeT++ Cấu trúc của mô hình có thể được mô tả bằng ngôn ngữ NED
Hình 1: Các module đơn giản và kết hợp
Các module có thể chứa nhiều module con và được gọi là module kết hợp Các module đơn giản là các module có cấp thấp nhất trong cấu trúc phân cấp, chứa các thuật toán của mô hình Người sử dụng triển khai các module đơn giản bằng ngôn ngữ C++, sử dụng các thư viện mô phỏng của OMNeT++
2 Kiểu module
Tất cả các module dù là đơn giản hay phức tạp đều là các đối tượng cụ thể của các kiểu module Trong khi mô tả các mô hình, người sử dụng định nghĩa ra các kiểu module; các đối tượng cụ thể của các kiểu module này được sử dụng như các thành phần của các kiểu module phức tạp hơn Cuối cùng, người sử dụng tạo module hệ
Trang 20thống như một đối tượng cụ thể của kiểu module đã được định nghĩa trước đó, tất cả các module của mạng đều là module con (hoặc là con của module con) của module hệ thống
Khi một kiểu module được sử dụng như một khối dựng sẵn (building block), sẽ không thể phân biệt đó là một module đơn giản hay phức tạp Điều này cho phép người
sử dụng có thể tách các module đơn giản ra thành nhiều module đơn giản được nhúng trong một module kết hợp, và ngược lại có thể tập hợp các chức năng của một module kết hợp trong một module đơn giản mà không ảnh hưởng gì đến các kiểu module đã được người sử dụng định nghĩa
Kiểu module có thể được lưu trữ trong một file riêng rẽ Điều này cho phép người sử dụng có thể nhóm các kiểu module lại và tạo ra một thư viện thành phần
3 Message, cổng, liên kết
Các module trao đổi thông tin bằng việc gửi các message Trong thực tế, message
có dạng khung (frame) hoặc là các gói tin (packet) được truyền đi trong mạng Các message có thể có cấu trúc phức tạp tuỳ ý Các module đơn giản có thể gửi các message đi một cách trực tiếp đến vị trí nhận hoặc gửi đi theo một đường dẫn định sẵn thông qua các cổng và các liên kết
“Thời gian mô phỏng cục bộ” (local simulation time) của một module tăng lên khi module nhận được một message Message có thể đến từ một module khác hoặc đến từ cùng một module (self-message)
Cổng (gate) là các giao tiếp vào ra của module Message được gửi đi qua các cổng
ra và được nhận vào thông qua các cổng vào
Mỗi kết nối (connection) hay còn gọi là liên kết (link) được tạo bên trong một mức đơn trong cấu trúc phân cấp của các module: bên trong một module kết hợp, một kết nối có thể được tạo ra giữa các cổng tương ứng của hai module con, hoặc giữa cổng của module con với cổng của module kết hợp
Trang 21Hình 2: Các kết nối
4 Mô hình truyền gói tin
Một kết nối có thể có ba tham số đặc trưng Những tham số này rất thuận tiện cho các mô hình mô phỏng mạng thông tin nhưng không hữu dụng lắm cho các kiểu mô hình khác Ba tham số này bao gồm:
• Độ trễ đường truyền (propagation delay) tính bằng s - giây
• Tỉ số lỗi bit, được tính bằng số lỗi/bit
• Tốc độ tryền dữ liệu, được tính bằng số bit/s
Các tham số này là tuỳ chọn Giá trị của các tham số này có thể khác nhau với mỗi kết nối, phụ thuộc vào kiểu của liên kết (hay còn gọi là kiểu của kênh truyền - channel type)
Độ trễ đường truyền là tổng thời gian đến của message bị trễ đi khi truyền qua kênh Tỉ số lỗi bit ảnh hưởng đến quá trình truyền message qua kênh Tỉ số này là xác suất các bit bị truyền sai Do đó xác suất để một message độ dài n bit truyền đi chính xác là:
P (message gửi đi được nhận chính xác) = (1 - ber)n
, trong đó ber là tỉ số lỗi bit và n là số bit của message
Các message truyền đi đều có một cờ lỗi, cờ này sẽ được thiết lập khi việc truyền message có lỗi
Trang 22Tốc độ truyền dữ liệu được tính theo đơn vị bit/s, và nó được sử dụng để tính thời gian để truyền một gói tin Khi tham số này được sử dụng, quá trình gửi message
đi trong mô hình sẽ tương ứng với bit đầu tiên được truyền đi và message được tính là đến nơi sau khi bên nhận đã nhận được bit cuối cùng
Trang 23Các tham số có kiểu số có thể được dùng để cấu hình topology rất dễ dàng Nằm trong các module kết hợp, các tham số này có thể được dùng để chỉ ra số module con,
số cổng giao tiếp và cách các kết nối nội bộ được tạo ra
2.2.4 Lập trình thuật toán trong Omnet++
Các module đơn giản có thể chứa các thuật toán là các hàm của C++ Sự linh hoạt và sức mạnh của C++, kết hợp với các thư viện mô phỏng của OMNeT++ tạo điều kiện dễ dàng cho người sử dụng tạo ra các thuật toán cần thiết Các lập trình viên mô phỏng có thể chọn lựa việc mô tả theo sự kiện hay theo tiến trình, có thể dễ dàng sử dụng những khái niệm của lập trình hướng đối tượng (như đa hình, kế thừa) và thiết kế các mẫu thử (pattern) để mở rộng chức năng của quá trình mô phỏng
Các đối tượng mô phỏng (message, module, queue ) được thể hiện qua các lớp của C++ Một số lớp cơ bản trong thư viện mô phỏng của OMNeT++:
Trang 242.2.5 Xây dựng module cơ sở - Thuật toán Greedy
Hiện tại, hầu hết các thuật toán định tuyến địa lý cho mạng cảm biến không dây đều xuất phát từ một thuật toán phổ biến: thuật toán định tuyến tham lam (Greedy Routing Algorithm) Vì vậy, phần trình bày này sẽ mô tả cách xây dựng một module cơ
sở cho tất cả các thuật toán định tuyến phát triển sau này - module Greedy (Tham khảo
về thuật toán Greedy ở tài liệu số [5])
2.2.5.1 Cấu trúc một node mạng
Như đã trình bày ở phần giới thiệu về Omnet++, để xây dựng một simple module, cần xây dựng file NED - mô tả cấu hình node mạng, và class C++ tương ứng - mô tả hành vi của node mạng Trong đó cấu hình node mạng bao gồm các thuộc tính (parameters) của node mạng - thuộc tính về giao diện và thuộc tính của thuật toán, và các cổng (gates) của node mạng
Trang 25class Greedy : public cSimpleModule {
std:: vector < Node > nbList ;
std:: vector < Node > network ;
Node * mySelf , * dest ;
virtual void initialize();
protected:
virtual void finish() override;
virtual void init();
// dump
void dumpNeighbors();
};
2.2.5.2 Phương thức nhận/ gửi gói tin data
Trong khi INET xem việc gửi nhận gói tin giữa các node mạng là phương thức để giao tiếp trong mạng, mỗi node mạng hoạt động độc lập và không biết gì về hoạt động của các node mạng khác, thì ở đây, chúng ta sẽ lập trình các hoạt động của node mạng theo cơ chế tập trung, tức là một node mạng sẽ có danh sách toàn bộ node mạng và điều khiển chúng Thay vì truyền tin theo phương thức truyền thống - gửi gói tin từ node này sang node khác, một node mạng muốn gửi tin chỉ cần bật tín hiệu, và thông tin về gói tin này sẽ được ghi vào buffer của node
mà nó muốn gửi tới
Vậy thực chất, phương thức gửi nhận gói tin chỉ cần thực hiện như sau:
Trang 26void Greedy::sendData(Data * pkt) {
FILE *fp = fopen("Trace.tr", "a");
FILE *fp = fopen("Trace.tr", "a");
Trang 272.2.5.4 File Omnetpp.ini
File omnetpp.ini là file kịch bản, nơi để khai báo các thông số của mạng: ví dụ như số node mạng, vị trí của mỗi node mạng, thời gian mô phỏng, khoảng cách giữa 2 lần gửi gói tin data liên tiếp, …
2.2.5.5 Trích xuất thông tin kết quả mô phỏng
Trước tiên, mục này sẽ làm rõ một số thông số phổ biến thể hiện hiệu năng của thuật toán, cần
đo đạc trích xuất sau khi mô phỏng Sau đó là cách thức để tính toán được các thông số này
a Một số thông số phổ biến thể hiện hiệu năng của thuật toán:
- Chỉ số cân bằng tải (Balance Index, viết tắt là BI): BI thể hiện sự cân bằng lưu lượng làm
việc (gửi/nhận gói tin) giữa các node mạng; được định nghĩa bởi công thức:
∑ ∑ trong đó: pk là tổng số gói tin mà node mạng thứ i forward đi (nhận được và gửi cho node mạng khác) và m là tổng số node mang < BI < 1 BI càng lớn thể hiện mạng có cân bằng tải càng tốt Việc cân bằng tải của mạng không tốt sẽ dẫn đến hiện tượng một số node mạng bị quá tải sớm và không làm việc được nữa
- Độ dãn đường đi của gói tin (Routing path stretch): là tỉ số giữa số hopcount (số bước
nhảy của gói tin) của thuật toán và số hopcount trên đường đi ngắn nhất theo lý thuyết
Độ dài đường đi của gói tin là một trong những yếu tố quan trọng mà mọi nhà nghiên cứu về mạng cảm biến không dây đều hướng tới: đường đi ngắn tiết kiệm chi phí truyền tin và năng lượng làm việc cho mạng
Trang 28- Packet Overhead: Một yếu tố quan trong khác trong việc đánh giá hiệu năng của mạng
cảm biến không dây là mức độ tiêu thụ năng lượng của mạng Tuy nhiên, mức độ tiêu thự năng lượng còn phụ thuộc các thông số mô phỏng khác như giao thức ở tầng MAC hoặc
mô hình năng lượng của cảm biến
Do đó, thay vì đánh giá mức độ tiêu thụ năng lượng, có một hình thức đánh giá thay thế, đó là
đo packet overhead - tổng hopcounts của tất cả các gói tin Có thể thấy rằng packet overhead
tỷ lệ với mức độ tiêu thụ năng lượng
b Ghi/trích xuất file trace:
Để đánh giá các thông số kể trên, trong quá trình mô phỏng, chúng ta cần lưu lại thông
tin gói tin vào ba file, giả sử đặt tên là Trace.tr, PacketOverhead.tr và Hopcounts.tr:
- File Trace.tr: file này lưu lại thông tin về đường đi của gói tin như là thời điểm gửi gói tin,
ID của node gửi gói tin, ID của node nhận gói tin Mỗi khi gọi hàm sendData() chúng ta sẽ ghi vào file Trace.tr này (đã mô tả ở trên)
- File Packetoverhead.tr: file này giúp chúng ta tính được BI và packet overhead
Ghi thông tin ra file Packetoverhead.tr bằng cách: thêm một thuộc tính countPacket cho mỗi node mạng, và countPacket được tăng lên một mỗi khi hàm sendData() được thực hiện
- File Hopcounts.tr: file này giúp chúng ta tính được routing path stretch
Ghi thông tin ra file Hopcounts.tr bằng cách thêm thuộc tính hopCount vào gói tin, mỗi lần gói tin được chuyển đến một node mới, hopCount sẽ tăng thêm 1
2.2.6 Cài đặt thuật toán mới vào trong thư viện
Trong phần này sẽ trình bày việc cài đặt thuật toán Greedy [6] trên OMNeT++
1 Tạo file *.ned
File này khai báo một simple module, có thể kế thừa từ module Greedy ở trên, ví dụ:
Trang 292 Tạo file *.msg
File này khai báo các định nghĩa cho gói tin được sử dụng trong thuật toán Mỗi thuật toán có thể có một hoặc nhiều loại gói tin, phân ra làm 2 nhóm chính: gói tin điều khiển và gói tin dữ liệu Gói tin điều khiển là 1 gói tin độc lập, sử dụng trong thuật toán để trao đổi thông tin giữa các node, ví dụ gói tin HELLO để xây dựng bảng hàng xóm, gói tin BOUNDHOLE để gửi thông tin về đa giác hố tới các node Tùy theo mỗi thuật toán có thể có hoặc không sử dụng gói tin điều khiển
Kích thước gói tin điều khiển không bị giới hạn
Mỗi gói tin điều khiển được định nghĩa là 1 packet trong file *.msg, ví dụ:
Hình 6 Định nghĩa một message trong Omnet++
Gói tin dữ liệu về bản chất không phải là 1 gói tin độc lập, mà có thể hiểu như là một header được đóng gói thêm vào trong gói tin dữ liệu (UDPApp), header này chứa các thông tin phục
vụ cho quá trình định tuyến (ví dụ như thông tin về tọa độ node đích, thông tin về các anchor points)
// face (x: stuck node, D: destination)
Node prev;
}
Trang 303 Cài đặt logic thuật toán
Mỗi thuật toán cần cài đặt (override) 2 hàm chính từ class Greedy:
void sendData(): hàm sendData() bao gồm 2 hoạt động: xác định địa chỉ của node tiếp theo cần gửi gói tin data tới, và gửi Ví dụ:
sendUDPPacket(pkt, nextHop->address(), maxTTL, mySelf->id() * 0.0012345 );
logSendData(pkt, *mySelf, nextHop->id());
countDataPkt++;
}
}
Hình 7 Cài đặt thuật toán Greedy
void handleMessage(): hàm này thể hiện xử lý của node mạng khi nhận đƣợc gói tin (bao gồm các timer – selfmessage và gói tin (tín hiệu) gửi từ node khác) Ví dụ:
void GPSR::handleMessage(cPacket * pkt, IPInfo * ipInfo) {
Trang 312.2.7 Hạn chế của việc sử dụng thư viện INET
INET là thư viện dành riêng cho OMNet++ xây dựng các lớp định tuyến dành cho
cả mạng có dây và không dây Thư viện này khá đồ sộ và phức tạp Do đó để kiểm soát
và sử dụng được INET đã là một việc làm khá tốn thời gian.Trong khi đó bài toán ở đây liên quan đến việc mô phỏng mạng cảm biến không dây nên việc dùng INET khá
là thừa và phải bóc tách khá nhiều để sử dụng đúng với mục đích Đã có một vài phiên bản trước có sử dụng INET cài đặt các thuật toán toán định tuyến như GPSR, Greedy…
Trong quá trình truyền tin thì INET mô phỏng lại các node mạng như là các sensor network tức là nó trao đổi thông tin giữa các nút mạng (broadcast) như các sensor hoạt động như trong thực tế Giả sử như mỗi sensor sẽ tốn 1 giây cho quá trình broadcast thì với 1000 sensor sẽ tốn đến 1000 s Bởi quá trình mô phỏng chạy trên 1 máy tính nên sẽ tốn rất nhiều để hoàn thành quá trình này
Đối với 100-200 nút mạng thì tốc độ thực hiện có thể chấp nhận được ở cỡ vài chục giây nhưng khi số lượng nút mạng tăng lên hàng nghìn và số lượng kết nối tăng theo thì việc sử dụng INET lại tỏ ra không hiệu quả và khá chậm (thực tế với GPSR 1500 nút thời gian chờ đến hàng tiếng đồ hồ) Do vậy việc tìm kiếm giải pháp mới thay thế INET là việc làm cần thiết Đây là nguyên nhân của việc sử dụng thư viện Castalia thay thế ở những phần sau
Trang 322.3.1 Giới thiệu về Castalia
Castalia là bộ mô phỏng mạng cảm biến không dây dành cho các thiết bị nhúng công suất thấp Castalia được xây dựng dựa trên nền OMNeT++ và được các nhà nghiên cứu sử dụng để thực hiện kiểm thử các thuật toán phân tán và giao thức mạng không dây
Các tính năng chính của Castalia bao gồm:
1 Không đơn giản là kết nối giữa các nút mạng, Castalia còn mô phỏng sự mất gói tin như quá trình truyền tin trong thực tế
2 Mô hình phức tạp biến đổi theo thời gian
3 Hỗ trợ đầy đủ tính linh động của một nút mạng
Castalia là mô hình radio tiên tiến cho việc truyền thông của các thiết bị hoạt động với công suất thấp:
1 Có sẵn giao thức định tuyến và MAC
2 Được thiết kế tương thích và có tính mở rộng
3 Thiết kế sát với thực tế so với các thiết bị cảm biến thực tế
Lưu ý: Bản thân Castalia không mô phỏng quá trình hoạt động cụ thể của một sensor
mà nó chỉ cung cấp 1 nền tảng cho phép các nhà nghiên cứu thực nghiệm các thuật toán định tuyến với môi trường truyền tin trong mạng cảm biến không dây trước khi triển khai trên một bộ cảm biến cụ thể Tốc độ truyền tin trong Castalia gần như là tức thời, chúng chỉ gửi gói tin cho các nút qua lại cho nhau và không mô phỏng lại quá trình thực tế Đây là lí do chính khiến cho Castalia hoạt động rất nhanh ngay cả đối với các kịch bản mạng phức tạp
2.3.2 Tại sao sử dụng Castalia?
Castalia đang sử dụng nhân OMNeT ++ vì vậy bạn nên hiểu rõ khái niệm cơ bản về OMNeT++ mặc dù điều này là không cần thiết, đặc biệt nếu bạn muốn sử dụng Castalia theo cách cơ bản (nghĩa là không xây dựng giao thức / ứng dụng của riêng bạn)
Castalia mô phỏng quá trình truyền tin của trong cảm biến không dây, và hỗ trợ các giao thức truyền tin của mạng cảm biến không dây Nhiệm vụ duy nhất của các nhà nghiên cứu là cài đặt các thuật toán định tuyến lên Castalia mà không phải quan tâm
Trang 33đến các giao thức truyền tin hoạt động ra sao, năng lượng hoạt động của mỗi sensor sẽ thay đổi trong quá trình hoạt động như thế nào So với nền tảng NS2 trước đây, việc sử dụng Castalia trở nên dễ dàng hơn và giảm công sức đáng kể cho các nhà nghiên cứu trong việc xây dựng các thuật toán định tuyến trong mạng cảm biến không dây
2.3.3 Sử dụng Castalia để cài đặt thuật toán định tuyến
Trong Castalia có các thư mục quan trọng như:
bin – thư mục chứa file thực thi sau cùng CastaliaBin và CastaliaResult scripts
config – thư mục chứa các tệp cấu hình được dùng bởi makemake
out – thực mục được sinh ra trong quá trình build Nơi chứa các tệp trung gian được sinh ra và các tệp thực thi
Simulations – Nơi chứa các tệp cấu hình mô phỏng giống như omnetpp.ini Khi tạo ra một kịch bản đẩy vào trong simulations Bạn có thể thiết lập chạy từ các thư mục con chứa các tệp kịch bản
src – nơi chứa mã nguồn của Castalia bao gồm các tệp định dạng ( *.cc, *.h
*.msg,*.ned ) Giống việc tạo một simulation bên Omnet++, bạn phải tạo các tệp module bằng ngôn ngữ C++ và các tệp ned cho các nút mạng hay msg cho các thông điệp truyền đi
Makefile – tệp được tạo sau khi gọi lệnh makemake
makemake – kịch bản để sinh ra Makefile phù hợp và nó sử dụng opp_makemake của OMNeT
Vậy để tạo một thuật toán định tuyến bên Castalia ta quan tâm đến hai thư mục chính đó là Simulations và src Simulations là thư mục chứa các file ini, tức là các file quy định thông tin của kịch bản ban đầu của mạng như các cấu hình của nút mạng , tọa
độ, th ông số chung của mạng Còn thư mục src nơi sẽ viết các thuật toán định tuyến bên trong, các bước cần làm cũng sẽ giống như bên Omnet++ như tạo tệp ned để quy định mạng hay tạo tệp msg để quy định các thông điệp
Các thuật toán định tuyến trong Castalia đều kế thừa từ lớp VirtualRouting, nơi hỗ trỡ việc mô phỏng quá trình truyền tin của sensor và tính toán các hoạt động cũng như tiêu thụ năng lượng của một sensor trong thực tế Do vậy công việc viết các thuật toán định tuyến trở nên đơn giản và không cần quan tâm đến các vấn đề về tổ chức hoạt động, hay truyền tin của một bộ cảm biến
Trang 34Để build chương trình trong Castalia ta sử dụng câu lệnh “makemake” sau đó thực
thi câu lệnh “make” Sau khi build chương trình trên Castalia, ta sẽ nhận được file thực
thi CastaliaBin, file này chứa toàn bộ các thuật toán trong thư mục src Khi client gửi
thông tin về kịch bản mạng, server sẽ tạo file ini tương ứng Các thông tin client gửi
bao gồm các chức năng như thuật toán, các nút mạng, nút nguồn và nút đích Các thông
tin đó sẽ được server chuyển thành file ini và chạy lệnh “Castalia -i
“Tên_file_được_sinh’.ini -c General ” để thực thi chương trình Castalia sẽ chạy
chương trình theo những thông tin từ file ini và trả về kết quả tương ứng
Trang 35CHƯƠNG 3: XÂY DỰNG CÔNG CỤ NÂNG CAO HỖ TRỢ MÔ PHỎNG
Hệ WiSSim cũ có bốn khối chính như sau:
- Công cụ tạo kịch bản mô phỏng (WiSSim Editor): Hỗ trợ người sử dụng
(NSD) tạo và biên tập kịch bản mô phỏng thông qua một giao diện người dùng (GUI) đơn giản, dễ hiểu Với chức năng này sẽ vẫn được kế thừa cho phiên bản cập nhật Ngoài ra trong phiên bản mới sẽ phải bổ sung thêm các tính năng như tạo traffic cho mạng Ở phiên bản cũ chức năng này sinh ra các tệp kịch bản để chạy thuật toán trên NS2 thì ở trong phiên bản mới sẽ gọi đến các API để tạo ra tệp kịch bản omnetpp.ini Đồng thời, cũng sẽ gọi đến API xử lý việc lưu trữ các kịch bản mạng tại phía server
Trang 36- Công cụ tái hiện quá trình hoạt động của mạng (WiSSim Visualizer): Từ
đầu ra là các file theo vết (trace files) sau khi thực hiện mô phỏng sử dụng ns-2, công cụ thể hiện lại quá trình hoạt động của mạng, giúp người sử dụng quan sát, hình dung một cách trực quan toàn bộ quá trình mô phỏng xảy ra Công cụ này hữu ích khi nhà nghiên cứu muốn kiểm tra các hoạt động trong mạng có diễn ra như mình mong muốn, giải thuật chạy có đúng như lý thuyết hay không
- Công cụ phân tích kết quả mô phỏng (WiSSim Analyzer): Công cụ phân tích
trace files để lấy ra các số liệu cần thiết cho việc thống kê, đánh giá, giúp người sử dụng đánh giá được hiệu quả của giao thức định tuyến được mô phỏng Đối với nghiên cứu, việc đánh giá, phân tích đóng vai trò quan trọng Công cụ này sẽ đáp ứng hầu hết những yêu cầu của người dùng về pha phân tích, cung cấp số liệu chính xác, biểu đồ trực quan, và trích xuất kết quả dễ dàng
- Thư viện các giải thuật định tuyến cho mạng cảm biến không dây (WiSSim
Routing Protocol Library): Vùng cấp cho người dùng các giao thức định
tuyến phổ biến trong mạng Các giao thức được cài đặt sẽ giúp người sử dụng thực hiện mô phỏng mạng với nhiều giao thức, qua đó có các so sánh khách quan giữa các thuật toán với nhau Trong phiên bản mới thì việc cài đặt các thuật toán định tuyến sẽ chuyển từ nền tảng NS2 qua nền tảng OMNeT++
Điểm hạn chế của phiên bản Wissim cũ bao gồm:
- Chạy trên nền tảng NS2 với quá trình tạo các kịch bản mạng phức tạp, người mới sử dụng khó có thể tiếp cận cũng như tốn rất nhiều công sức trong phát triển các thuật toán định tuyến
- Thời gian thực thi thuật toán trên mạng cỡ lớn chưa thực sự hiệu quả, đối các
hố mạng phức tạp thời gian chạy lên đến hàng giờ
- Chưa có hệ thống so sánh đánh giá các tiêu chí giữa các cuộc thực nghiệm Với những tính năng và những điểm hạn chế của phiên bản Wissim cũ thì việc xây dựng một phiên bản Wissim mới, có tính kế thừa và mở rộng thêm tính năng là điều cần thiết