1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO KHOÁ LUẬN PHÂN TÍCH MÃ NGUỒN VÀ ĐÁNH GIÁ HIỆU NĂNG HOẠT ĐỘNG CỦA GIAO THỨC ĐỊNH TUYẾN RPL TRÊN NỀN TẢNG HỆ ĐIỀU HÀNH CONTIKIOS

137 9 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 137
Dung lượng 7,47 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Constrained Network Mạng bị ràng buộc Là một mạng mà tại đó có một số tính chất, đặc điểm lẽ ra mặc định với tầng liên kết theo cách thông thường trong internet tại thời điể

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

BÁO CÁO KHÓA LUẬN TỐT NGHIỆP

Phân tích mã nguồn và đánh giá hiệu năng hoạt động

của giao thức định tuyến RPL trên nền tảng hệ điều hành mã nguồn mở ContikiOS

GVHD:

PGS TS Lê Trung Quân

SVTH:

Phạm Nguyễn Thanh Lượng – 15520467

Văn Minh Huy – 15520321 Lớp: NT114.ANTN

Trang 2

MỤC LỤC

Contents

I LOW POWER/LOSSY NETWORK VÀ SỰ LIÊN QUAN VỚI IOT 8

1 Constrained Node (Node bị ràng buộc) 8

2 Constrained Network ( Mạng bị ràng buộc) 8

3 Constrained-Node Network 8

4 LLN: Low-Power and Lossy Network 9

II GIAO THỨC ĐỊNH TUYẾN RPL 10

1 Tổng quan về RPL 10

2 Giải thích các thuật ngữ 10

3 Các loại gói tin định tuyến trong RPL 12

3.1 DAG Information Solicitation (DIS): 12

3.2 DAG Information Object(DIO): 12

3.3 Destination Advertismet Object(DAO) 15

4 Quá trình định tuyến RPL: 17

1.1 Quá trình khởi tạo mạng: 17

1.2 Các quy tắc trong quá trình lựa chọn DAG 18

1.3 Tính toán rank và sự di chuyển của các node trong DAG 19

1.4 Truyền dữ liệu 19

1.5 Ví dụ minh họa giao thức định tuyến RPL 20

III RFC 6550 26

1 ICMPv6 RPL Control Message 26

1.1 RPL Security Fields 27

1.2 DODAG Information Solicitation (DIS) 30

1.3 DODAG Information Object (DIO) 30

1.4 Destination Advertisement Object (DAO) 31

1.5 Destination Advertisement Object Acknowledgement (DAO-ACK) 32

1.6 Consistency Check (CC) 33

1.7 RPL Control Message Options 33

2 RPL Constants and Variables 38

IV RPL trong ContikiOS 40

1 Cấu trúc file, thư mục (directory structure) 40

2 Main data structure 42

Trang 3

2.1 RPL metic container 42

2.2 RPL Instance 43

2.3 RPL DAG 44

2.4 RPL parent 45

2.5 DAG Information Object(DIO) 45

2.6 RPL stats 46

2.7 Hằng 46

3 Socket trong RPL 54

3.1 UDP socket (udp-socket.h) 54

3.2 TCP socket (tcp-socket.h) 54

4 Initialization 55

4.1 DAG root 55

4.2 DAG 57

4.3 RPL network 59

5 Luồng gọi hàm 60

5.1 RPL init 60

5.2 Xữ lí DAG root 60

5.3 Các hàm xữ lí về DAG 61

5.4 Các process xữ lí các gói tin DIS, DIO và DAO 61

5.5 Các process xử lí timer 63

5.6 Các process xử lí header 63

5.7 Neighbor policy 64

5.8 NS – Nonstoring 64

5.9 Chi tiết các hàm được gọi trong các process được khai báo trong các file thư viện (.h) 67

6 Tutorial về sử dụng Simulator (cooja) và thiết bị thật (telosB) 72

6.1 Cài đặt InstantContiki 72

6.2 Cooja simulator 72

6.3 Nạp mạch telosB đơn giản 81

6.4 Sử dụng Open Sniffer 83

V Một số kịch bản đơn giản 88

1 UDP Server và UDP Client (text) 88

1.1 Kịch bản 88

1.2 Code 89

1.3 TelosB 89

Trang 4

1.1 Kịch bản 90

1.2 Code 91

DANH SÁCH HÌNH ẢNH Hình 1 Mô hình 6LoWPAN , 1 loại của LLN 9

Hình 2 Các khái niệm của RPL 10

Hình 3 Storing mode và Non-Storing mode 11

Hình 4 DIS( DAG Information Solicitation) 12

Hình 5 Cấu trúc gói tin DIS (DAG Information Solicitation) 12

Hình 6 DIO(DAG Information Object) 13

Hình 7 Cấu trúc gói tin DIO(DAG Information Object) 13

Hình 8 Destination Advertisement Object (DAO) 15

Hình 9 Cấu trúc gói tin DAO(DAG Advertisement Object) 16

Hình 10 Quá trình hình thành DAG (1) 20

Hình 11 Quá trình hình thành DAG (2) 20

Hình 12 Quá trình hình thành DAG (3) 21

Hình 13 Quá trình hình thành DAG (4) 21

Hình 14 Quá trình hình thành DAG (5) 22

Hình 15 Cơ chế chống loop (1) 22

Hình 16 Cơ chế chống loop (2) 23

Hình 17 Cơ chế chống loop (3) 23

Hình 18 Cơ chế chống loop (4) 24

Hình 19 Cơ chế chống loop (5) 24

Hình 20 Cơ chế chống loop (6) 24

Hình 21 Cơ chế chống loop (7) 25

Hình 22 Cơ chế chống loop (8) 25

Hình 23 RPL Control Message 26

Hình 24 Security Section 27

Hình 25 Security Algorithm (Algorithm) Encoding 27

Trang 5

Hình 26 The DIS Base Object 30

Hình 27 The DIO Base Object 30

Hình 28 Mode of Operation (MOP) Encoding 31

Hình 29 The DAO Base Object 31

Hình 30 The DAO ACK Base Object 32

Hình 31 The CC Base Object 33

Hình 32 RPL Option Generic Format 33

Hình 33 Format of the Pad1 Option 34

Hình 34 Format of the Pad N Option 34

Hình 35 Format of the DAG Metric Container Option 34

