Giả sử một gói dữ liệu sẽ được truyền từ nút nguồn A đến nút đích F như trong hình 57, trong đó Cij biểu thị giá trị từ nút i đến nút j và Pi biểu thị năng lượng sẵn có của nút i.
Có ba tuyến đường đi có thể thực hiện là {A–B–F}, {A–B–D–F} và {A–C–E– F}.
Bằng cách tính tổng giá trị và đếm các bước nhảy theo mỗi tuyến đường, ta có tổng giá trị của {A–B–F} là 10 với hai bước nhảy. Tổng giá trị của {A–B–D–F} là 14 với ba bước nhảy và tổng giá trị của {A–C–E–F} là 8 với ba bước nhảy. Vì vậy, đường dẫn có giá trị định tuyến tối thiểu nhất từ nút nguồn A đến nút đích F sẽ phụ thuộc vào cách chọn thuật toán xác định.
Bằng thuật toán đếm số bước nhảy tối thiểu để chọn ra giá trị định tuyến ngắn nhất, ta nhận thấy tuyến đường {A–B–F}là ngắn nhất với hai bước nhảy.
Mặt khác, nếu chọn thuật toán tính tổng ta lại có tuyến đường {A–C–E–F} là tối ưu nhất với tổng giá trị là 8.
Cuối cùng, nếu chọn thuật toán xác định năng lượng sẵn có lớn nhất thì tuyến đường {A–C–E–F} là tối ưu nhất vì năng lượng có sẵn theo tuyến đường này là lớn nhất.
CHƯƠNG 4: MÔ PHỎNG
4.1 CONTIKI OS
4.1.1 Định nghĩa CONTIKI OS
Contiki là một hệ điều hành nguồn mở cho IoT [23]. Contiki kết nối các bộ vi điều khiển công suất thấp, chi phí thấp tới Internet. Contiki là một hộp công cụ hiệu quả để xây dựng các hệ thống không dây phức tạp. Contiki chủ yếu dành cho các hệ thống bị hạn chế bộ nhớ, tập trung vào các thiết bị IoT không dây công suất thấp, nó chỉ cần khoảng 10 kilobyte bộ nhớ truy cập ngẫu nhiên (RAM) và 30 kilobyte bộ nhớ chỉ đọc (ROM).
4.1.2 COOJA là gì ?
COOJA là một trình giả lập mạng cho phép mô phỏng các nền tảng phần cứng thực.
COOJA là ứng dụng của Contiki OS tập trung vào hành vi của mạng. COOJA có khả năng mô phỏng mạng cảm biến không dây mà không có bất kỳ vi trần cụ thể nào. Cooja hỗ trợ theo bộ tiêu chuẩn: TR 1100, TI CC2420, Contiki-RPL, IEEE 802.15.4, ngăn xếp uIPv6 và ngăn xếp uIPv4.
4.1.3 Đặc tính của Contiki
Phân phối bộ nhớ:
[1] Contiki được thiết kế cho các hệ thống nhỏ, chỉ có vài kilobyte bộ nhớ khả dụng. Do đó, Contiki có bộ nhớ hiệu quả cao và cung cấp một bộ các cơ chế để cấp phát bộ nhớ: cấp phát khối bộ nhớ, ghi nhớ bộ nhớ, bộ phân bổ bộ nhớ được quản lý, cũng như bộ cấp phát bộ nhớ C tiêu chuẩn.
Mạng IP đầy đủ:
Contiki cung cấp một ngăn xếp mạng IP đầy đủ, với các giao thức IP tiêu chuẩn như UDP, TCP và HTTP, bên cạnh các tiêu chuẩn năng lượng thấp mới như 6lowpan, RPL và CoAP. Ngăn xếp Contiki IPv6, được phát triển và đóng góp cho Contiki bởi Cisco, được chứng nhận đầy đủ theo chương trình Ready Logo IPv6.
Contiki hỗ trợ các giao thức trong tiêu chuẩn lực lượng tác vụ kỹ thuật mạng - Internet Engineering Task Force (IETF) mới được tiêu chuẩn hóa cho mạng công suất thấp IPv6, bao gồm lớp thích ứng 6lowpan, giao thức định tuyến đa nhiệm RPL IPv6 và giao thức lớp ứng dụng CoAP RESTful.
Nhận thức về năng lượng:
Contiki được thiết kế để hoạt động trong các hệ thống năng lượng cực thấp: các hệ thống có thể cần phải chạy trong nhiều năm với một cặp pin AA. Để hỗ trợ sự phát triển của các hệ thống năng lượng thấp, Contiki cung cấp các cơ chế để ước tính mức tiêu thụ năng lượng của hệ thống và để phát hiện vị trí cần sử dụng năng lượng.
Tải mô-đun động:
Contiki hỗ trợ tải động và liên kết các mô-đun tại thời gian chạy. Điều này rất hữu ích trong các ứng dụng mà các trạng thái dự định sẽ được thay đổi sau khi triển khai. Trình tải mô-đun Contiki có thể tải, định vị lại và liên kết các tệp tiêu chuẩn ELF có thể tự loại bỏ các ký hiệu gỡ lỗi của chúng để giữ kích thước của chúng.
Bộ định tuyến trạng thái nghỉ:
Trong các mạng không dây, các nút có thể chuyển tiếp tin nhắn từ người dùng để đến đích. Với Contiki, ngay cả các nút chuyển tiếp được gọi là bộ định tuyến, có thể được vận hành bằng pin nhờ cơ chế chu kỳ xung radio của ContikiMAC cho phép chúng tạm (ngủ) ngừng hoạt động khi mỗi tin nhắn được chuyển tiếp. Chúng còn được gọi là bộ định tuyến trạng thái ngủ.
Cơ chế chống trùng lặp Prothothreads:
Để tiết kiệm bộ nhớ nhưng cung cấp dòng điều khiển tốt trong lập trình, Contiki sử dụng cơ chế chống trùng lặp gọi là “protothreads”. Protothreads là sự kết hợp của các cơ chế lập trình hướng sự kiện và đa luồng. Với protothreads, xử lý sự kiện có thể được thực hiện để chặn hoặc chờ đợi các sự kiện tiếp theo xảy ra.
Ngăn xếp Rime:
Trong trường hợp băng thông ở mức cao hoặc khi chồng chéo mạng IPv6 đầy quá mức, Contiki cung cấp ngăn xếp mạng không dây được tùy chỉnh có tên là Rime. Ngăn xếp Rime hỗ trợ các hoạt động đơn giản như gửi tin nhắn cho tất cả các ngăn xếp lân cận hoặc tới một ngăn xếp được chỉ định cụ thể, cũng như các cơ chế phức tạp hơn
như ngập mạng và thu thập dữ liệu có thể mở rộng nhờ độ tin cậy đa địa chỉ. Tất cả được hoạt động trên bộ định tuyến trạng thái nghỉ để tiết kiệm năng lượng.
Kiểm tra hồi quy:
Để đảm bảo mã Contiki hoạt động như mong muốn, những nhà phát triển Contiki sử dụng một bộ kiểm tra hồi quy để kiểm tra các khía cạnh quan trọng của Contiki trên cơ sở thường ngày trong trình giả lập Cooja. Các bản kế hoạch kiểm tra hồi quy có thể được sử dụng làm điểm khởi đầu để thiết lập mô phỏng hoặc để điều tra cách các cơ chế Contiki khác nhau hoạt động.
4.1.4 Giao diện COOJA
Khởi động Instant Contiki
Điều đầu tiên, bạn nên chạy với môi trường làm việc ảo Ubuntu Linux.