DANH SÁCH CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Internet Protocol Media Access Control User Datagram Protocol Open Systems Interconnection Constrained Application Protocol Hyper Text Transfer Pr
Trang 1TRƯỜNG ĐẠI HỌC VINH
KHOA ĐIỆN TỬ VIỄN THÔNG
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Trang 2MỤC LỤC
LỜI MỞ ĐẦU IV TÓM TẮT ĐỒ ÁN V DANH MỤC CÁC BẢNG BIỂU VI DANH MỤC CÁC HÌNH VẼ VII DANH SÁCH CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT VIII
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 1
1.1 Giới thiệu về đề tài 1
1.1.1 Lý do chọn đề tài 1
1.1.2 Mục đích chọn đề tài 1
1.1.3 Đối tượng và phạm vi nghiên cứu 1
1.1.4 Ý nghĩa khoa học và ý nghĩa thực tiễn của đề tài 1
1.2 Một số giao thức sử dụng trong truyền thông 2
1.2.1 Mô hình TCP/IP 2
1.2.1.1 Kiến trúc TCP/IP 3
1.2.1.2 Quá trình truyền dữ liệu trong mô hình TCP/IP 8
1.2.3 Mô hình OSI 9
1.2.3.1 Kiến trúc và chức năng các lớp trong mô hình OSI 9
1.2.3.2 So sánh hai giao thức TCP/IP và OSI 12
1.2.4 Truyền thông Socket 13
1.2.4.1 Định nghĩa 13
1.2.4.2 Nguyên lý hoạt động 15
CHƯƠNG 2 GIAO THỨC MQTT TRONG HỆ THỐNG IOT 17
2.1 Hệ thống IoT (Internet of Things) 17
2.1.1 Định nghĩa 17
2.1.2 Kiến trúc tham chiếu 17
2.1.3 Phân loại thiết bị IoT và phương thức kết nối Internet 20
2.1.4 Các yêu cầu của kiến trúc tham chiếu cho IoT 21
Trang 32.2 Nền tảng truyền thông IoT 23
2.2.1 Giao thức Zigbee 24
2.2.2 Giao thức Bluetooth 27
2.2.3 Công nghệ Wifi 30
2.3 Giao thức MQTT 33
2.3.1 Định nghĩa 33
2.3.2 Các đặc trưng của giao thức 35
2.3.3 Định dạng của message 36
2.3.3.1 Message CONNECT – Client yêu cầu kết nối đến server 42
2.3.3.2 Message PUBLISH 46
2.3.3.3 Message SUBSCRIBE 47
2.3.4 Nguyên lý làm việc 49
2.3.5 Bảo mật trong MQTT 50
CHƯƠNG 3 THỬ NGHIỆM GIAO THỨC MQTT 53
3.1 Giới thiệu về hệ điều hành Linux 53
3.2 Hệ điều hành Ubuntu 54
3.3 Ngôn ngữ lập trình Python 56
3.4 Cấu trúc một số lệnh trong thư viện Python Client MQTT 58
3.5 Thử nghiệm truyền nhận dữ liệu MQTT trên Python 61
KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 64
PHỤ LỤC 65
Trang 4LỜI MỞ ĐẦU
Trong những năm gần đây một khái niệm mới trong ngành công nghệ được
nhắc đến nhiều đó là "Internet of Things" Khái niệm Internet of Things được thực
sự đưa ra vào năm 1999, khi mà người ta bắt đầu nhìn nhận được tiềm năng của xu hướng này, lúc mà các rào cản giới hạn Internet, khoa học công nghệ dần được khai phá Mặc dù khái niệm Internet of Things được đưa ra từ lâu nhưng trong những năm gần đây nó mới được nhiều doanh nghiệp cũng như các nhà khoa học để ý và phát triển mạnh mẽ
Các thiết bị trong IoT là rất nhỏ, chúng chỉ trao đổi lượng thông tin nhỏ với nhau, tuy nhiên các giao thức truyền thống không phù hợp với sự giao tiếp IoT mà cần có các giao thức tối ưu dành riêng cho IoT Nhận biết được tầm quan trọng của giao thức này trong sự phát triển một thế giới thông minh do vậy em đã chọn đồ án
“Nghiên cứu và thử nghiệm giao thức MQTT trong hệ thống IoT” để tìm hiểu
về giao thức MQTT và cách thức hoạt động của nó
Đồ án này bao gồm 3 chương:
Chương 1: Tổng quan về đề tài Nêu rõ lý do, mục đích lựa chọn đề tài, ý nghĩa của đề tài trong sự phát triển thế giới IoT Trình bày về một số giao thức truyền thông thường được sử dụng
Chương 2: Giao thức MQTT trong hệ thống IoT Trình bày hiểu biết về thế giới IoT và các giao thức nền tảng được sử dụng Đi sâu nghiên cứu và tìm hiểu về giao thức MQTT
Chương 3: Thử nghiệm giao thức MQTT Thử nghiệm truyền nhận dữ liệu bằng giao thức MQTT trên phần mềm Python
Em xin gửi lời cảm ơn chân thành đến thầy giáo Th.S Đinh Văn Nam đã
hướng dẫn tận tình và giúp đỡ em trong quá trình thực hiện đồ án này Trong quá trình thực hiện đồ án không thể tránh được sai sót, vì vậy em hy vọng sẽ nhận được các lời khuyên và đóng góp của thầy, cô và bạn đọc
Nghệ An, Ngày 20 tháng 5 năm 2016 Sinh viên thực hiện
Trần Thị Thuận
Trang 5TÓM TẮT ĐỒ ÁN
Đồ án này đi sâu tìm hiểu về giao thức MQTT Giao thức MQTT hiện nay được sử dụng trong nhiều lĩnh vực công nghiệp khác nhau và đặc biệt là trong hệ thống IoT Nó không chỉ kéo dài tuổi thọ pin mà còn cung cấp tin nhắn chỉ trong
“vài trăm mili giây” Giao thức MQTT sử dụng băng thông thấp do đó phù hợp với các thiết bị có hạn chế về tốc độ đường truyền và độ tin cậy thấp, nó cũng được ứng dụng trong các mạng có độ tin cậy cao nhưng cần tiết kiệm băng thông MQTT cho phép giao tiếp hai chiều, sử dụng một kết nối TCP được tạo ra từ các client để kết nối client với broker Giao thức này có mô hình publish/subscribe các bản tin và được thiết kế trong các ứng dụng sử dụng công nghệ M2M gọn nhẹ Chương trình
sử dụng phần mềm lập trình Python để thử nghiệm quá trình publish/subscribe giữa client và broker Qua đó có thể hiểu rõ hơn về giao thức MQTT cũng như quá trình hoạt động của nó
ABSTRACT
This thesis was studied about protocol MQTT The MQTT protocol is used today throughout a variety of industries and IoT environments It’s to not only save battery life but also deliver messages in "the hundreds of milliseconds" MQTT's low bandwidth makes it ideal for constrained devices and unreliable networks, though it is often also used on reliable networks to preserve bandwidth MQTT enables bidirectional communication, uses a TCP connection initiated by the client
to connect client and broker MQTT is a publish/subscribe messaging protocol designed for lightweight M2M communications Using Python programming software for testing process publish/ subscribe between client and broker Through that can better understand the protocol MQTT well as its operational processes
Trang 6DANH MỤC CÁC BẢNG BIỂU
Bảng 2.1 Định dạng phần header cố định của message 36
Bảng 2.2 Định dạng phần header thay đổi đƣợc của message CONNECT 38
Bảng 2.3 Các giá trị và ý nghĩa của mã rc 41
Bảng 2.4 Định dạng phần header cố định của message CONNECT 42
Bảng 2.5 Ví dụ biểu diễn phần hesder thay đổi đƣợc của message CONNECT 43
Bảng 2.6 Định dạng phần header cố định message PUBLISH 46
Bảng 2.7 Header có độ dài thay đổi của message PUBLISH 47
Bảng 2.8 Ví dụ về phần header thay đổi đƣợc của message PUBLISH 47
Bảng 2.9 Định dạng phần header cố định của message SUBSCRIBE 48
Bảng 2.10 Ví dụ về phần header thay đổi đƣợc với message ID bằng 10 48
Trang 7DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Kiến trúc TCP/IP 3
Hình 1.2 Khuôn dạng của UDP datagram 5
Hình 1.3 Khuôn dạng TCP segment 6
Hình 1.4 Quá trình truyền dữ liệu trong mô hình TCP/IP 8
Hình 1.5 Các lớp trong mô hình OSI 9
Hình 1.6 Quá trình truyền dữ liệu trong mô hình OSI 12
Hình 1.7 So sánh mô hình TCP/IP và OSI 13
Hình 1.8 Mô hình OSI rút gọn 14
Hình 1.9 Mô hình Socket 14
Hình 2.1 Kiến trúc tham chiếu cho IoT 17
Hình 2.2 Kiến trúc lớp (hay ngăn xếp – Stack) trong kiến trúc Zigbee 25
Hình 2.3 Các mô hình mạng Zigbee 26
Hình 2.4 Các tầng nghi thức của Bluetooth 28
Hình 2.5 Quá trình Subscribe của client B và client C 34
Hình 2.6 Quá trình Publish của client A và nhận dữ liệu của client B, C 34
Hình 3.1 Giao diện hệ điều hành Ubuntu 55
Hình 3.2 Giao diện Python trên Ubuntu 57
Hình 3.3 Kết quả quá trình publish của thiết bị 61
Hình 3.4 Kết quả quá trình subscribe của thiết bị 61
Trang 8DANH SÁCH CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Internet Protocol Media Access Control User Datagram Protocol
Open Systems Interconnection
Constrained Application Protocol Hyper Text Transfer Protocol Hyper Text Transfer Protocol Secure
Local Area Network General Packet Radio Service
File Transfer Protocol Institute of Electrical and Electronics Engineers Secure Sockets Layer Transport Layer Security
Công nghệ truyền nhận tốc độ tức thời
Internet của sự vật Máy đến Máy Giao thức điều khiển truyền thông
Giao thức Internet Địa chỉ vật lý của thiết bị Giao thức gói dữ liệu người
dùng
Mô hình tham chiếu kết nối các hệ thống mở
Giao thức ràng buộc ứng dụng Giao thức truyền tải siêu văn bản
Phiên bản của giao thức HTTP Mạng máy tính cục bộ
Dịch vụ dữ liệu di động dạng gói
Giao thức chuyển nhượng tập tin
Viện kỹ nghệ Điện và Điện tử
Giao thức bảo mật Giao thức an toàn tầng giao vận
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 1.1 Giới thiệu về đề tài
1.1.1 Lý do chọn đề tài
Giao thức MQTT là một giao thức quan trọng trong hệ thống IoT IoT nhằm đưa thế giới tiến tới những kỹ thuật tiên tiến nhất, thông minh nhất, một thế giới mà các thiết bị có thể đo lường và đưa ra các nhận xét chính xác nhất Để thực hiện được một thế giới thông minh như vậy thì việc tìm hiểu về cách thức hoạt động và
sự giao tiếp giữa các thiết bị IoT là cực kỳ quan trọng Nhận biết được tầm quan trọng đó, trong đồ án này em lựa chọn nghiên cứu về giao thức MQTT nhằm giúp bạn đọc hiểu rõ hơn về giao thức này cũng như vai trò của nó trong IoT
1.1.2 Mục đích chọn đề tài
Mục đích của đề tài này là đi sâu nghiên cứu về giao thức MQTT và quá trình truyền nhận dữ liệu thông qua giao thức này Sự phát triển của thế giới thông minh cần có các giao thức phù hợp với thiết bị IoT, bởi vì các thiết bị IoT là rất nhỏ, tiêu tốn ít công suất do đó các giao thức truyền nhận cũng cần tiêu tốn ít năng lượng Giao thức MQTT như là một ống dẫn luồng dữ liệu nhị phân cho các thiết bị IoT, giao thức này thực sự quan trọng đối với sự hoàn thiện của thế giới IoT
1.1.3 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu ở đồ án này là giao thức MQTT trong hệ thống IoT và lập trình truyền nhận dữ liệu thông qua giao thức MQTT trên phần mềm Python Phạm vi nghiên cứu là quá trình giao tiếp M2M thông qua công nghệ kết nối Wifi M2M kết nối tất cả các loại thiết bị và máy móc trên hệ thống mạng, từ đó chúng có thể giao tiếp với nhau thông qua máy chủ trung tâm hoặc dựa trên đám mây doanh nghiệp sử hữu
1.1.4 Ý nghĩa khoa học và ý nghĩa thực tiễn của đề tài
Ý nghĩa khoa học:
Sự giao tiếp giữa các thiết bị M2M phụ thuộc vào giao thức MQTT Khi các thiết bị M2M có thể giao tiếp với nhau một cách dễ dàng thì sẽ tự động kết nối với
Trang 10nhau và làm việc thay cho con người Từ đó sẽ xây dựng nên một thế giới thông minh Một thế giới mà các cảm biến sẽ đo lường và đưa ra những nhận xét chính xác nhất về môi trường, thiên tai, lũ lụt, và gửi về cho chúng ta thông qua giao thức MQTT
Ý nghĩa thực tiễn:
Sự phát triển của giao thức MQTT sẽ dẫn tới sự phát triển của các thiết bị M2M và sẽ đẩy nhanh sự hoàn thiện thế giới IoT IoT có thể thay đổi hoàn toàn cách sống của con người trong tương lai không xa Khi mọi vật đã được "Internet hóa" người dùng có thể điều khiển chúng từ bất kỳ nơi nào, không bị giới hạn về mặt không gian và thời gian chỉ cần một thiết bị thông minh có kết nối Internet Internet of Thing đang là chìa khóa của thành công trong tương lai
1.2 Một số giao thức sử dụng trong truyền thông
Một máy tính tương tác với thế giới thông qua một hoặc nhiều ứng dụng Những ứng dụng này thực hiện các nhiệm vụ cụ thể và quản lý dữ liệu ra và vào Nếu máy tính đó là một phần của hệ thống mạng, thì một trong số các ứng dụng trên
sẽ có thể giao tiếp với các ứng dụng trên các máy tính khác thuộc cùng hệ thống mạng Bộ giao thức mạng là một hệ thống các quy định chung giúp xác định quá trình truyền dữ liệu phức tạp Dữ liệu đi từ ứng dụng trên máy này, qua phần cứng mạng của máy, tới bộ phận trung gian và đến nơi nhận, thông qua phần cứng của máy tính đích rồi tới ứng dụng
1.2.1 Mô hình TCP/IP
TCP/IP là viết tắt của Transmission Control Protocol (Giao thức Điều Khiển Truyền Thông) / Internet Protocol (Giao thức Internet).TCP/IP là một bộ giao thức (bao gồm nhiều giao thức) hỗ trợ việc truyền thông giữa các máy tính hoặc các thiết
bị tương tự trên mạng
TCP/IP là bộ các giao thức có vai trò xác định quá trình liên lạc trong mạng và quan trọng hơn cả là định nghĩa “hình dạng” của một đơn vị dữ liệu và những thông tin chứa trong nó để máy tính đích có thể dịch thông tin một cách chính xác TCP/IP
và các giao thức liên quan tạo ra một hệ thống hoàn chỉnh quản lý quá trình dữ liệu được xử lý, chuyển và nhận trên một mạng sử dụng TCP/IP Một hệ thống các giao
Trang 11thức liên quan, chẳng hạn như TCP/IP, được gọi là bộ giao thức
Thực tế của quá trình định dạng và xử lý dữ liệu bằng TCP/IP được thực hiện bằng bộ lọc của các hãng sản xuất Một chuẩn TCP/IP là một hệ thống các quy định quản lý việc trao đổi trên các mạng TCP/IP Bộ lọc TCP/IP là một phần mềm có chức năng cho phép một máy tính hoà vào mạng TCP/IP
Các chức năng của TCP/IP:
Một hệ thống giao thức như TCP/IP phải đảm bảo khả năng thực hiện những công việc sau:
- Cắt thông tin thành những gói dữ liệu để có thể dễ dàng đi qua bộ phận truyền tải trung gian
- Tương tác với phần cứng của adapter mạng
- Xác định địa chỉ nguồn và đích: Máy tính gửi thông tin đi phải có thể xác định được nơi gửi đến Máy tính đích phải nhận ra đâu là thông tin gửi cho mình
- Định tuyến: Hệ thống phải có khả năng hướng dữ liệu tới các tiểu mạng, cho
dù tiểu mạng nguồn và đích khác nhau về mặt vật lý
- Kiểm tra lỗi, kiểm soát giao thông và xác nhận: Đối với một phương tiện truyền thông tin cậy, máy tính gửi và nhận phải xác định và có thể sửa chữa lỗi trong quá trình vận chuyển dữ liệu
- Chấp nhận dữ liệu từ ứng dụng và truyền nó tới mạng đích
Để có thể thực hiện các công việc trên, những người sáng tạo ra TCP/IP đã chia nó thành những phần riêng biệt, theo lý thuyết, hoạt động độc lập với nhau Mỗi thành phần chịu một trách nhiệm riêng biệt trong hệ thống mạng
1.2.1.1 Kiến trúc TCP/IP
Hình 1.1 Kiến trúc TCP/IP
Trang 12Tầng liên kết mạng (Network Access Layer):
Tầng liên kết (còn được gọi là tầng liên kết dữ liệu hay là tầng giao thiếp mạng) là tầng thấp nhất trong mô hình TCP/IP, bao gồm các thiết bị giao tiếp mạng
và chương trình cung cấp các thông tin cần thiết để có thể hoạt động, truy nhập đường truyền vật lý qua thiết bị giao tiếp mạng đó
Tầng này gồm các thiết bị phần cứng vật lí chẳng hạn như Card Mạng và Cáp Mạng Card mạng chẳng hạn là card Ethernet chứa một số HEX 12 kí tự (00-18-37-03-C0-F4) được gọi là địa chỉ MAC hay địa chỉ truy nhập phương tiện MAC đóng vai trò quan trọng trong việc gán địa chỉ và truyền dữ liệu
Một số giao thức thuộc tầng này bao gồm:
Tầng Internet (Internet Layer):
Tầng Internet (hay còn gọi là tầng mạng) xử lý quá trình truyền gói tin trên mạng bao gồm các chức năng: gán địa chỉ, đóng gói và định tuyến (Route) dữ liệu
4 giao thức quan trọng trong giao thức này là:
+ IP: Có chức năng gán địa chỉ cho dữ liệu trước khi truyền và định tuyến chúng tới đích
+ ARP: Có chức năng biên dịch địa chỉ IP của máy đích thành địa chỉ MAC + ICMP: Có chức năng thông báo lỗi trong trường hợp truyền dữ liệu bị hỏng + IGMP: Có chức năng điều khiển truyền đa hướng (Multicast)
Tầng giao vận (Transport Layer):
Tầng giao vận phụ trách luồng dữ liệu giữa hai trạm thực hiện các ứng dụng của tầng trên Tầng này có hai giao thức chính: TCP và UDP
Giao thức UDP:
Là một trong những giao thức cốt lõi của giao thức TCP/IP Dùng UDP, chương trình trên mạng máy tính có thể gởi những dữ liệu ngắn được gọi là
Trang 13datagram tới máy khác UDP không cung cấp sự tin cậy và thứ tự truyền nhận mà TCP làm, các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo Tuy nhiên UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu
Khuôn dạng của UDP datagram như sau:
Source Port Destination Port Length Checksum
Data Hình 1.2 Khuôn dạng của UDP datagram
− Số hiệu cổng nguồn (Source Port - 16 bit): số hiệu cổng nơi đã gửi datagram
− Số hiệu cổng đích (Destination Port - 16 bit): số hiệu cổng nơi datagram được chuyển tới
− Độ dài UDP (Length - 16 bit): độ dài tổng cổng kể cả phần header của gói UDP datagram
− UDP Checksum (16 bit): dùng để kiểm soát lỗi, nếu phát hiện lỗi thì UDP datagram sẽ bị loại bỏ mà không có một thông báo nào trả lại cho trạm gửi UDP có chế độ gán và quản lý các số hiệu cổng (port number) để định danh duy nhất cho các ứng dụng chạy trên một trạm của mạng Do có ít chức năng phức tạp nên UDP
có xu thế hoạt động nhanh hơn so với TCP Nó thường dùng cho các ứng dụng không đòi hỏi độ tin cậy cao trong giao vận
Giao thức TCP:
TCP và UDP là 2 giao thức ở tầng giao vận và cùng sử dụng giao thức IP trong tầng mạng Nhưng không giống như UDP, TCP cung cấp dịch vụ liên kết tin cậy và có liên kết
Có liên kết ở đây có nghĩa là 2 ứng dụng sử dụng TCP phải thiết lập liên kết với nhau trước khi trao đổi dữ liệu Sự tin cậy trong dịch vụ được cung cấp bởi TCP được thể hiện như sau:
− Dữ liệu từ tầng ứng dụng gửi đến được được TCP chia thành các segment có
Trang 14− TCP duy trì giá trị tổng kiểm tra (checksum) trong phần Header của dữ liệu
để nhận ra bất kỳ sự thay đổi nào trong quá trình truyền dẫn Nếu 1 segment bị lỗi thì TCP ở phía trạm nhận sẽ loại bỏ và không phúc đáp lại để trạm gửi truyền lại segment bị lỗi đó
Giống như IP datagram, TCP segment có thể tới đích một cách không tuần tự
Do vậy TCP ở trạm nhận sẽ sắp xếp lại dữ liệu và sau đó gửi lên tầng ứng dụng đảm bảo tính đúng đắn của dữ liệu Khi IP datagram bị trùng lặp TCP tại trạm nhận sẽ loại bỏ dữ liệu trùng lặp đó
TCP cũng cung cấp khả năng điều khiển luồng Mỗi đầu của liên kết TCP có vùng đệm (buffer) giới hạn do đó TCP tại trạm nhận chỉ cho phép trạm gửi truyền một lượng dữ liệu nhất định (nhỏ hơn không gian buffer còn lại) Điều này tránh xảy ra trường hợp trạm có tốc độ cao chiếm toàn bộ vùng đệm của trạm có tốc độ chậm hơn
0 4 10 16 24 31
Source Port Destination Port
Sequence Number Acknowledgement Number
Trang 15Các tham số trong khuôn dạng trên có ý nghĩa như sau:
− Source Port (16 bits ) là số hiệu cổng của trạm nguồn
− Destination Port (16 bits ) là số hiệu cổng trạm đích
− Sequence Number (32 bits) là số hiệu byte đầu tiên của segment trừ khi bit SYN được thiết lập Nếu bit SYN được thiết lập thì sequence number là số hiệu tuần tự khởi đầu ISN (Initial Sequence Number ) và byte dữ liệu đầu tiên là ISN +
1 Thông qua trường này TCP thực hiện việc quản lý từng byte truyền đi trên một kết nối TCP
− Acknowledgment Number (32 bits): số hiệu của segment tiếp theo mà trạm nguồn đang chờ để nhận và ngầm định báo nhận tốt các segment mà trạm đích đã gửi cho trạm nguồn
− Header Length (4 bits): số lượng từ (32 bits) trong TCP header, chỉ ra vị trí bắt đầu của vùng dữ liệu vì trường Option có độ dài thay đổi Header length có giá trị từ 20 đến 60 byte
− Reserved (6 bits): dành để dùng trong tương lai
− Control bits: các bit điều khiển
URG: xác đinh vùng con trỏ khẩn có hiệu lực
ACK: vùng báo nhận ACK Number có hiệu lực
PSH: chức năng PUSH
RST: khởi động lại liên kết
SYN: đồng bộ hoá các số hiệu tuần tự (Sequence number)
FIN: không còn dữ liệu từ trạm nguồn
− Window size (16 bits): cấp phát thẻ để kiểm soát luồng dữ liệu (cơ chế cửa
sổ trượt) Đây chính là số lượng các byte dữ liệu bắt đầu từ byte được chỉ ra trong vùng ACK number mà trạm nguồn sẫn sàng nhận
− Checksum (16 bits): mã kiểm soát lỗi cho toàn bộ segment cả phần header
và dữ liệu
− Urgent Pointer (16 bits): con trỏ trỏ tới số hiệu tuần tự của byte cuối cùng trong dòng dữ liệu khẩn cho phép bên nhận biết được độ dài của dữ liệu khẩn Vùng này chỉ có hiệu lực khi bit URG được thiết lập
− Option (độ dài thay đổi ): khai báo các tuỳ chọn của TCP trong đó thông
Trang 16thường là kích thước cực đại của 1 segment: MSS (Maximum Segment Size)
− TCP data (độ dài thay đổi ): chứa dữ liệu của tầng ứng dụng có độ dài ngầm định là 536 byte Giá trị này có thể điều chỉnh được bằng cách khai báo trong vùng Option
Tầng ứng dụng (Application Layer):
Tầng ứng dụng là tầng trên cùng của mô hình TCP/IP bao gồm các tiến trình
và các ứng dụng cung cấp cho người sử dụng để truy cập mạng Có rất nhiều ứng dụng được cung cấp ở tầng này, mà phổ biến là: Telnet: sử dụng trong việc truy cập mạng từ xa, FTP (File Transfer Protocol): dịch vụ truyền tệp, Email: dịch vụ thư tín điện tử, WWW (World Wide Web)
1.2.1.2 Quá trình truyền dữ liệu trong mô hình TCP/IP
user data
user data Appl
head
er
application data TCP
header
application data TCP
header
TCP header application data
IP header
IP header
Ethernet
header
Ethernet trailer
application
TCP
IP
Ethernet driver
Trang 17qua mỗi tầng thì phần header tương ứng được lấy đi và khi đến tầng trên cùng thì dữ liệu không còn phần header nữa
1.2.3 Mô hình OSI
Mô hình OSI (Open System Interconnection): là mô hình được tổ chức ISO đề xuất từ 1977 và công bố lần đầu vào 1984 Để các máy tính và các thiết bị mạng có thể truyền thông với nhau phải có những qui tắc giao tiếp được các bên chấp nhận
Mô hình OSI là một khuôn mẫu giúp chúng ta hiểu dữ liệu đi xuyên qua mạng như thế nào đồng thời cũng giúp chúng ta hiểu được các chức năng mạng diễn ra tại mỗi lớp
1.2.3.1 Kiến trúc và chức năng các lớp trong mô hình OSI
Hình 1.5 Các lớp trong mô hình OSI Chức năng của các lớp trong mô hình tham chiếu OSI:
Lớp ứng dụng (ApplicationLayer): là giao diện giữa các chương trình ứng
dụng của người dùng và mạng Lớp Application xử lý truy nhập mạng chung, kiểm soát luồng và phục hồi lỗi Lớp này không cung cấp các dịch vụ cho lớp nào mà nó cung cấp dịch vụ cho các ứng dụng như: truyền file, gởi nhận E-mail, Telnet, HTTP, FTP, SMTP…
Lớp trình bày (PresentationLayer): lớp này chịu trách nhiệm thương lượng
và xác lập dạng thức dữ liệu được trao đổi Nó đảm bảo thông tin mà lớp ứng dụng của một hệ thống đầu cuối gởi đi, lớp ứng dụng của hệ thống khác có thể đọc được Lớp trình bày thông dịch giữa nhiều dạng dữ liệu khác nhau thông qua một dạng
Trang 18chung, đồng thời nó cũng nén và giải nén dữ liệu Thứ tự byte, bit bên gởi và bên nhận qui ước qui tắc gởi nhận một chuỗi byte, bit từ trái qua phải hay từ phải qua trái Nếu hai bên không thống nhất thì sẽ có sự chuyển đổi thứ tự các byte bit vào trước hoặc sau khi truyền Lớp presentation cũng quản lý các cấp độ nén dữ liệu nhằm giảm số bit cần truyền Ví dụ: JPEG, ASCCI, EBCDIC
Lớp phiên (SessionLayer): lớp này có chức năng thiết lập, quản lý, và kết
thúc các phiên thông tin giữa hai thiết bị truyền nhận Lớp phiên cung cấp các dịch
vụ cho lớp trình bày Lớp Session cung cấp sự đồng bộ hóa giữa các tác vụ người dùng bằng cách đặt những điểm kiểm tra vào luồng dữ liệu Bằng cách này, nếu mạng không hoạt động thì chỉ có dữ liệu truyền sau điểm kiểm tra cuối cùng mới phải truyền lại Lớp này cũng thi hành kiểm soát hội thoại giữa các quá trình giao tiếp, điều chỉnh bên nào truyền, khi nào, trong bao lâu Ví dụ như: RPC, NFS, Lớp này kết nối theo ba cách: Haft-duplex, Simplex, Full-duplex
Lớp vận chuyển (TransportLayer): lớp vận chuyển phân đoạn dữ liệu từ hệ
thống máy truyền và tái thiết lập dữ liệu vào một luồng dữ liệu tại hệ thống máy nhận đảm bảo rằng việc bàn giao các thông điệp giữa các thiết bị đáng tin cậy Dữ liệu tại lớp này gọi là segment Lớp này thiết lập, duy trì và kết thúc các mạch ảo đảm bảo cung cấp các dịch vụ sau:
+ Xếp thứ tự các phân đoạn: khi một thông điệp lớn được tách thành nhiều phân đoạn nhỏ để bàn giao, lớp vận chuyển sẽ sắp xếp thứ tự các phân đoạn trước khi ráp nối các phân đoạn thành thông điệp ban đầu
+ Kiểm soát lỗi: khi có phân đoạn bị thất bại, sai hoặc trùng lắp, lớp vận chuyển sẽ yêu cầu truyền lại
+ Kiểm soát luồng: lớp vận chuyển dùng các tín hiệu báo nhận để xác nhận Bên gửi sẽ không truyền đi phân đoạn dữ liệu kế tiếp nếu bên nhận chưa gởi tín hiệu xác nhận rằng đã nhận được phân đoạn dữ liệu trước đó đầy đủ
Lớp mạng (NetworkLayer): lớp mạng chịu trách nhiệm lập địa chỉ các thông
điệp, diễn dịch địa chỉ và tên logic thành địa chỉ vật lý đồng thời nó cũng chịu trách nhiệm gởi packet từ mạng nguồn đến mạng đích Lớp này quyết định đường đi từ máy tính nguồn đến máy tính đích Nó quyết định dữ liệu sẽ truyền trên đường nào dựa vào tình trạng, ưu tiên dịch vụ và các yếu tố khác Nó cũng quản lý lưu lượng
Trang 19trên mạng chẳng hạn như chuyển đổi gói, định tuyến, và kiểm soát sự tắc nghẽn dữ liệu Nếu bộ thích ứng mạng trên bộ định tuyến (router) không thể truyền đủ đoạn
dữ liệu mà máy tính nguồn gởi đi, lớp Network trên bộ định tuyến sẽ chia dữ liệu thành những đơn vị nhỏ hơn, nói cách khác, nếu máy tính nguồn gởi đi các gói tin
có kích thước là 20Kb, trong khi Router chỉ cho phép các gói tin có kích thước là 10Kb đi qua, thì lúc đó lớp Network của Router sẽ chia gói tin ra làm 2, mỗi gói tin
có kích thước là 10Kb Ở đầu nhận, lớp Network ráp nối lại dữ liệu Ví dụ: một số giao thức lớp này: IP, IPX, Dữ liệu ở lớp này gọi packet hoặc datagram
Lớp liên kết dữ liệu (Data link Layer): cung cấp khả năng chuyển dữ liệu tin
cậy xuyên qua một liên kết vật lý Lớp này liên quan đến:
+ Địa chỉ vật lý
+ Mô hình mạng
+ Cơ chế truy cập đường truyền
+ Thông báo lỗi
+ Thứ tự phân phối frame
+ Điều khiển dòng
Tại lớp datalink, các bít đến từ lớp vật lý được chuyển thành các frame dữ liệu bằng cách dùng một số nghi thức tại lớp này Lớp datalink được chia thành hai lớp con:
+ Lớp con LLC (logical link control)
+ Lớp con MAC (media access control)
Lớp con LLC là phần trên so với các giao thức truy cập đường truyền khác, nó cung cấp sự mềm dẻo về giao tiếp Bởi vì lớp con LLC hoạt động độc lập với các giao thức truy cập đường truyền, cho nên các giao thức lớp trên hơn (ví dụ như IP ở lớp mạng) có thể hoạt động mà không phụ thuộc vào loại phương tiện LAN Lớp con LLC có thể lệ thuộc vào các lớp thấp hơn trong việc cung cấp truy cập đường truyền
Lớp con MAC cung cấp tính thứ tự truy cập vào môi trường LAN Khi nhiều trạm cùng truy cập chia sẻ môi trường truyền, để định danh mỗi trạm, lớp cho MAC định nghĩa một trường địa chỉ phần cứng, gọi là địa chỉ MAC address Địa chỉ MAC
là một con số đơn nhất đối với mỗi giao tiếp LAN (card mạng)
Trang 20Lớp vật lý (PhysicalLayer): định nghĩa các qui cách về điện, cơ, thủ tục và
các đặc tả chức năng để kích hoạt, duy trì và dừng một liên kết vật lý giữa các hệ thống đầu cuối Một số các đặc điểm trong lớp vật lý này bao gồm:
Quá trình xử lý và vận chuyển của một gói dữ liệu trong mô hình OSI:
Hình 1.6 Quá trình truyền dữ liệu trong mô hình OSI
1.2.3.2 So sánh hai giao thức TCP/IP và OSI
Khi kiến trúc tiêu chuẩn OSI xuất hiện thì TCP/IP đã trên con đường phát triển Xét một cách chặt chẽ, TCP/IP không tuân theo OSI Tuy nhiên, hai mô hình này có những mục tiêu giống nhau và do có sự tương tác giữa các nhà thiết kế tiêu chuẩn nên 2 mô hình xuất hiện những điểm tương thích Cũng chính vì thế, các thuật ngữ của OSI thường được áp dụng cho TCP/IP
Hình 1.7 thể hiện mối quan hệ giữa tiêu chuẩn TCP/IP bốn lớp và mô hình OSI bảy lớp
Trang 21Hình 1.7 So sánh mô hình TCP/IP và OSI OSI chia nhiệm vụ của lớp ứng dụng thành 3 phân lớp: ứng dụng, trình bày và khu vực Hoạt động của lớp tương tác mạng trong OSI được tách thành lớp kết nối
dữ liệu và lớp vật lý Việc chia nhỏ chức năng làm tăng thêm sự phức tạp, nhưng đồng thời cũng tạo ra sự linh hoạt cho các nhà phát triển
1.2.4 Truyền thông Socket
1.2.4.1 Định nghĩa
Có nhiều định nghĩa khác nhau về socket tùy theo cách nhìn của người sử dụng Một cách tổng quát nhất có thể định nghĩa: Một socket là một điểm cuối trong một kết nối giữa hai chương trình đang chạy trên mạng
Nhìn trên quan điểm của người phát triển ứng dụng người ta có thể định nghĩa: Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ (được gán nhãn client) và một chương trình cung cấp dịch vụ (được gán nhãn server) trên mạng hoặc trên cùng một máy tính
Đối với người lập trình, họ nhìn nhận socket như một giao diện nằm giữa tầng ứng dụng và tầng khác trong mô hình mạng OSI có nhiệm vụ thực hiện việc giao tiếp giữa chương trình ứng dụng với các tầng bên dưới của mạng
Tuy nhiên, các lập trình viên hiện nay gần như luôn luôn bị ngăn cản tạo socket riêng bằng cách thủ công bởi dù bạn dùng Java, serlet, hay CGI, PHP, có thể bạn sẽ không bao giờ mở được cổng một cách tường minh Thay vào đó các lập trình viên sử dụng thư viện socket được hỗ trợ sẵn bởi các ngôn ngữ lập trình Như
Trang 22vậy các socket vẫn tồn tại để kết nối các ứng dụng của người dùng, nhưng các chi tiết của socket được ẩn trong những lớp sâu hơn để mội người không phải đụng chạm đến
Socket không hướng kết nối (UDP)
Đặc điểm của socket hướng kết nối:
+ Có một đường kết nối (địa chỉ IP) giữa 2 tiến trình
+ Một trong 2 tiến trình kia phải đợi tiến trình kia yêu cầu kết nối
+ Có thể dùng để liên lạc theo mô hình client và sever
+ Mô hình client /sever thì sever lắng nghe và chấp nhận từ client
+ Mỗi thông điệp gửi phải có xác nhận trả về
Program A
Host1
Program B
Host2
Trang 23+ Các gói tin chuyển đi tuần tự
Đặc điểm socket không hướng kết nối:
+ 2 tiến trình liên lạc với nhau không kết nối trực tiếp
+ Thông điệp gửi đi phải kèm theo thông điệp người nhận
+ Thông điệp có thể gửi nhiều lần
+ Người gửi không chắc chắn thông điệp đến tay người nhận
+ Thông điệp gửi sau có thể đến trước và ngược lại
Số hiệu cổng của socket:
Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố số hiệu cổng socket mà mình sử dụng Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống Khi quá trình được gán một số hiệu cổng, nó có thể nhận dữ liệu gửi đến cổng này từ các quá trình khác Quá trình còn lại cũng được yêu cầu tạo
ra một socket
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau Địa chỉ IP giúp phân biệt máy tính này với máy tính kia trên mạng TCP/IP Trong khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính
1.2.4.2 Nguyên lý hoạt động
Như ta đã thấy, khi hai ứng dụng muốn trao đổi dữ liệu qua mạng chúng sẽ tạo
ra ở mỗi phía một socket và trao đổi dữ liệu bằng cách đọc/ghi từ socket Để hiểu rõ cách thức socket trao đổi dữ liệu chúng ta hãy xem xét nguyên lý hoạt động của chúng
Trước hết chúng ta hãy xem xét làm thế nào các socket có thể xác định được nhau Khi một chương trình tạo ra một socket, một định danh dạng số ( định danh dạng số này còn được gọi là số hiệu cổng) sẽ được gán cho socket Việc gán số hiệu cổng này cho socket có thể được thực hiện bởi chương trình hoặc hệ điều hành tùy theo cách socket được sử dụng như thế nào Trong mỗi gói tin mà socket gửi đi có chứa hai thông tin để xác định đích đến của gói tin:
+ Một địa chỉ mạng để xác định hệ thống sẽ nhận gói tin
+ Một số định danh cổng để nói cho hệ thống đích biết socket nào trên nó sẽ nhận dữ liệu
Trang 24Nhờ hai thông tin này mà gói tin có thể đến đúng được máy tính chứa socket
mà nó cần đến (nhờ địa chỉ mạng) và được phân phối đến đúng socket đích (nhờ địa chỉ cổng của socket đích)
Dưới góc độ lập trình các socket thường làm việc theo cặp, một socket đóng vai trò làm server còn các socket khác đóng vai trò như clients Socket phía server xác định một cổng cho giao tiếp mạng, sau đó chờ nghe yêu cầu mà client gửi tới nó bằng client socket Do đó các cổng cho server socket phải được biết bởi các chương trình client
Như vậy số hiệu cổng của socket phía server được xác định bởi chương trình, ngược lại cổng cho client socket được xác định bởi hệ điều hành Khi một socket phía client gửi một gói tin tới socket phía server thì trong gói tin đã có chứa thông tin về địa chỉ của hệ thống client và cổng của socket phía client trên server hoàn toàn có thể gửi thông tin phản hồi cho client
Chúng ta có thể khái quát quá trình trao đổi dữ liệu thông qua các socket như sau:
+ Chương trình phía server tạo ra một socket, socket này được chương trình gắn với một cổng trên server Sau khi tạo ra socket này (ta gọi là socket phía server)
sẽ chờ nghe yêu cầu từ client
+ Khi chương trình phía client cần kết nối với một server, nó cũng tạo ra một socket, socket này cũng được hệ điều hành gắn với một cổng Chương trình client
sẽ cung cấp cho socket của nó (ta gọi là socket phía client) địa chỉ mạng và cổng của socket phía server và yêu cầu thực hiện kết nối hoặc truyền dữ liệu
+ Chương trình phía server và chương trình phía client trao đổi dữ liệu với nhau bằng cách đọc từ socket hoặc ghi vào socket của mình Các socket ở hai phía nhận dữ liệu từ ứng dụng và đóng gói để gửi đi hoặc nhận các dữ liệu được gửi đến
và chuyển cho chương trình ứng dụng bởi socket ở cả hai phía đều biết được địa chỉ mạng và địa chỉ cổng của nhau
Trang 25CHƯƠNG 2 GIAO THỨC MQTT TRONG HỆ THỐNG IOT 2.1 Hệ thống IoT (Internet of Things)
2.1.1 Định nghĩa
Internet của Sự vật (IoT) là khái niệm về mọi vật đều có thể kết nối Internet thông qua các bộ cảm biến (sensor) Hệ thống IoT có thể bao gồm: các thiết bị đeo (wearable) theo dõi chỉ số y tế, thiết bị đo từ xa, nhà thông minh, mạng cảm biến không dây đo thông số môi trường, ô tô kết nối Internet, điện thoại di động tương tác với môi trường Kết quả là không có một kiến trúc chung duy nhất phù hợp cho mọi lĩnh vực ứng dụng nêu trên Tuy nhiên, một kiến trúc kiểu mô- đun cho phép thêm/bớt tính năng theo yêu cầu của từng tình huống ứng dụng là rất hữu ích Đó là điểm khởi đầu giúp cho các nhà kiến trúc tạo ra những giải pháp IoT nền tảng cho việc phát triển sau này
2.1.2 Kiến trúc tham chiếu
Kiến trúc tham chiếu IoT bao gồm 5 lớp xếp chồng Mỗi lớp có một chức năng riêng, có thể minh họa bằng những công nghệ cụ thể Có 2 lớp theo chiều dọc
là quản lý thiết bị và quản lý định danh & truy nhập
Hình 2.1 Kiến trúc tham chiếu cho IoT
Trang 26Lớp Thiết bị (Devices):
Các thiết bị IoT phải có giao thức truyền thông trực tiếp (Arduino, Raspberry
Pi, Intel Galileo qua Ethernet hoặc Wi-Fi) hoặc gián tiếp kết nối được với Internet (ZigBee, Bluetooth hoặc Bluetooth công suất thấp qua điện thoại di động, )
Mỗi thiết bị cần có định danh thuộc một trong các loại: định danh duy nhất (UUID) ghi sẵn trong phần cứng (thường là một phần của SoC hoặc chip thứ cấp), UUID gửi qua hệ thống vô tuyến phụ (ví dụ: định danh Bluetooth, địa chỉ Wi-Fi MAC), token OAuth2 Refresh/Bearer (có thể là bổ sung cho các loại khác), định danh lưu trong bộ nhớ chỉ đọc như EEPROM
Các chuyên gia khuyến nghị, mỗi thiết bị IoT nên có một UUID (tốt nhất lưu
cố định trong phần cứng) và một token OAuth2 Refresh/Bearer lưu trong EEPROM OAuth2 token có mục đích tạo ra một token định danh tách biệt với số định danh cố định ghi trong mỗi thiết bị Bearer token được dùng ban đầu để gửi đến bất kỳ server hay dịch vụ nào cần định danh Bearer token có thời gian sống ngắn hơn Refresh token Nếu Bearer token hết hạn, Refresh token được gửi đến lớp định danh để tạo ra bản cập nhật của Bearer token
Lớp Truyền thông (Communications):
Lớp truyền thông hỗ trợ kết nối các thiết bị Nhiều giao thức có thể sử dụng trong lớp này như HTTP/HTTPS, MQTT 3.1/3.1.1, CoAP (Constrained Application Protocol) Trong đó, HTTP là giao thức lâu đời và phổ biến nhất nên có nhiều thư viện hỗ trợ Vì đó là giao thức dựa trên ký tự đơn giản nên nhiều thiết bị nhỏ như bộ điều khiển 8 bit đều có thể hỗ trợ HTTP Các thiết bị 32 bit lớn hơn có thể sử dụng các thư viện HTTP client đầy đủ
Có một số giao thức được tối ưu riêng cho IoT, trong đó nổi bật nhất là 2 giao thức MQTT và CoAP
Lớp Hợp nhất/Bus (Aggregation/ Bus):
Đây là lớp quan trọng để hợp nhất và chuyển đổi các thông điệp (message broker hay middleware) truyền thông với 3 chức năng sau:
- Hỗ trợ máy chủ HTTP và/hoặc chức năng chuyển đổi MQTT để giao tiếp với thiết bị
- Hợp nhất nội dung truyền từ các thiết bị khác nhau và định tuyến truyền
Trang 27thông tới một thiết bị cụ thể (có thể qua gateway)
- Bắc cầu và chuyển đổi giữa 2 giao thức khác nhau, ví dụ chuyển đổi API dựa trên HTTP ở lớp trên vào thông điệp MQTT đến thiết bị
Lớp Bus cũng có thể cung cấp một số tính năng tương quan (correlation) và ánh xạ đơn giản từ các mô hình tương quan khác nhau (nghĩa là ánh xạ số định danh thiết bị sang số định danh của người sở hữu thiết bị và ngược lại)
Cuối cùng, lớp Hợp nhất/Bus cần thực hiện 2 nhiệm vụ an toàn bảo mật là máy chủ tài nguyên OAuth2 (thẩm định Bearer token và các truy nhập tài nguyên liên quan) và điểm tăng cường chính sách (PEP) đối với truy nhập dựa trên chính sách Trong mô hình ở hình 2.1, lớp Bus yêu cầu lớp quản lý truy nhập và định danh thẩm định các yêu cầu truy nhập Lớp quản lý truy nhập và định danh đóng vai trò như điểm quyết định chính sách (PDP) trong quá trình này Sau đó, lớp Bus thực hiện theo kết quả do PDP mang đến, nghĩa là cho phép hoặc không cho phép truy nhập tài nguyên
Lớp Xử lý Sự kiện và Phân tích (Event Processing and Analytics):
Lớp này xử lý các sự kiện từ lớp Bus chuyển lên Yêu cầu chủ yếu ở đây là khả năng lưu trữ dữ liệu vào cơ sở dữ liệu Mô hình truyền thống sẽ viết một ứng dụng phía máy chủ (ví dụ, JAX-RS) Tuy nhiên, có một số cách tiếp cận khác linh hoạt hơn Thứ nhất là sử dụng các nền tảng phân tích dữ liệu lớn Đó là nền tảng dựa trên cloud khả mở hỗ trợ các công nghệ như Apache Hadoop để cung cấp những phân tích map-reduce (quy trình xử lý dữ liệu siêu lớn) đối với tập hợp dữ liệu đến từ các thiết bị Cách tiếp cận thứ hai là hỗ trợ phương thức Xử lý Sự kiện Phức tạp (Complex Processing Event) để thực hiện các hoạt động gần như theo thời gian thực và ra quyết định hành động dựa theo kết quả phân tích dữ liệu từ các thiết
bị chuyển đến
Lớp Truyền thông ngoài (External Communication):
Lớp này tạo ra giao diện giúp quản lý các thiết bị IoT như: web/portal, dashboard (bảng hiển thị tổng hợp) hoặc hệ thống quản lý API Với web/portal, kiến trúc cần hỗ trợ các công nghệ Web phía máy chủ như Java Servlets/JSP, PHP, Python, Ruby Web server dựa trên Java phổ biến nhất là Apache Tomcat Dashboard là hệ thống tái sử dụng tập trung vào việc trình bày đồ thị mô tả dữ liệu
Trang 28đến từ các thiết bị và lớp xử lý sự kiện Lớp quản lý API có 3 chức năng Thứ nhất
là cung cấp portal tập trung vào hỗ trợ lập trình viên tác nghiệp (chứ không phải là người sử dụng như portal thông thường) và quản lý các phiên bản của API được xuất bản Thứ hai là đóng vai trò gateway quản lý truy nhập vào các API, kiểm tra việc điều khiển truy nhập (đối với yêu cầu từ bên ngoài), điều tiết sử dụng dựa trên chính sách, định tuyến và cân bằng tải Cuối cùng là chức năng gateway đẩy dữ liệu vào lớp phân tích để lưu trữ và xử lý, giúp hiểu được các API đã được sử dụng như thế nào
Lớp Quản lý Thiết bị (Device Management):
Trong lớp quản lý thiết bị, hệ thống phía máy chủ DM (Device Manager) giao tiếp với các thiết bị thông qua các giao thức khác nhau và điều khiển phần mềm của từng thiết bị hoặc một nhóm thiết bị (có thể khóa hoặc xóa dữ liệu trên thiết bị khi cần), quản lý định danh các thiết bị và ánh xạ vào chủ nhân các thiết bị đó DM phải phối hợp với lớp quản lý định danh và truy nhập để quản lý việc điều khiển truy nhập vào thiết bị (những người có quyền truy nhập vào thiết bị ngoài chủ nhân, quyền điều khiển của chủ nhân thiết bị so với người quản trị )
Lớp Quản lý Định danh và Truy nhập (Identity and Access Management):
Lớp này cần cung cấp các dịch vụ: Phát hành và thẩm định Oauth2 token; Các dịch vụ định danh khác, gồm cả SAML2 SSO và OpenID Connect; XACML PDP; Danh bạ cho người dùng (ví dụ: LDAP); Quản lý chính sách điều khiển truy nhập (PCP)
2.1.3 Phân loại thiết bị IoT và phương thức kết nối Internet
Các thiết bị IoT rất đa dạng nhưng có thể phân thành ba loại chủ yếu, xét theo kích cỡ:
- Những thiết bị IoT có kích thước nhỏ nhất dùng bộ điều khiển 8 bit nhúng, kiểu cả hệ thống trên chip SoC (System on Chip) và thường không có hệ điều hành
Ví dụ điển hình là nền tảng phần cứng nguồn mở Arduino 8 bit
- Mức cao hơn là hệ thống dựa trên chip ARM và Arthero có kiến trúc 32 bit rút gọn (limited) Những thiết bị này thường là các bộ router nhỏ dành cho gia đình
và những biến thể khác Hệ thống thường chạy trên nền tảng nhúng Linux rút gọn
Trang 29hoặc hệ điều hành nhúng dành riêng Một số trường hợp không sử dụng hệ điều hành như Arduino Zero hoặc Arduino Yun
- Hệ thống IoT lớn nhất là loại sử dụng nền tảng 32 hoặc 64 bit đầy đủ Những
hệ thống như Raspberry Pi hay BeagleBone có thể chạy hệ điều hành Linux đầy đủ hoặc Android Nhiều trường hợp chính là điện thoại di động hoặc dựa trên công nghệ điện thoại di động Những thiết bị này có thể đóng vai trò gateway hoặc cầu (bridge) cho các thiết bị nhỏ hơn Ví dụ: thiết bị đeo kết nối qua Bluetooth công suất thấp với điện thoại di động hay Raspberry Pi, để sau đó làm cầu nối với mạng Internet
Có một số giải pháp kết nối giữa thiết bị với Internet hoặc gateway:
- Kết nối Ethernet hoặc Wi-Fi trực tiếp qua giao thức TCP hoặc UDP
- Bluetooth công suất thấp
- Kết nối trường gần (NFC)
- Zigbee hoặc các mạng vô tuyến khác
- SRF và kết nối vô tuyến điểm-điểm
- UART hoặc kênh nối tiếp (serial lines)
- SPI hoặc kênh I2C (wired buses)
2.1.4 Các yêu cầu của kiến trúc tham chiếu cho IoT
Yêu cầu chung là kiến trúc tham chiếu cho IoT phải trung lập với nhà sản xuất, không phụ thuộc vào công nghệ cụ thể nào Có những yêu cầu khá đặc thù cho thiết bị IoT và môi trường hỗ trợ nhưng cũng có những yêu cầu xuất phát từ quá trình sản xuất và sử dụng Có thể tóm tắt các yêu cầu của kiến trúc tham chiếu cho
IoT trong 5 nhóm sau:
Kết nối và giao tiếp:
Các giao thức hiện tại như HTTP có vị trí rất quan trọng trong nhiều thiết bị Thậm chí ngay cả bộ điều khiển 8 bit cũng có thể tạo ra lệnh GET, POST và giao thức HTTP tạo ra kết nối đồng nhất quan trọng Tuy nhiên, phần mào đầu của HTTP và một số giao thức Internet truyền thống chưa phù hợp cho giao tiếp IoT vì hai lý do Thứ nhất, kích cỡ bộ nhớ của chương trình quá lớn so với những thiết bị nhỏ Vấn đề thứ hai còn lớn hơn: HTTP yêu cầu công suất tương đối cao so với
Trang 30thiết bị IoT nhỏ Do vậy, cần có một giao thức nhị phân đơn giản, nhỏ gọn và có khả năng đi qua tường lửa Đối với thiết bị IoT kết nối Internet qua gateway cần 2 giao thức: một giao thức kết nối gateway còn giao thức khác kết nối từ gateway với Internet Cuối cùng, kiến trúc phải hỗ trợ giao thức truyền thông (communications)
và bắc cầu Ví dụ, giao thức nhị phân dùng cho thiết bị IoT phải cho phép API (dựa trên HTTP) điều khiển được thiết bị khi kết nối với bên thứ ba
Quản lý thiết bị:
Hiện nay, nhiều thiết bị IoT chưa được quản lý ở chế độ tích cực (active) trong khi chế độ quản lý này đã phổ biến và ngày càng trở nên quan trọng trong PC, điện thoại di động và các thiết bị khác Như vậy, chế độ tích cực là yêu cầu cần có trong quản lý thiết bị IoT, cụ thể bao gồm những tính năng sau:
- Khả năng ngắt kết nối với thiết bị hỏng hoặc bị đánh cắp
- Khả năng cập nhật phần mềm trên thiết bị
- Cập nhật các thông số bảo mật
- Khả năng bật/tắt từ xa một số tính năng phần cứng
- Xác định vị trí thiết bị mất cắp
- Xóa dữ liệu bảo mật khỏi thiết bị mất cắp
- Cấu hình lại từ xa các thông số của Wi-Fi, GPRS hoặc các thông số mạng khác
Thu thập, phân tích và khởi động dữ liệu:
Một số thiết bị IoT có giao diện UI nhưng nói chung hầu hết các thiết bị IoT tập trung vào trang bị 1-2 bộ cảm biến có thể kèm theo (hoặc không) 1 bộ kích động (actuator) hoặc nhiều hơn Yêu cầu của hệ thống là thu thập dữ liệu từ rất nhiều thiết bị, lưu trữ, phân tích và ra quyết định hành động dựa trên kết quả phân tích gần như theo thời gian thực Kiến trúc tham chiếu được thiết kế để quản lý số lượng lớn thiết bị Nếu những thiết bị đó tạo ra dòng dữ liệu ổn định, liên tục thì sẽ có lượng
dữ liệu khá lớn Yêu cầu là hệ thống lưu trữ cần có tính khả mở cao, xử lý được khối lượng dữ liệu lớn và đa dạng
Tính khả mở (scalability):
Bất kỳ kiến trúc phía máy chủ (server-side) nào đều cần tính khả mở cao, có thể hỗ trợ hàng triệu thiết bị liên tục gửi, nhận và hoạt động dựa trên dữ liệu Tuy
Trang 31nhiên, "kiến trúc khả mở cao" kéo theo giá thành cao cả về phần cứng, phần mềm
và độ phức tạp Yêu cầu quan trọng đối với kiến trúc này là phải hỗ trợ tính mở từ mức triển khai nhỏ cho đến số lượng thiết bị rất lớn Tính năng có thể mở co giãn (elastic) và có thể triển khai dạng cloud như dịch vụ Amazon EC2 là rất cần thiết
- Những nguy cơ riêng từ chính bản thân thiết bị IoT, nhất là phần cứng Ví
dụ, nhiều thiết bị IoT quá nhỏ, không hỗ trợ cơ chế mã hóa phi đối xứng phù hợp nên không bảo đảm an toàn
Có hai vấn đề quan trọng, đặc thù của bảo mật IoT là quản lý định danh và truy nhập Quản lý định danh cho thiết bị IoT và giao tiếp máy-máy (M2M) bằng cách dùng cặp "tên/mật khẩu" là sai lầm thông dụng Giải pháp lý tưởng là sử dụng token cấp theo chuẩn của OAuth/OAuth2 Đối với quản lý truy nhập, sai lầm thường thấy là sử dụng luật truy nhập đã lập trình cứng trong mã nguồn phía client
và server Cách tiếp cận tốt nhất hiện nay là sử dụng tiêu chuẩn XACML Cách tiếp cận này không dùng mạch logic lập trình sẵn mà đưa vào chính sách ra quyết định cho phép truy nhập
2.2 Nền tảng truyền thông IoT
Đa số thiết bị được gán mác “smart” ngày nay đều đồng nghĩa với việc nó được sản xuất kèm theo tính năng giao tiếp qua các kênh không dây Các giao thức giao tiếp không dây trong thế giới IoT được thiết kế để thỏa mãn các yêu cầu cơ bản: tiêu tốn ít năng lượng cho việc thu/phát sóng, tiêu tốn ít băng thông (để giảm gánh nặng cho router wireless và hệ thống mạng), hoạt động trong mạng mắt lưới… Một số thiết bị sẽ giao tiếp qua Wi-fi hay Bluetooth, nhưng đa phần sẽ tận dụng các
Trang 32kết nối sử dụng dải tần dưới mức GHz Zigbee
2.2.1 Giao thức Zigbee
Zigbee là một tiêu chuẩn được định nghĩa: là tập hợp các giao thức giao tiếp mạng không dây khoảng cách ngắn có tốc độ truyền dữ liệu thấp Về bản chất Zigbee cũng một chuẩn giao tiếp không dây như những chuẩn không dây khác: UWB, Wi-Fi, IrDA, 3G, Bluetooth nhưng nó mang những đặc tính kỹ thuật và đặc tính vật lý riêng và do đó sẽ chỉ phù hợp với một mảng ứng dụng nhất định Tín hiệu truyền trong giao thức Zigbee thực chất là tín hiệu radio Zigbee được
hỗ trợ trong các dải tần số sau:
- Dải 868,3MHz: Chỉ một kênh tín hiệu Trong dải này tốc độ truyền là 20kbps
- Dải 902MHz - 928MHz: Có 10 kênh tín hiệu từ 1 - 10 với tốc độ truyền thường là 40kbps
- Dải 2,4GHz - 2,835GHz: có 16 kênh tín hiệu từ 11 - 26 với tốc độ truyền 250kbps
Trong nhiều ứng dụng, người ta hay dùng giao thức Zigbee ở dải tần 2,4GHz - 2,835GHz Đây là dải tần phổ biến và được hỗ trợ bởi nhiều thiết bị Hơn nữa với Zigbee, dải tần này có tới 16 kênh tín hiệu trong dải (mỗi kênh cách nhau 5MHz tần số) với tốc độ truyền lớn nhất: 250kbps
Zigbee có những đặc điểm chính sau:
- Tốc độ truyền dữ liệu thấp 20-250Kbps
- Sử dụng công suất thấp, ít tiêu hao điện năng
- Thời gian sử dụng pin rất dài
Trang 33hết thời gian của nó trong chế độ tiết kiệm năng lượng, hay chế độ ngủ (sleep mode) Kết quả là, Zigbee cho phép các thiết bị có khả năng hoạt động trong nhiều năm trước khi cần phải nạp lại pin hoặc thay pin mới
Kiến trúc Zigbee:
Hình 2.2 Kiến trúc lớp (hay ngăn xếp - Stack) trong kiến trúc Zigbee
Zigbee được xây dựng ở trên của hai lớp MAC ( Medium Access Control) và lớp vật lý PHY Lớp MAC và lớp PHY được định nghĩa theo chuẩn IEEE 802.15.4 dành cho các ứng dụng WPAN tốc độ thấp Đặc tính kỹ thuật Zigbee sau đó thêm vào 4 lớp chính: lớp mạng, lớp ứng dụng, lớp các đối tượng thiết bị Zigbee ( ZDO)
và lớp các đối tượng người dùng cho phép tùy biến, linh động trong chuẩn đó Bên cạnh việc tích hợp thêm hai lớp mức cao hơn trên các lớp nền, một sự tích hợp rất quan trọng nữa là thêm vào các ZDO ( Zigbee Device Object) Các ZDO chịu trách nhiệm cho nhiều tác vụ, trong đó bao gồm: định nghĩa vai trò của các thiết bị, tổ chức và yêu cầu để truy nhập vào mạng, bảo mật cho thiết bị
Network Start/Mesh/Cluster Tree Topology
Trang 34ZigBee Router(ZR); ZigBee End Device ( ZED)
Hình 2.3 Các mô hình mạng Zigbee
Zigbee Coordinator (ZC): Chỉ có duy nhất 1 ZC trong bất kỳ mạng Zigbee nào và nó có chức năng chính là kích hoạt thông tin về mạng thông qua cấu hình các kênh, PAN ID và hiện trạng ngăn xếp
Zigbee Router (ZR): Là một thành phần của hệ thống mạng mà chức năng của nó là thực hiện việc vận chuyển các gói tin trong mạng Nó thực hiện các bảng kết nối cũng nhƣ định vị địa chỉ cho các ZED của nó
Zigbee End Device (ZED): Là một thành phần của hệ thống mạng nhƣng không tham gia vào quá trình vận chuyển tin Nó có đƣợc tối ƣu sao cho công suất tiêu thụ là nhỏ nhất nhờ các chế độ bắt tín hiệu và kỹ thuật "sleep"
Quá trình thiết lập trong một mạng Zigbee nhƣ sau:
Quét mạng (Network Scan): Các thiết bị trong mạng sẽ quét các kênh tín hiệu,
ví dụ nếu dùng dải tần 2,4GHz thì sẽ có 16 kênh để quét, sau đó thiết bị sẽ chọn kênh phù hợp nhất để giao tiếp trong mạng Ta gọi đó là sự chiếm chỗ : ocupacy
- Thiết lập/Gia nhập mạng: Thiết bị có thể tạo ra một mạng trên một kênh hoặc gia nhập vào một mạng đã tồn tại sẵn
- Phát hiện thiết bị: Thiết bị sẽ yêu cầu mạng phát hiện ra địa chỉ của mình trên các kênh đƣợc kích hoạt
- Phát hiện dịch vụ: Thiết bị quét các dịch vụ đƣợc hỗ trợ trên thiết bị trong phạm vi mạng
- Liên kết: Thiết bị giao tiếp với nhau thông qua các lệnh và các tin nhắn điều khiển
Trang 35Chuẩn Zigbee rất phù hợp với những ứng dụng yêu cầu giá thành thấp, tiêu thụ năng lượng nhỏ và tính linh động tốt Vì vậy ngày nay Zigbee được dùng vào rất nhiều ứng dụng trong cuộc sống như: Các hệ chiếu sáng thông minh, HVAC, Công nghiệp, Sensor không dây, bệnh viện
2.2.2 Giao thức Bluetooth
Bluetooth là chuẩn kết nối không dây tầm ngắn, thiết kế cho các kết nối thiết
bị cá nhân hay mạng cục bộ nhỏ, trong phạm vi băng tần từ 2.4 đến 2.485GHz Bluetooth được thiết kế hoạt động trên 79 tần số đơn lẻ Khi kết nối tự động nó sẽ tìm ra tần số tương thích để di chuyển đến thiết bị cần kết nối trong khu vực nhằm đảm bảo sự liên tục Nó được thiết kế kết nối tầm thấp với 3 lớp khác nhau nhằm có thể cơ động truyền sóng đi xa nhất đến mức có thể Thông thường các loại di động hiện tại dùng Bluetooth lớp thứ 2, với cường độ 2.5mW, phạm vi chỉ có 35 feet (khoảng 12m) Trong khi lớp thứ nhất lên đến 100 feet (hơn 30m) với cường độ 100mW
Các đặc điểm của Bluetooth:
Bluetooth có thể đạt được tốc độ truyền dữ liệu 1Mb/s Bluetooth hỗ trợ tốc độ truyền tải dữ liệu lên đến 720kbps trong phạm vi 10m Khác với kết nối hồng ngoại
(IrDA), kết nối Bluetooth là vô hướng và sử dụng dải tần 2.4GHz
- Tiêu thụ năng lượng thấp, cho phép ứng dụng được trong nhiều loại thiết bị, bao gồm cả các thiết bị cầm tay và điện thoại di động
- Giá thành hạ (giá 1 con chip bluetooth đang giảm dần)
- Khoảng cách giao tiếp cho phép
+ Khoảng cách giữa hai thiết bị đầu cuối có thể lên đến 10m ngoài trời và 5m trong tòa nhà
+ Khoảng cách thiết bị đầu cuối và Access point có thể lên tới 100m ngoài trời
Trang 36lập về phần cứng cũng như hệ điều hành sử dụng
- Bluetooth được dùng trong giao thiếp dữ liệu tiếng nói: có 3 kênh để truyền tiếng nói và 7 kênh để truyền dữ liệu trong một mạng cá nhân
- An toàn và bảo mật: được tích hợp với sự xác nhận và mã hóa
- Tính tương thích cao, được nhiều nhà sản xuất phần cứng cũng như phần mềm hỗ trợ
Các tầng giao thức trong Bluetooth:
Hình 2.4 Các tầng nghi thức của Bluetooth
Bluetooth Radio- Sóng Radio
Tầng Bluetooth radio là tầng thấp nhất được định nghĩa trong đặc tả Bluetooth,
nó định nghĩa những yêu cầu cho bộ phận thu phát sóng hoạt động ở tần số 2.4GHz ISM Băng tần ISM là băng tần không cần đăng kí được dành riêng cho các thiết bị không dây trong công nghệ, khoa hoạc, y tế
Nhờ giao tiếp bằng sóng radio mà dữ liệu Bluetooth có thể xuyên qua các vật thể rắn và phi kim
Baseband – Dải băng cơ sở
Nằm ở tầng vật lý của Bluetooth, nó quản lý những kênh truyền và liên lết vật
lý tách biệt khỏi những dịch vụ khác như sửa lỗi, chọn bước nhảy và bảo mật Tầng
Trang 37Base band protocol nằm trên tầng radio trong tầng giao thức của Bluetooth, base band protocol được cài đặt như là Link Controller (Kiểm soát liên kết) Nó cùng với Link manager (quản lý) thực hiện những công việc ở mức thấp như kết nối, quản lý năng lượng Tầng Baseband cũng quản lý những kết nối đồng bộ và không đồng bộ, quản lý các gói tin, thực hiện tìm kiếm và yêu cầu kết nối đến các thiết bị Bluetooth khác
Link Manager Protocol – Quản lý liên kết
Link Manager (LM) thực hiện việc thiết lập kênh truyền, xác nhận hợp lệ cấu hình kênh truyền, nó tìm kiếm những LM khác và giao tiếp với chúng thông qua Link Manager Protocol Để thực hiện được những vai trò của mình, LM dùng những dịch vụ do tầng Link Controller bên dưới cung cấp
Host Cotroller Interface (HCI) – Kiểm soát giao diện chủ
HCI cung cấp một giao diện cho phép các tầng bên trên điều khiển Baseband Cotroller và Link Manager, đồng thời cho phép truy cập đến trạng thái của phần cứng và các thanh ghi điều khiển, về bản chất, giao diện này cung cấp một phương thức duy nhất để truy cập đến những khả năng của băng tần cơ sở HCI tồn tại trong
3 phần: Host - Transport layer (lớp chuyển tải) - Host Controller, mỗi phần đóng vai trò khác nhau trong hệ thống HCI
Logical Link Control And Adaptation Protocol (L2CAP) – Kiểm soát liên kết logic, giao thức điều hợp
L2CAP nằm bên trên giao thức băng tần cơ sở và nằm ở tầng data link L2CAP cung cấp những dịch vụ hướng kết nối và phi kết nối cho những tầng giao thức bên trên L2CAP có khả năng phân kênh, phân đoạn và tái tổ hợp L2CAP cho phép những giao thức ở tầng cao hơn và những ứng dụng truyền, nhận những dữ liệu Mỗi gói dữ liệu L2CAP tối đa 64kb
Radio Frequency Communication (RFCOMM Protocol) – Tần số truyền thông
Giao thức RFCOMM cho phép giả lập cổng serial thông qua giao thức L2CAP Giao thức này dựa trên chuẩn ETSI TS 07.10, chỉ có một phần của chuẩn