Hình 36 Format of the Route Information Option 35

Hình 37 Format of the DODAG Configuration Option 35

Hình 38 Format of the RPL Target Option 36

Hình 39 Format of Transit Information Option 36

Hình 40 Format of the Solicited Information Option 37

Hình 41 Format of the Prefix Information Option 37

Hình 42 Format of the RPL Target Descriptor Option 38

Hình 43 RPL directory in ContikiOS 40

Hình 44 RPL files 40

Hình 45 Kiến trúc giao thức mạng của Contiki RPL 41

Hình 46 Cấu trúc Contiki RPL 41

Hình 47 Rpl_metric_container structure 42

Hình 48 rpl_instance structure 43

Hình 49 Rpl_dag structure 44

Hình 50 Rpl_parent structure 45

Hình 51 Rpl_dio structure 45

Hình 52 Rpl_stats structure 46

Hình 53 RPL message types (một ví dụ về hằng được khai báo) 46

Hình 54 nbr_table struct 53

Trang 6

Hình 56 NBR table Constant 53

Hình 57 UDP socket structure 54

Hình 58 TCP socket structure 54

Hình 59 Quá trình hoạt động của DAG Root 60

Hình 60 Xữ lí sự kiện tại ROOT 61

Hình 61 Run cooja 72

Hình 62 Cửa sổ Cooja 73

Hình 63 Tạo New Simulator 74

Hình 64 Cửa sổ giả lập 75

Hình 65 Tạo Sky mote 76

Hình 66 Cửa sổ creat mote type 76

Hình 67 Chọn example Contiki 77

Hình 68 Bắt đầu Compile 78

Hình 69 Kết quả sau khi compile 78

Hình 70 Thêm mote 79

Hình 71 Kết quả sau khi add motes 79

Hình 72 Màn hình chạy giả lập 80

Hình 73 Thiết bị Open Sniffer 83

Hình 74 Host IP để connect với Open Sniffer 83

Hình 75 Open Sniffer web interface 84

Hình 76 Wireshark Interface (Open Sniffer) 85

Hình 77 wpan filter (wireshark) 85

Hình 78 Start Open Sniffer 85

Hình 79 Network scan 86

Hình 80 Kết quả lắng nghe một ví dụ đơn giản (1) 87

Hình 81 Kết quả lắng nghe một ví dụ đơn giản (2) 87

Hình 82 Kết quả lắng nghe một ví dụ đơn giản (2) 87

Hình 83 Kết quả lắng nghe một ví dụ đơn giản (3) 88

Hình 84 Kết quả lắng nghe một ví dụ đơn giản (4) 88

Hình 85 Mô hình kịch bản 1 và kết quả thử nghiệm trên Cooja 89

Trang 7

Hình 86 Code kịch bản 1 89

Hình 87 Open Sniffer lắng nghe nội dung được chuyển đi trong kịch bản 1 90

Hình 88 Mô hình kịch bản 2 và kết quả thử nghiệm trên Cooja 91

Hình 89 Code kịch bản 2 (client) 92

Hình 90 Code kịch bản 2 (Server) 92

Hình 91 Mô hình 1 93

Hình 92 Mô hình 2 94

Hình 93 Mô hình 3 94

DANH SÁCH BẢNG Table 1 Key Identifier Mode (KIM) Encoding 29

Table 2 Security Level (LVL) Encoding 30

Table 3 RPL Constantes 53

Table 4 Public RPL functions 69

Table 5 RPL DAG root 69

Table 6 ICMPv6 functions for RPL 70

Table 7 RPL logic functions 70

Table 8 DAG object management 70

Table 9 DAG parent management function 71

Table 10 RPL routing table functions 71

Table 11 Objective function 72

Table 12 Timer functions 72

Table 13 Route poisoning 72

Table 14 Bảng tổng kết các kịch bản cơ bản nhằm đánh giá hiệu năng 94

Table 15 Bảng thông số, số liệu cần đo đạc và đánh giá 96

Trang 8

I LOW POWER/LOSSY NETWORK VÀ SỰ LIÊN QUAN VỚI IOT [CITATION CBo14 \l 1033 ]

1 Constrained Node (Node bị ràng buộc)

Là node mà nơi đó có một số tính chất, đặc điểm lẽ ra mặc định là của những node internet tại thời điểm đăng kí nhưng lại không thể đạt tới được, thường là vì những ràng buộc về cost và/hoặc là do những ràng buộc về vật lý như kích cỡ, cân

nặng, nguồn tài nguyên và năng lượng sẵn có Việc giới hạn chặt chẽ năng lượng, bộ

nhớ và tài nguyên tiến trình dẫn đến khó khăn trong việc phá vỡ giới hạn về trạng

thái, quy tắc không gian, và chu kỳ tiến trình, tạo nên những tối ưu hóa về năng lượng và việc sử dụng băng thông chiếm ưu thế đáng kể trong tất cả các yêu cầu thiết kế thêm vào đó, một vài dịch vụ ở lớp 2 như kết nối hoàn toàn và broadcast/multicast có thể bị thiết sót

2 Constrained Network ( Mạng bị ràng buộc)

Là một mạng mà tại đó có một số tính chất, đặc điểm lẽ ra mặc định với tầng liên kết theo cách thông thường trong internet tại thời điểm đăng kí nhưng lại không thể đạttới được

Ràng buộc có thể bao gồm:

 Thông lượng/tỉ lệ bit (bitrate) thấp ( bao gồm giới hạn trong chu kỳ nhiệm vụ )

 Khả năng mất gói và mất sự thay đổi trong gói cao (tỉ lệ vận chuyển)

 Đặc điểm liên kết bất đối xứng cao

 Những ảnh hưởng nghiêm trọng vì việc sử dụng gói dung lượng lớn ( khả năng mất gói cao vì phá vỡ tầng liên kết )

 Giới hạn khả năng tiếp cận theo thời gian

 Sự thiếu sót ( một vài ràng buộc ) trong những dịch vụ cấp cao như ip multicast

4 LLN: Low-Power and Lossy Network

Trang 9

LLN: Mạng Low-Power và Lossy Thường bao gồm nhiều thiết bị nhúng với năng

lượng, bộ nhớ và tài nguyên tiến trình giới hạn (Constrained Node) được kết nối với

