Tải bản đầy đủ (.pdf) (72 trang)

Nghiên cứu và thử nghiệm giao thức MQTT trong hệ thống IOT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (700.4 KB, 72 trang )

MỤC LỤC

1


LỜ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

2


Trần Thị ThuậnTÓ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 q 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ư q 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.

3


DANH 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

4


DANH MỤC CÁC HÌNH VẼ
Hình 1.1. Kiến trúc TCP/IP.......................................................................................3
Hình 1.2. Khn dạng của UDP datagram................................................................5
Hình 1.3. Khn dạng TCP segment.........................................................................6
Hình 1.4. Q 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. Q 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

5


DANH SÁCH CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
MQTT

Message Queuing Telemetry
Transport

Công nghệ truyền nhận tốc độ

IoT

Internet of Thing

tức thời

M2M


Machine to Machine

Internet của sự vật

TCP

Transmission Control Protocol

Máy đến Máy
Giao thức điều khiển truyền

IP

Internet Protocol

thông

MAC

Media Access Control

Giao thức Internet

UDP

User Datagram Protocol

Địa chỉ vật lý của thiết bị
Giao thức gói dữ liệu người


OSI

Open Systems Interconnection

dùng
Mơ hình tham chiếu kết nối

CoAP

Constrained Application Protocol

HTTP

Hyper Text Transfer Protocol

HTTPS

Hyper Text Transfer Protocol
Secure
Local Area Network

GPRS

General Packet Radio Service

FTP

File Transfer Protocol


IEEE

Institute of Electrical and

Giao thức truyền tải siêu văn
bản

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

Electronics Engineers

TLS

Giao thức ràng buộc ứng dụng

Phiên bản của giao thức HTTP

LAN

SSL

các hệ thống mở

Viện kỹ nghệ Điện và Điện tử

Secure Sockets Layer


Giao thức bảo mật

Transport Layer Security

Giao thức an toàn tầng giao
vận

6


CHƯƠ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à q 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à q 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
7


nhau 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 hồn tồ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.

8


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 hồn chỉnh quản lý q 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
thứ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 hồ 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 số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 q 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

9


Hình 1.1. Kiến trúc TCP/IP
Tầ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-3703-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:
+ ATM
+ Ethernet
+ Token Ring
+ FDDI
+ Frame Relay
Tầng Internet (Internet Layer):
Tầng Internet (hay còn gọi là tầng mạng) xử lý q 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):
10


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à
datagram 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. Khn 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:

11


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ó

kích thước phù hợp nhất để truyền đi
− Khi TCP gửi 1 segment, nó duy trì một thời lượng để chờ phúc đáp từ trạm
nhận. Nếu trong khoảng thời gian đó phúc đáp khơng tới được trạm gửi thì segment
đó được truyền lại
− Khi TCP trên trạm nhận nhận dữ liệu từ trạm gửi nó sẽ gửi tới trạm gửi 1
phúc đáp tuy nhiên phúc đáp không được gửi lại ngay lập tức mà thường trễ một
khoảng thời gian
− 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 tồn bộ vùng đệm của trạm có tốc độ
chậm hơn.
0

4

10

16

Source Port


24

Destination Port
Sequence Number

Acknowledgement Number
Header
Length

Reserved

U
R
G

A
C
K

P
S
H

R
S
T

S
Y
N


F
I
N

12

Window Size

31


Checksum

Urgent Pointer

Options

Padding
Data

Hình 1.3. Khn dạng TCP segment
Các tham số trong khn 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

13


− 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
thườ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. Q trình truyền dữ liệu trong mơ hình TCP/IP
user data
application
Appl
header

user data
TCP

TCP segment
TCP
header

application data

IP datagram

IP

Ethernet
TCP
application data
Ethernet Frame

header
46
to 1500 bytes
Ethernet
Hình 1.4. Q trình truyền dữ liệu trong mơ hình TCP/IP

IP
header

driver

Khi truyền dữ
tiến hành data
từ tầng Ethernet
trên xuống tầng dưới, qua mỗi
Ethernet
IP liệu, q
TCPtrình application
header
header
header
tầng dữ
liệu được
thêm vào
một thơng tin điều khiển trailer
được gọi là phần header. Khi

nhận dữ liệu thì quá trình xảy ra ngược lại, dữ liệu được truyền từ tầng dưới lên và
qua 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.

14


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 khn 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
chung, đồ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
15


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 sốt hội thoại giữa các q 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 số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 trê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
16


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).


Lớ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:
+ Mức điện thế
+ Khoảng thời gian thay đổi điện thế
+ Tốc độ dữ liệu vật lý
+ Khoảng đường truyền tối đa
17



+ Các đầu nối vật lý
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. Q 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 tn 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.

18


Hì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
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ư
vậ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.

19


Hình 1.8. Mơ hình OSI rút gọn

Program A

Program B

Port

Port

Transport protocol
Network protocol
Network driver

Transport protocol
Network protocol

Network driver

Host1

Host2

Hình 1.9. Mơ hình Socket




Có hai loại socket:
Socket có hướng kết nối (TCP)
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ề
20


+ 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 q 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 u cầu tạo
ra một socket.
Ngồ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. Ngun 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.
Nhờ hai thơng tin này mà gói tin có thể đến đúng được máy tính chứa socket
21


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 hồn
tồn có thể gửi thơng tin phản hồi cho client.
Chúng ta có thể khái qt q 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.

22


CHƯƠ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 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
23


Lớ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:
24


- 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
thơ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 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 q 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 ngồi (External Communication):
25


×