ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN VIỄN THÔNG o0o BÁO CÁO MẠNG CẢM BIẾN KHÔNG DÂY ỨNG DỤNG EVALUATION OF COAP IN CONTIKI TP HỒ CHÍ MINH, THÁNG 03 NĂM.
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN VIỄN THÔNG -o0o - BÁO CÁO MẠNG CẢM BIẾN KHÔNG DÂY & ỨNG DỤNG EVALUATION OF COAP IN CONTIKI TP HỒ CHÍ MINH, THÁNG 03 NĂM 2020 : Mục lục Lý thuyết CoAP 1.1 Khái niệm CoAP 1.1.1 Mơ hình tin nhắn CoAP 1.1.2 Mơ hình resquest/respone CoAP 1.1.3 Định dạng tin nhắn CoAP 1.2 Vấn đề bảo mật 1.3 Sự khác giữ CoAP HTTP 1.4 So sánh CoAP với MQTT 1.5 Ưu nhược điểm CoAP Mô Phỏng giao thức CoAP Contiki 2.1 Mô ứng dụng đơn dụng đơn giản với giao thức CoAP 2.2 Ứng dụng giao thức CoAP điều khiển LED độc lập 13 Đánh giá giao thức CoAP 18 : Lý thuyết CoAP 1.1 Khái niệm CoAP CoAP ( Constrained Application Protocol ) giao thức đơn giản với chi phí thấp thiết kế đặc biệt cho thiết bị ràng buộc (như vi điều khiển) mạng bị hạn chế Một số tính bật giao thức CoAp là: - Giao thức web sử dụng M2M với yêu cầu bị ràng buộc - Trao đổi tin nhắn khơng đồng - Chi phí thấp đơn giản để phân tích - Hỗ trợ URL loại nội dung - Khả proxy nhớ đệm Với tính ta thấy CoAP giống với HTTP lại không xem HTTP CoAP thiết kế riêng cho IoT cụ thể cho M2M nên tối ưu cho nhiệm vụ CoAP chia thành hai lớp là: CoAP Request/Response CoAP Messages Hình 1.1 Các lớp CoAP CoAP hỗ trợ bốn loại thông báo khác nhau: - CON : Xác nhận - NON: Khơng cần xác nhận - ACK: Nhìn Nhận - RST: Cài lại : 1.1.1 Mơ hình tin nhắn CoAP Đây lớp CoAP thấp Lớp liên quan đến thông điệp trao đổi UDP endpoint Mỗi tin nhắn CoAP có ID Điều quan trọng để phát thơng điệp trùng lặp Như nói trên, giao thức CoAP sử dụng hai loại thông báo: - CON : Xác nhận - NON: Không cần xác nhận Một tin nhắn loại CON tin cậy Khi trao đổi pont-to-point tin nhắn đáng tin cậy Trong CoAP, tin nhắn CON gửi chắc máy chủ nhận gói tin vào gửi lại ACK với ID, trường hợp không đến máy chủ lỗi trình truyền gửi lại RST Cụ thể mơ hình sau: Hình 1.2 Mơ hình trao đổi tin nhắn loại CON Ngược lại, kiểu tin nhắn kiểu NON Đây kiểu tin nhắn không yêu cầu xác nhận máy chủ, hay nói cách khác loại tin nhắn khơng đáng tin cậy thường không chưa thông tin quan trọng gửi đến máy chủ Đối với loại thường dùng thơng điệp có chứa giá trị đọc từ cảm biến Ngay tin nhắn không đáng tin cậy chúng có ID : Hình 1.3 Mơ hình trao đổi tin nhắn loại NON 1.1.2 Mơ hình resquest/respone CoAP Resquest/repone CoAP lớp thức hai Yêu cầu gửi tin nhắn xác nhận (CON) khơng thể xác nhận (NON) Có số trường hợp tùy thuộc vào việc máy chủ có trả lời cho yêu cầu client câu trả lời khơng có sẵn Nếu server trả lời cho yêu cầu client, cầu thực thông báo xác nhận (CON), server gửi lại cho client thông báo xác nhận có chứa phản hồi mã lỗi, tất nhiên phải ID Và server trả lời yêu cầu đến từ client lập tức, gửi thơng báo Xác nhận với phản hồi trống, Ngay có phản hồi, server gửi thơng báo xác nhận cho client có chứa phản hồi Tại thời điểm này, client gửi lại xác nhận Hình 1.4 Một số mơ hình resquest/respone thông dụng 1.1.3 Định dạng tin nhắn CoAP : Chúng ta phân tích định dạng tin nhắn CoAP Đây phần mà làm nên ràng buộc giao thức tính gọn nhỏ thông điệp Để tránh phân mảnh, thông điệp chiếm phần liệu datagram UDP Một thông điệp chia thành số phần sau: Trong đó: Ver: Đó số nguyên không dâu bit cho biết phiên T: Đó số ngun khơng dấu bit cho biết loại thông báo: CON NON,2 ACK, RST TKL: 4bit số lựa chọn Code: 8bit mã method mã phản hồi chẳng hạn (GET, PUT, POST, DELETE) Message ID: ID độc nhất, thể số 16bit Và … 1.2 Vấn đề bảo mật Bời CoAP xây dựng UDP TCP, SSL/TLS khơng có sẵn để cung cấp khả bảo mật Do tài nguyên để quan lý bị hạn chế nên vấn đề bảo mật bị ràng buộc 1.3 So sánh CoAP HTTP Đặc điểm CoAP HTTP Giao thức UDP TCP Network layer Ipv6 với 6loWPAN IP layer Hỗ trợ multicast Có Khơng Kiến trúc model Clients- Server Publish- Client server Subscribe model architecture : Giao tiếp đồng Không cần Cần Ứng dụng WSN/IoT/M2M Thiết bị kết nối internet 1.4 So sánh CoAP với MQTT MQTT CoAP hữu ích giao thức IoT, có sai khác sau MQTT giao thức truyền thông N-N để truyền thông điệp nhiều MQTT CoAP MQTT giao thức truyền thông N-N CoAP chủ yếu giao thức 1-1 để truyền để truyền thông điệp nhiều khách trạng thái thông tin client máy chủ hàng thơng qua Broker trung tâm, tách riêng producer consumer MQTT tạo liên kết TCP lâu dài đến Client máy chủ CoAP gửi nhận broker Điều thường không danh cho gói tin UDP Trong mơi trường thiết bị phía sau NAT NAT, luồng cổng chuyển tiếp sử dụng để thông qua CoAP MQTT không hỗ trợ nhãn tin với CoAP hỗ trợ việc đàm phán nội dung loại liệu khác để client hiểu khám há cho phép thiết bị thăm dị để tìm cách trao đổi liệu 1.5 Ưu nhược điểm CoAP Ưu điểm: - Là giao thức đơn giản chi phí thấp hoạt động UDP Nó cho phép thời gian thức dậy ngắn thời gian ngủ dài Điều giúp tăng thời lượng pin để sử dụng giao tiếp IoT (Internet of Things) M2M( Machine to Machine) - CoAP sử dụng IPSEC hoăc DTLS để cung cấp liên lạc an tồn - Giao tiếp khơng đồng không cần thiết giao thức CoAP Nhược điểm - CoAP có độ trễ thấp so với HTTP, tiêu thụ lượng HTTP Nhược điểm: : - CoAP giao thức không đáng tin cậy sử dụng UDP Do tin nhắn CoAP truyền đạt không theo thứ tự biến chúng đến đích - CoAP xác nhận nhận tin nhắn tăng thời gian xử lý Ngồi khơng xác minh xem tin nhắn nhận được giải mã hay chưa - CoAP có vấn đề giao tiếp cho thiết bị phía sau NAT (Dịch địa mạng) Mơ Phỏng giao thức CoAP Contiki 2.1 Mô ứng dụng đơn dụng đơn giản với giao thức CoAP Tạo Node với chức làm router, cầu nối client bên brower với Node bên mạng Hình 2.1 Tạo node làm router Tương tự, ta tạo thêm node với chức làm server mạng, end-point ta hình : Tạo Serial Socket (Server) với chức lắng nghe port mặc định 6001, để phía client kết nối vào mạng nội Tạo kết nối từ Client (Brower) đến Router lệnh terminal: Make connect-router-cooja tunslipcooja : Sau chạy dòng lệnh client connect thành cơng đến router với địa : 127.0.0.1 : 35833 với port 38533 Sau kết nối Terminal địa router Bằng cách nhập địa router: aaaa::212:7401:1:101( địa mặc định mô mà kit thật có giá trị cụ thể hơn) lên brower tìm có kết nối mạng Để gửi liệu từ Client đến Server ta nhập địa Server mà ta cần điều khiển với cú pháp: coap://[aaaa::212:7403:3:303]/ với port mặc định cho mạng CoAP 5683 Và để xem tính mà điều khiển Server vào well-known/core chọn Rendered: 10 : Chẳng hạn Toggle ta chọn Method GET Nhưng trong trình hỗ trợ phương thức POST nên GET không hỗ trợ Ta thấy thông tin là: - Version: 240 (xem radio messages Tools mô phỏng) - T: CON - Code: GET - MID: 59273 - Token: 0x544B - Option: Uri-Path: … - Payload: NULL Và Server gửi lại thông điệp với ID Token kèm theo ACK kèm theo mã 4.05 (Method Not Allowed), mơ hình Trong trường hợp GET sensors/light có hỗ trợ GET ta thu được: Ta thấy trường hợp bên Server nhận liệu nên trả mã 2.05 (OK), payload có giá trị (Giá trị hàm random để chạy mô phỏng) Và tất nhiên 11 : hai lần truyền từ Client đến Server có ID khác (thể cho độc ID message) Một trường hợp khác dùng Method POST actuators/toggle: Khác với GET POST chủ động gửi liệu từ Client lên Server để yêu cầu hành động từ server nhận phản hồi gửi thành công Cái event Toggle lần gửi liệu từ Client phía server đổi trạng thái LED (ở LED RED) Và Led tắt tiếp tục POST payload Để thay đổi màu sắc LED ta vào file /home/user/Desktop/contiki/examples/er-restexample/resources/res_toggle.c sữa lại code hình static void res_post_handler(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { 12 : leds_toggle(LEDS_GREEN); } Ta thu kết quả: 2.2 Ứng dụng giao thức CoAP điều khiển LED độc lập Tương tự với bược node Sever Combine file server.c file restoggle-leds.c /* * @author: Nguyen Duy Tan * @ID: 1713068 * @file: server.c */ #include #include #include #include "contiki.h" #include "contiki-net.h" #include "rest-engine.h" 13 : extern resource_t res_toggle_red, res_toggle_green, res_toggle_blue; PROCESS(er_example_server, "Erbium Example Server"); AUTOSTART_PROCESSES(&er_example_server); PROCESS_THREAD(er_example_server, ev, data) { PROCESS_BEGIN(); PROCESS_PAUSE(); /* Initialize the REST engine */ rest_init_engine(); #if PLATFORM_HAS_LEDS rest_activate_resource(&res_toggle_red, "lt/r"); rest_activate_resource(&res_toggle_green, "lt/g"); rest_activate_resource(&res_toggle_blue, "lt/b"); #endif /* Define application-specific events here */ while(1) { PROCESS_WAIT_EVENT(); } PROCESS_END(); 14 : } /* * @author: Nguyen Duy Tan * @ID: 1713068 * @file: res-toggle-leds.c */ #include "contiki.h" #include "rest-engine.h" #include "dev/leds.h" #include /* */ static void res_post_handler_red(void *request, void *response, uint8_t *buffer,uint1 6_t preferred_size, int32_t *offset) { leds_toggle(LEDS_RED); } /* */ static void res_post_handler_green(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { leds_toggle(LEDS_GREEN); } /* */ static void res_post_handler_blue(void *request, void *response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { leds_toggle(LEDS_BLUE); 15 : } /* */ /* Toggles the red led */ RESOURCE(res_toggle_red, "title=\"Red LED\";rt=\"Control\"", NULL, res_post_handler_red, NULL, NULL); /* Toggles the green led */ RESOURCE(res_toggle_green, "title=\"Green LED\";rt=\"Control\"", NULL, res_post_handler_green, NULL, NULL); /* Toggles the blue led */ RESOURCE(res_toggle_blue, "title=\"Blue LED\";rt=\"Control\"", NULL, res_post_handler_blue, NULL, NULL); /* */ Trong file server.c chứa link đến file res-toggle-leds.c Sau thực bước ta thu kết sau: 16 : Đây giao diện hiển thực Client (brower) với chức lt/b (Led toggle Blue); lt/g (Led toggle Green); lt/r (Led toggle Red) hỗ trợ POST method Sau thực POST liệu phía Server, ta thu kết hai led GREEN BLUE sáng 17 : Tương tự ta thu kết Led sáng Đánh giá giao thức CoAP 18 : Từ mơ hình mạng dùng CoAP ta thấy để truy cập điều khiển node Server từ Brower phải thơng qua border-router, phụ thuộc nhiều vào border-router, để khắc phục trường hợp ta dùng nhiều border-router mạng CoAP 19 ... lượng pin để sử dụng giao tiếp IoT (Internet of Things) M2M( Machine to Machine) - CoAP sử dụng IPSEC hoăc DTLS để cung cấp liên lạc an tồn - Giao tiếp khơng đồng không cần thiết giao thức CoAP. .. @file: server.c */ #include #include #include #include "contiki. h" #include "contiki- net.h" #include "rest-engine.h" 13 : extern resource_t res_toggle_red, res_toggle_green,... lục Lý thuyết CoAP 1.1 Khái niệm CoAP 1.1.1 Mơ hình tin nhắn CoAP 1.1.2 Mơ hình resquest/respone CoAP 1.1.3 Định dạng tin nhắn CoAP