nhau bằng nhiều liên kết, chẳng hạn như IEEE 802.15.4 hoặc low-power Wi-Fi Cónhiều lĩnh vực ứng dụng cho LLN, bao gồm giám sát công nghiệp, xây dựng tự độnghóa (sưởi ấm, thông gió và điều hòa không khí (HVAC), ánh sáng, kiểm soát truy cập,cháy), chăm sóc sức khoẻ, giám sát môi trường, mạng cảm biến, quản lý năng lượng,theo dõi tài sản, và điện lạnh

Hình 1 Mô hình 6LoWPAN , 1 loại của LLN

Trang 10

1 Tổng quan về RPL

 Trong hệ thống mạng LLN, quá trình định tuyến rất khó khăn do công suất thấpvà tin hiệu truyền yếu, nguồn năng lượng pin hạn chế, nhiều hop tham gia vàomạng và các hop này liên tục thay đổi vị trí Một giải pháp được phát triển thànhcông bởi IETF là RPL dựa trên IPv6 giúp giải quyết vấn đề đính tuyến này

 RPL có thể hỗ trợ nhiều tầng liên kết khác nhau, bao gồm các thiết bị hạn chế vềtài nguyên, mất mát dữ liệu,… như tự động trong xây dựng, môi trường côngnghiệp, ừng dụng đô thị RPL giúp nhanh chóng tạo một hệ thống mạng vàtruyền thông tin đến một số lượng lớn các node

 Trong cấu hình thiết lập RPL, các node trong mạng được kết nối thông qua mộtđường truyền để đến được thiết bị root Thiết bị root có trách nhiệm thu thập vàphân phối dữ liệu Mỗi hệ thống gồm các node và thiết bị root như vậy, ta gọi làmột Destination Oriented Directed Acyclic Graph (DODAG) Đồ thị này đượchình thành bằng cách tính toán các chi phí đường đi sao cho tối ưu nhất

 RPL truyền các thông tin định tuyến qua một lượng lớn các node Nó hỗ trợ lưulượng Multipoint-to-Point (MP2P), Point-to-Multipoint (P2MP), và Point-to-Point (P2P)

5 Giải thích các thuật ngữ.

Trước khi đi sâu vào tìm hiểu chi tiết về cách thức khởi tạo mạng RPL, chúng ta xem xét các thuật ngữ sau đây:

Hình 2 Các khái niệm của RPL

3.1 DAG: là một topo mạng mà mọi liên kết giữa các node đều có hướng xác định,

hướng về DAG ROOT và đảm bảo không tạp ra vòng lặp trong topo

Trang 11

3.2 DAG Rank: là thông số cho biết vị trí tương đối của node so với DAG ROOT.

Những node càng xa DAG ROOT thì có rank càng cao Trong RPL, DAG ROOTluôn có rank bằng 1

3.3 DAG ROOT: là một node trong DAG, có chức năng tập trung và xử lý dữ liệu từ

các node khác trong mạng gửi đến Mọi tuyến liên kết trong DAG đều hướng về vàkết thúc tại DAG ROOT

3.4 DAG parent: trong cùng một DAG, node A được gọi là parent của node B khi A có

khả năng kết nối trực tiếp đến B và A có rank thấp hơn B Khi đó, node B được gọi làchildren của node A

3.5 DAG sibling: node A là một sibling của node B trong một DAG nếu chúng có cùng

rank trong DAG đó

3.6 DODAG: là một DAG đứng riêng lẻ.

3.7 DODAG ID: địa chỉ Ipv6 của DAG ROOT.

3.8 GROUNDED: Root có kết nối ra bên ngoài, cho phép các node trong DAG giao tiếp

với bên ngoài

3.9 FLOATING: ngược lại với grounded, floating chỉ cho các node giao tiếp trong

phạm vi DAG

3.10 STORING: Các node có lưu trữ bảng định tuyến trên chính node đó Ngược lại nếu

node không lưu trữ bảng định tuyến thì ta gọi là non-storing

Hình 3 Storing mode và Non-Storing mode

6 Các loại gói tin định tuyến trong RPL

Trang 12

Trong giao thức định tuyến RPL, có hai hướng định tuyến là: upward (chiều đi từ các node cách xa DAG ROOT hướng về DAG ROOT ), downward (chiều hướng từ DAG ROOT đến các node ở xa hơn) Quá trình xác định đường đi tối ưu của dữ liệu

về DAG ROOT được thực hiện nhờ các loại gói tin định tuyến sẽ được trình bày sau đây:

3.1 DAG Information Solicitation (DIS):

Gói tin DIS( DAG Information Solicitation) được gửi từ những node tự do

trong mạng( các node chưa tham gia DAG) nhằm quảng bá sự xuất hiện của node, thăm dò sự xuất hiện của các neighbor và yêu cầu những node khác phản

hồi bằng gói tin DIO

Hình 4 DIS( DAG Information Solicitation)

Bản tin DIS được multicast khi các node ở trạng thái tự do và được gửi unicast đến một parent trong DAG khi muốn nhận lại một bản tin unicast DIO nhằm cập nhật thông tin DAG của parent đó.

Cấu trúc chi tiết của gói tin DIS được trình bày như hình dưới đây:

Hình 5 Cấu trúc gói tin DIS (DAG Information Solicitation)

3.2 DAG Information Object(DIO):

a) Khái niệm:

Trang 13

Là gói tin được tạo ra tại các DAG ROOT, mang những thông tin định tuyến củaDAG Được sử dụng để quảng bá các thông tin định tuyến DAG trong mạng, phục vụquá trình xây dựng DAG và định tuyến upward Quá trình nhận và xử lý gói tin DIOcho phép một node phát hiện và tham gia vào một DAG phù hợp Từ đó, lựa chọn cácparent, xác định các thông số cấu hình và tiếp tục quảng bá thông tin DAG đến cácnode khác trong mạng.

Hình 6 DIO(DAG Information Object)b) Cấu trúc:

Hình 7 Cấu trúc gói tin DIO(DAG Information Object)

Trang 14

 Cấu trúc của một gói tin DIO gồm hai phần chính:

- Các trường điều khiển: gồm các flag, trường preference, sequence number, RPL instance, DTSN, DAGID.

- Các sub-option

Các cờ trạng thái của DAG:

- Flag G: cho phép xác định khả năng kết nối đến một grounded DAG

của node gửi DIO Nếu cờ G bằng 0, node gửi DIO là thành viên của một floating DAG Ngược lại, nếu cờ này khác không cho biết node gửi DIO là thành viên của một grounded DAG.

- Flag A: cho biết khả năng hỗ trợ cơ chế quảng bá đích trong quá trình

định tuyến downward của DAG Nếu A khác 0, DAG ROOT có khả năng hỗ trợ cơ chế quảng bá đích và các node trong DAG có thể tham gia quá trình định tuyến downward Nếu A bằng không, các node trong DAG chỉ có thể tham gia định tuyến upward.

- Flag T: được sử dụng để làm mới quá trình định tuyến downward.

Nếu T bằng 0, quá trình định tuyến downward hoạt động bình thường Khi T khác 0, các node trong DAG sẽ thực hiện quá trình làm mới các tuyến downward.

- Flag S: nếu flag S bằng 0, chỉ có DAG ROOT được phép lưu trữ các

thông tin định tuyến downward từ các gói tin DAO Nếu S khác 0, node gửi DIO có thể lưu trữ các thông tin định tuyến từ DAO.

Trường prf (DAG preference): sử dụng 3 bit kiểu số nguyên dương

cho biết độ ưu tiên giữa các DAG trong cùng một instance Miền giá trị của prf từ 0 đến 7 Nếu prf bằng 7, DAG sẽ có độ ưu tiên cao nhất, giá trị mặc định của prf là 0.

Sequence number: là giá trị sequence number được thiết lập tại DAG

ROOT, được sử dụng trong quá trình tái xây dựng lại DAG; là một bộ đếm tuần tự được sử dụng trong quá trình sữa chữa và làm mới DAG Khi một DAG ROOT muốn xây dựng lại một DAG mới, sequence number được tăng lên 1 đơn vị và quảng bá đến các node trong mạng.

Rank: rank của node gửi DIO.

RPL Instance ID: cho biết RPL Instance mà DAG tham gia định

tuyến.

DTSN: được thiết lập tại node gửi gói tin DIO, sử dụng trong quá

trình duy trì các thông số định tuyến theo hướng downward.

DAGID: là một địa chỉ IPv6 có độ dài 128 bit và được thiết lập tại

DAG ROOT.

Trang 15

Các sub-option được dùng để chèn các byte trống vào các gói tin

DIO Có 5 loại sub-option bao gồm: Pad 1, Pad N, DAG Metric Container, DAG destination prefix, DAG Configuration Tùy theo mục đích sử dụng mà các sub-option đuộc chèn vào DIO một cách hợp lý.

lý gửi, nhận và xử lý thông tin DIO:

- DIO đầu tiên được tạo ra tại DAG ROOT, sau đó được quảng bá đến các node trong mạng Các node thành viên trong DAG sử dụng gói tin DIO nhận được để cập nhất thông tin DAG, lựa chọn parent và quảng

bá vị trí của mình trong DAG.

- Node xử lí DIO phải tuân theo các nguyên tắc sau: + Một node chỉ tạo và gửi bản tin DIO sau khi tham gia một DAG xác định.

+ Những node không phải DAG ROOT, chỉ được phép thay đổi giá trị các flag S, DTSN và rank trong gói tin DIO.

+ DIO là hợp lệ nếu có Instance ID hợp lệ Khi một nide nhận được một gói tin DIO từ trong mạng, node phài thực hiện kiểm tra tính hợp

lệ của DIO đó Nếu bàn tin DIO hợp lệ, thì node mới thực hiện các hành động tiếp theo

3.3. Destination Advertismet Object(DAO).

DAO( Destination Advertisment Object ) là gói tin được dùng để quảng bá

thông tin của các đích, được gửi từ những node có rank cao hơn đến những node

có rank thấp hơn

Hình 8 Destination Advertisement Object

(DAO).

Suboption Type

Suboption Length Suboption DATA

Trang 16

 DAO được được sử dụng nhằm mục đích cho những ứng dụng đòi hỏi lưulượng kiểu P2MP và P2P Thông qua xử lý thông tin nhận được từ DIO,DAG ROOT và những node ở gần root có thể quản lí, cập nhật thông tincủa những node nằm ở những rank cao hơn trong DAG Từ đó, đưa ra cáctuyến tối ưu cho hường downward.

 Gói tin DAO có cấu trúc như sau:

Hình 9 Cấu trúc gói tin DAO(DAG Advertisement Object) DAO Sequence: số gói tin DAO được một node gửi vào mạng.

DAO rank: rank của node tạo gói tin DAO.

RPL Instance ID: Instance của node tham gia định tuyến.

Route Tag: được sử dụng để cung cấp thứ tự ưu tiên khi lưu thông tin các

prefix

Prefix lengh: chiều dài prefix.

RRcount: cho biết số mục trong Rverse Route Stack – ngăn xếp lưu các

mục định tuyến theo hướng downward

DAO life time: thời gian sống hiệu lực của prefix, phục vụ cho việc xác

định khả năng sống của prefix

Destination Prefix: là một trường có chiều dài thay đổi, được sử dụng để

nhận dạng một địa chỉ đích, một prefix, hoặc một nhóm địa chỉ multicasttrong mạng

Reverse Route Stack: là trường có chiều dài có thể thay đổi, được sử

dụng để lưu thông tin của những prefix tham gia định tuyến Khi một nodethêm vào Reverse Route Stack, prefix của node được thêm vào dành sách,đồng thời tang giá trị của RR count

Trang 17

Các sub-option được sử dụng nhằm mở rộng các thành phần của gói tin

DAO, tùy theo mục đích nghiên cứu và triền khai

Nguyên lý truyền gói tin DAO:

 Các gói tin Dao được truyền từ các node ở rank cao đến những node ởrank thấp nhằm quảng bá các trạng thái định tuyến downward cho từngprefix của những nhóm hoặc những Sub-DAG bên trong DAG Cơ chếđịnh tuyến với DAO chỉ có thể hoạt động khi node đã tham gia ít nhất mộtDAG trong mạng

 Cơ chế định tuyến với DAO chỉ có thể được sử dụng trong từng DAG,được bởi DAG ROOT Việc xác định cơ chế này thông qua Flag A của góitin DIO truyền đi từ ROOT DAG

 Khi cơ chế này được sử dụng, trong DAG phải có ít nhất một số các node

có khả năng lưu những thông tin từ DAO, bao gồm DAG ROOT Khi cơchế này không được sử dụng, các node không được phép tạo và sử lý cácgói tin DAO

 Gói tin DAO được gửi từ node đến một hoặc một nhóm các DAG parentcủa node trong DAG Những node có khả năng tham gia định tuyến, thựchiện lưu các thông tin trạng thái lấy được từ Reverse Route Stack vào bảngđịnh tuyến Mỗi mục trong bảng định tuyến cho biết những thông tin trạngthái của prefix như: địa chỉ IPv6, địa chỉ Interface, DAO sequence, DAOrank, DAO lifetime, Nhờ đó, một node có thể xác định trạng thái củanhững prefix

 Thông qua việc quản lý trạng thái kết nối của các prefix được cập nhật bởiDAO, các node rank thấp có thể định tuyến nhằm phục vụ cho những ứngdụng kiểu P2MP hoặc P2P

7 Quá trình định tuyến RPL:

1.1 Quá trình khởi tạo mạng:

 Khi triển khai một mạng RPL, mỗi RPL Instance được thiết lập với một hoặcmột số DAG ROOT Các thông số định tuyến được thiết lập phù hợp với mụcđích triển khai Những DAG ROOT tự động thiết lập rank bằng 1(ROOTRANK), sau đó chúng định thời quảng bá các bản tin DIO đến các node xungquanh để xây dựng DAG của bản thân

 Trong pha khởi tạo, những node trong mạng có thể lựa chọn một trong hai chếđộ hoặc chúng giữ trạng thái im lặng và không gửi bất kì gói tin DIO nào chođến khi chúng than gia và một DAG xác định; hoặc ngay lập tức thiết lập làDAG ROOT của một floating DAG, sau đó gửi multicast các bản tin DIO đếncác node khác trong mạng

Trang 18

 Trong quá trình này, mỗi node cũng có thể gửi multicast DIS đến các nodexung quanh hoặc chờ nhận những gói tin DIO được gửi đến Khi triển khaimạng, cần thiết kế để các node trong mạng có khả năng đáp ứng được các yêucầu trên.

 Những node gần root nhất khi nhận được DIO từ DAG ROOT sẽ tham gia vàoDAG, cập nhật thông tin trong DIO và xác định rank của bản thân trong DAG.Node định thời chuyển tiếp các gói tin DIO đến những node xung quanh,quảng bá vị trí và DAG mà nó đang tham gia

 Quá trình trên được các thành viên trong DAG lặp đi lặp lại liên tục tại nhữngthời điểm định thời Do đó, quy mô DAG được mở rộng tới những node ở xaDAG ROOT và những node trong DAG cập nhật được thông tin của nhữngthành viên xung quanh trong DAG

 Một node ở trạng thái tự do( chưa tham gia vào DAG ) sẽ định kì gửi các góitin DIS tới các neighbor để quảng bá Instance mà nó có khả năng tham gia,đồng thời yêu cầu những node đáp ứng được phần hồi thông tin về DAG(DIO)mà chúng tham gia

 Khi một neighbor nhận được bản tin DIS, nếu đã tham gia vào một DAG phùhợp với instance trong DIS, nó sẽ phản hồi bằng một bản tin DIO tới node gửiDIS Sự phản hồi này sẽ diễn ra ngay sau khi thời điểm xử lý bản tin DIS màkhông chờ đến thời điểm định thời DIO tiếp theo Bên cạnh đó, nếu DIS chứađịa chỉ multicast, node sẽ khởi động lại bộ định thời DIO để giảm thời giangửi DIO tiếp theo Cơ chế này giúp sự quảng bá DAG linh động và hiệu quảhơn

1.2 Các quy tắc trong quá trình lựa chọn DAG.

Cơ chế lựa chọn DAG là sự kết hợp giữa cơ chế so sánh độ ưu tiên của cácDAG và các luật được quy định trong Object function Độ ưu tiên của các DAGđược thể hiện thông qua trường DAG preferred trong gói tin DIO được gửi bờiDAG ROOT Nhờ đó, mỗi node trong mạng đều có thể lựa chọn những DAG được

ưu tiên nhất và thỏa mãn tốt nhất những yêu cầu định tuyến được đưa ra

a DAG tham gia phải đáp ứng instance của một node

b DAG tham gia phải có độ ưu tiên cao nhất và node có rank thấp nhất

c DAG tham gia phải thỏa mãn các object function của node

d Sau quá trình khám phá và tham gia DAG trong mạng, mỗi node xử lý cácthông tin trong DIO à chúng nhận được, cập nhật rank và chọn những parent từnhững node thành viên xung quanh của DAG

Trang 19

1.3 Tính toán rank và sự di chuyển của các node trong DAG.

Lựa chọn rank là quá trình xác định vị trí tương đối của node so với DAG ROOT trong DAG, đồng thời có ảnh hưởng đến mối quan hệ của node với các node khác trong mạng Quy tắc tính toán rank được quy định trong các hàm Object function ứng với mỗi Instance cụ thể.

Rank của node phải đảm bảo các quy tắc sau:

 Rank của node trong mạng luôn lớn hơn 1 và nhỏ hơn giới hạn lớn nhất (RANK MAX) được quy định tùy theo quy mô và mục đích triển khai.

 Rank của node phải luôn lớn hơn rank của tất cả các parent của node.

 Node có thể quảng bá rank thấp hơn hoặc cao hơn rank mà nó quảng bá trong các gói tin trước đó Sự thay đổi đó phụ thuộc vào rank của các parent trong DAG.

 Node có thể quảng bá rank bằng RANK MAX tại mọi thời điểm Khi một node quảng bá rank bằng RANK MAX, tương đương với sự kiện node không là thành viên cùa DAG nào trong mạng.

 Tại mọi thời điểm, node có thể tham gia vào một DAG mới trong cùng RPL Instance và thay đổi rank phù hợp Trong thời gian trước khi quảng

bá các gói tin DIO cho DAG mới, node vẫn tiếp tục gửi các gói tin đến các parent trong DAG cũ.

1.4 Truyền dữ liệu.

Sau quá trình xây dựng DAG, các node trong DAG tạo các gói dữ liệu và bắt đầu gửi gói tin đến DAG ROOT Để gửi gói đến DAG ROOT, node phải lựa chọn một node trong route table làm next-hop và gửi gói đến next-hop được lựa chọn Việc lựa chọn next-hop phải tuân theo các quy luật cụ thể, nhằm mục đích truyền gói hiệu quả, giảm khả năng mất gói, tránh các vòng lặp và các xung đột trong mạng.Các quy tắc lựa chọn next-hop:

 Next-hop là một node đã tham gia vào một DAG đáp ứng được RPL Instance

ID trong header của gói tin được forward

 Nếu một node hoạt động với giao thức định tuyến được ưu tiên hơn

RPL(OSPF,EIGRP,…) thì node đó được chọn làm next-hop

 Nếu node là thành viên của một DAG và có một parent là default route thì chọn

Trang 20

 Nếu node là thành viên của một DAG và tất cả các parent tạm thời không thể kết nối được, node chọn một trong số các sibling làm next-hop Nếu không có sibling, gói sẽ bị hủy.

 Node không được chọn các node có rank cao hơn làm next-hop

 Khi truyền gói, tham số Time to live(TTL) được sử dụng để theo dõi và loại bỏ những gói tin không thể truyền được tới đích, đồng thời hạn chế các vòng lặp cóthể xảy ra Tại mỗi node gói tin được forward, TTL được giảm 1 đơn vị Khi TTL bằng 0, gói sẽ bị hủy mà không

được truyền đến DAG ROOT

1.5 Ví dụ minh họa giao thức định

tuyến RPL.

a) Quá trình hình thành DAG.

 Các thiết bị trong mạng kết nối với

nhau để tránh loop Vì vậy,

DODAG được xây dựng để hình

thành topo mạng quản lí bởi DAG

ROOT DAODAG được xây dựng

dựa trên hàm OF và các số liệu/ràng

buộc

Hình 10 Quá trình hình thành DAG (1)

 LBR-1 phát ra các góiDIO Node A, B, C nhậnđược và xử lý các gói DIOnhận được.Nodes A, B, Ccân nhắc các số liệu củalink đến LBR-1 và mụctiêu tối ưu Các mục tiêu

Trang 21

tối ưu có thể đạt được bằng cách tham gia DODAG của LBR-1.Nodes A, B, C thêm LBR-1 như một DODAG parent và tham giaDAG.

Hình 11 Quá trình hình thành DAG (2)

 Timer của node C hết Node C phát

đi gói tin DIO LBR-1 bỏ qua DIO

Node B có thể thêm node C như một

Parent dự phòng, vẫn có Depth là 3

Node E tham gia DAG với Depth là

3 bằng cách thêm node C là Parent

Hình 12.

Quá trình hình thành DAG (3)

 Timer trên Node A hết Node A phát

ra các gói tin DIO LBR-1 bỏ quaDIO Node B thêm Node A Node B

Trang 22

có thể tối ưu các đường của mình trong DODAG Node B loại bỏ LBR-1 và node

C trong parent list của nó

Hình 13 Quá trình hình thành DAG (4)

 DODAG cứ tiếp tục được hình thành như

vậy đến khi node cuối cùng được thêm

vào DAG

Hình 14 Quá trình hình thành DAG (5)

b) Hàm OF.

Hàm OF dùng để định nghĩa làm thế nào để chọn parent và tính toán rank dựa trên các

số liệu Được định nghĩa bởi OCP Sử dụng các số liệu/ràng buộc để tính toán Ví dụ:tìm path tốt nhất theo latency( độ trễ ), để tránh các link có chất lượng thấp

c) Cơ chế chống Loop trong định tuyến RPL.

 Giả sửlink giữa node Bvà D bị hỏng.Node D loạinode B trongParent list của

Trang 23

nó Node D lúc này không còn bất kỳ Parent nào tronggrounded DODAG, vì vậy nó sẽ thành root của floatingDAG của chính nó.

Hình 15 Cơ chế chống loop (1)

 Node D phát DIO để thông báo thay đổi của

sub-DAG Node I có parent thay thế là E, nên

nó không rời DAG của LBR-1 Node I loại

Node D khỏi Parent list

Hình 16 Cơ chế chống loop (2)

 Node F không có sự lựa chọn nào

để ở trong DAG của LBR-1 nên F theo Node

D vào floating DAG của node D Node F phátDIO Node G và H theo Node F vào floating

Trang 24

Hình 17 Cơ chế chống loop (3)

 Node I phát gói DIO Node D nhận

thấy cơ hội tái nhập Grounded vớidepth 5 qua Node I Node D bắt đầuDAG Hop timer với 4 chu kì thời giangắn với node I

Hình 18 Cơ chế chống loop (4)

 Bây giờ ta giả sử link giữa A và F được thiết lập

Node A phát DIO Node F nhận thấy cơ hội tái hập Grounded DAG với depth 2 qua A Node F bắt đầu DAG Hop timer với 1 chu kì thời gian gắn

với node A

Trang 25

Hình 19 Cơ chế chống loop (5)

 Grounded DAG với depth 2 bằng cách thêm A là

Parent, loại D Node F phát DIO Node G và H

theo F vào Grounded DAG

Hình 20 Cơ chế chống loop (6)

 Node D thấy cơ hội táinhập DAG của LBR-1với Depth 2 thông quaNode F Node D bắtđầu DAG Hop timervới 2 chu kì gắn vớinode F, trong khi mộtDAG Hop timer khácđang chạy với 4 chu kìthời gian gắn với NodeI

Hình 21 Cơ chế chống loop (7)

Trang 26

 DAG Hop timer cùa Node D với 2 chu kì có xu hướng hết trước tiên Node Dtham gia vào Grounded DAG với depth 3 bằng cách thêm Node F là parent Kếtthúc.

Hình 22 Cơ chế chống loop (8)

Để phát hiện Loop, trong gói data có thêm một flag R, khi có một mâu thuẫn xảy

ra, bit R sẽ được set lên, và gói packet sẽ bị drop và timer sẽ reset

Trang 27

III RFC 6550 [ CITATION RFC12 \l 1033 ]

1 ICMPv6 RPL Control Message

Phần lớn các thông điệp điều khiển RPL có một phạm vi liên kết Ngoại lệ duynhất là thông điệp DAO/DAO-ACK trong mode Non-storing, điều này được trao đổibằng cách sử dụng một địa chỉ unicast qua nhiều hops và sau đó sử dụng các địa chỉglobal hoặc unique-local ( local độc nhất ) cho cả 2 địa chỉ nguồn và đích Với tất cảthông điệp điều khiển RPL , địa chỉ nguồn là một địa chỉ link-local và địa chỉ đíchhoặc là địa chỉ multicast của tất cả node RPL hoặc là một địa chỉ link-local unicast củanode đích Tất cả địa chỉ multicast của các node RPL là 1 địa chỉ mới với giá trịff02::1a

31

SecurityBaseOption(s)

Hình 23 RPL Control Message

 Code field cho ta thấy được loại của RPL Control Message Có những loại nhưsau:

 0x00: DODAG Information Solicitation

 0x01: DODAG Information Object

 0x02: Destination Advertisement Object

 0x03: Destination Advertisement Object Acknowledgment

 0x80: Secure DODAG Information Solicitation

 0x81: Secure DODAG Information Object

 0x82: Secure Destination Advertisement Object

 0x83: Secure Destination Advertisement Object Acknowledgment

 0x8A: Consistency Check

Trang 28

Nếu một node nhận được RPL Control Message mà không có Code field, node đóPHẢI loại bỏ gói tin mà không qua process nào nữa, CÓ THỂ dựng một báo hiệu, vàKHÔNG ĐƯỢC gữi bất kì gói tin nào để trả lời.

Algorithm

KIM

Resvd

ags

CounterKey Identifier

Hình 24 Security Section

MACs và chữ kí cung cấp chứng thực cho toàn bộ thông điệp điều khiển RPLkhông an toàn, bao gồm phần Security với tất cả các trường được định nghĩa,nhưng với checksum ICMPv6 sẽ tạm thời được đặt là 0 Mã hóa cung cấp bảo mậtcho các thông điệp ICMPv6 của RPL bắt đầu tại byte đầu tiên sau phần Securityvà tiếp tục tới byte cuối cùng của packet Việc chuyển đổi bảo mật sẽ cho thấy mộtthông điệp bảo mật ICMPv6 của RPL với việc bao gồm các trường mật mã(MACs, chữ ký, vv ) Nói cách khác, việc chuyễn đổi bảo mật bản thân nó (chữ kývà/hoặc thuật toán được sử dụng) sẽ chi tiết hóa làm thế nào để kết hợp các trườngmật mã vào trong các packet bảo mật Phần Security bản thân nó không chứa cáctrường mật mã kia một cách rõ ràng

 Counter là Time(T): nếu biến đếm Time flag bật, thì Counter là một nhãn thờigian Nếu flag không bật, thì counter là một biến tăng dần

 Reserved: 7-bit chưa được dùng Trường này PHẢI được khởi tạo bằng 0 bởisender và PHẢI bị bỏ qua bởi receiver

 Security Algorithm (Algorithm): cho biết thuật toán được sử dụng để mã hóa,MAC, và signature scheme mà mạng sử dụng Giá trị hỗ trợ như sau

Trang 29

Algorithm Encryption/MAC Signature

AES-128 RSA with SHA-256

Hình 25 Security Algorithm (Algorithm) Encoding

 Key Identifier Mode (KIM): là một trường gồm 2 bit, nó chỉ ra key đã được sửdụng cho việc bảo vệ packet được xác nhận ngầm hay 1 cách rõ ràng và chỉ rađại diện cụ thể của trường định danh Key KIM được đặt là một trong các giá trịtrong bảng dưới đây:

IndentifierLength(Octets)

0 00 Sữ dụng Group key (khóa nhóm)

Key được xác định bởi Key Index field

Key Source không được trình bàyKey Index được trình bày

1

1 01 Sữ dụng Per-pair key (khóa cặp)

Key được xác định bởi nguồn và đích của gói tin

Key Source không được trình bàyKey Index không đươc trình bày

0

2 10 Sữ dụng Group key (khóa nhóm)

Key được xác định bởi Key Index và Key Source Indentifier

9

Trang 30

Key Index được trình bày

3 11 Sữ dụng signature của Node

Nếu gói tin đã mã hóa, sữ dụng group key, Key Index and Key Source định dạng khóa

Key Source có thể được trình bàyKey Index có thể được trình bày

0/9

Table 1 Key Identifier Mode (KIM) Encoding

Trong mode 3 ( KIM = 11), sự hiện diện hay vắng mặt của Key Source ( keynguồn) và Key định danh ( key identifier) phụ thuộc vào cấp độ bảo mật (LVL) đượcmiêu tả bên dưới Nếu cấp độ bảo mật cho thấy có sự mã hoá, thì trường sẽ đượctrình ra, còn ngược lại thì các trường sẽ không được trình ra

 Resvd: trường 3-bit chưa sử dụng Trường này PHẢI được khởi tạo bằng 0 bởisender và PHẢI bị bỏ qua bởi receiver

 Security Level (LVL): là trường 3-bit mà chỉ ra sự bảo vệ gói tin được cung cấp.Giá trị này có thể lắp vào mỗi gói tin nền tảng và cho phép các cấp độ khác nhaucủa tính xác thực dữ liệu và tính bảo mật dữ liệu

Table 2 Security Level (LVL) Encoding

 Flags: trường 8-bit chưa được sử dụng dành riêng cho flags Trường này PHẢIđược khởi tạo bằng 0 bởi sender và PHẢI bị bỏ qua bởi receiver

Trang 31

 Counter: trường Counter cho biết giá trị của 4-octet không lặp lại sử dụng để xâydựng kỹ thuật mã hóa mà cung cấp sự bảo vệ gói tin và cho phép cho điềukhoản.

 Key Identifier: trường này cho biết key nào đã được sử dụng để bảo vệ gói tin.Trường này cung cấp các cấp độ khác nhau của sự bảo vệ gói tin, bao gồm peer-to-peer keys, group keys và signature key

Trang 32

1.6 DODAG Information Solicitation (DIS)

 Format of the DIS Base Object

23

Hình 26 The DIS Base Object

 Flag: trường 8-bit dành riêng cho flags Trường này PHẢI được khởi tạo bằng 0bởi sender và PHẢI bị bỏ qua bởi receiver

 Reserved: trường 8-bit không được sử dụng Trường này PHẢI được khởi tạobằng 0 bởi sender và PHẢI bị bỏ qua bởi receiver

 Unassigned bits của DIS Base PHẢI được đặt bằng 0 trong khi vận chuyển vàPHẢI được bỏ qua khi nhận

1.7 DODAG Information Object (DIO)

Format of the DIO Base Object

0 1 2 5 8 16 24 31

RPLInstanceID

VersionNumber

Rank

MOP

DODAGID

Option(s)

Hình 27 The DIO Base Object

 Mode of Operation (MOP): trường MOP xác định chế độ của hoạt động củaRPL Instance được tạo ra bởi DODAG root Tất cả các nodes khi tham gia vào

Trang 33

DODAG phải có thể để giữ nguyên MOP trong order để tham gia hoàn toàn nhưlà một router, hoặc chúng phải chỉ được tham gia như là một lá MOP có nhữnggiá trị như sau:

2 Chế độ Storing, không hổ trợ multicast

3 Chế độ Storing, hổ trợ multicast

Những giá trị khác không xác định

Hình 28 Mode of Operation (MOP) Encoding

anceID

Reserved

DAOSequence

Status

DADAGID*

Option(s)

Trang 34

Hình 29 The DAO Base Object

 RPLInstanceID: trường 8-bit chứa Instance của node

 K: ‘K’ flag cho biết node nhận đang đợi để gửi một DAO-ACK về

 D: ‘D’ flag cho biết trường DODAGID được trình bày Cờ này PHẢI được đặtkhi một local RPLInstaceID được sử dụng

 Flag: trường 6-bits chưa sử dụng còn lại dành riêng cho Flags Trường nàyPHẢI được khởi tạo bằng 0 bởi sender và PHẢI bị bỏ qua bởi receiver

 Reserved: trường 8-bit chưa sử dụng Trường này PHẢI được khởi tạo bằng 0bởi sender và PHẢI bị bỏ qua bởi receiver

 DODAGSequence: Tăng dần với mỗi gói tin DAO khác nhau trong một node vàlặp lại trong gói tin DAO-ACK

 DODAGID (optional): trường 128-bit số nguyên không dấu được đặt bởi mộtDODAG root Trường này chỉ được trình bay khi ‘D’ flag được bật Trường nàychỉ được trình bày khi một local RPLInstanceID được sử dụng, để mà xác địnhDODAGID có liên kết với RPLInstanceID Khi một global RPLInstanceIDđược sử dụng, trường này cần không được trình bày

anceID

Reserve d

DAOSe quance

Status

DODAGID*

Option(s) Dấu ‘*’ thể hiện DODAGID sẽ không luôn luôn được trình bày

Hình 30 The DAO ACK Base Object

Tương tự với DAO Base Object nhưng không có K flag

Trang 36

1.10 Consistency Check (CC)

Gói tin CC được sử dụng để kiểm tra bộ đếm tin nhắn bảo mật và đưa ra câutrả lời cho thử thách Một gói tin CC PHẢI được gửi như là một gói tin bảo mậtRPL Format of the CC Base Object

RPLInstan

DODAGID

Destination CounterOption(s)

Hình 31 The CC Base Object

 R: ‘R’ flag cho biết gói tin CC có được trả lời hay không Một gói tin với ‘R’flag không bật là một request; một gói tin với ‘R’ flag bật là một response

 CC Nonce: số nguyên không dấu 16-bit đặt bởi một CC request CC tương ứngtrả lời bao gồm giá trị CC nonce giống với request

 Destination Counter: giá trị số nguyên không dấu 32-bit cho node gữi đánh giágiá trị biến đếm bảo mật của đích Nếu node gữi không thể đánh giá, nó PHẢIđặt Destination Counter bằng 0

1.11 RPL Control Message Options

a) RPL Control Message Option Generic Format

Option Type Opntion Length Option Data …

Hình 32 RPL Option Generic Format

 Option Type: 8-bit phân loại của type of option Giá trị của Option Type đượcphân bởi IANA

 Option Legth: số nguyên không dấu 8-bit, yêu cầu độ dài trong octets củaoption, không bao gồm Option Type và trường Length

 Option Data: một trường biến dài chứa dữ liệu của option

Trang 37

b) Pad1

Có thể được trình bày trong các gói tin DIS, DIO, DAO, DAO-ACK và CC

0 7

Type = 0x00

Hình 33 Format of the Pad1 Option

Pad1 option được dùng để chèn một octet của padding vào trong gói tin để bật sựđiều chỉnh options Nếu như có hơn một octet của padding, PadN option nên được

sử dụng hơn multiple Pad1 option

c) PadN

Có thể được trình bày trong các gói tin DIS, DIO, DAO, DAO-ACK và CC

Type = 0x01 Opntion Length 0x00 Padding

Hình 34 Format of the Pad N Option

PadN option được dùng để chèn 2 hoặc nhiều octets của padding vào trong gói tin

để bật sự điều chỉnh option Dữ liệu PadN option PHẢI được bỏ qua bởi nodenhận

d) DAG Metric Container

Có thể được trình bày trong gói tin DIO hoặc DAO

Hình 35 Format of the DAG Metric Container Option

DAG Metric Container được sử dụng để báo cáo số liệu cùng với DODAG DAGMetric Container có thể chứa 1 cơ số các node rời rạc, liện kết, và tổng hợp số liệucùng với các ràng buộc được chỉ rõ trong RFC6551 như là được chọn bởi ngườithực hiện

Trang 38

Resvd

Prf

ResvdRoute Lifetime

Prefix (Variable Length)

Hình 36 Format of the Route Information Option

RIO được sử dụng để chỉ ra rằng việc kết nối với tiền tố đích được xác định là có sẵn từ DODAG root

Trang 39

Hình 37 Format of the DODAG Configuration Option

DODAG Configuration options được sử dụng để phân phát thông tin cấu hình choDODAG điều hành thông qua DODAG

Trang 40

Target Prefix (Variable Length)

Hình 38 Format of the RPL Target Option

RPL Target option được sử dụng để chỉ ra một địa chỉ IPv6 mục tiêu, tiền tố, hoặcnhóm multicast có thể tiến tới được hoặc được truy vấn cùng với DODAG Trong

1 DAO, tùy chọn mục tiêu RPL chỉ ra nơi có thể đến được

Parent Address*

Dấu ‘*’ thể hiện DODAGID sẽ không luôn luôn được trình bày

Ngày đăng: 15/01/2022, 08:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w