Xử lý IPv6

Xem nguồn trên GitHub

Hãy xem cách Thread xác định từng thiết bị trong mạng và những loại địa chỉ mà các thiết bị này dùng để giao tiếp với nhau.

Phạm vi

Phạm vi OT

Có 3 phạm vi trong mạng Thread để định địa chỉ truyền đơn:

  • Link-Local – tất cả các giao diện có thể truy cập bằng một lần truyền sóng vô tuyến
  • Mesh-Local – tất cả các giao diện có thể truy cập trong cùng một mạng Thread
  • Toàn cầu – tất cả các giao diện có thể truy cập từ bên ngoài mạng Thread

Hai phạm vi đầu tiên tương ứng với các tiền tố do mạng Thread chỉ định. Link-Local có tiền tố là fe80::/16, còn Mesh-Local có tiền tố là fd00::/8.

Unicast

Có nhiều địa chỉ truyền đơn IPv6 giúp xác định một thiết bị Thread duy nhất. Mỗi loại có một chức năng riêng dựa trên phạm vi và trường hợp sử dụng.

Trước khi đi vào chi tiết từng loại, hãy tìm hiểu thêm về một loại phổ biến, được gọi là Routing Locator (RLOC). RLOC xác định một giao diện Thread, dựa trên vị trí của giao diện đó trong cấu trúc liên kết mạng.

Cách tạo Bộ định vị định tuyến

Tất cả các thiết bị đều được chỉ định một Mã nhận dạng bộ định tuyến và một Mã nhận dạng thiết bị con. Mỗi phần tử mẹ duy trì một bảng gồm tất cả các phần tử con. Sự kết hợp của các phần tử này sẽ xác định duy nhất một thiết bị trong cấu trúc liên kết. Ví dụ: hãy xem xét các nút được đánh dấu trong cấu trúc liên kết sau đây, trong đó số trong Bộ mở rộng mạng lưới (ngũ giác) là Mã nhận dạng bộ định tuyến và số trong Thiết bị đầu cuối (hình tròn) là Mã nhận dạng thiết bị con:

Cấu trúc liên kết RLOC OT

Mỗi Mã nhận dạng bộ định tuyến của trẻ tương ứng với Mã nhận dạng bộ định tuyến của cha mẹ (Bộ mở rộng mạng lưới). Vì Mesh Extender không phải là một Child, nên Child ID cho Mesh Extender luôn là 0. Cùng với nhau, các giá trị này là duy nhất cho mỗi thiết bị trong mạng Thread và được dùng để tạo RLOC16, đại diện cho 16 bit cuối cùng của RLOC.

Ví dụ: sau đây là cách tính RLOC16 cho nút trên cùng bên trái (Router ID = 1 và Child ID = 1):

OT RLOC16

RLOC16 là một phần của Mã nhận dạng giao diện (IID), tương ứng với 64 bit cuối cùng của địa chỉ IPv6. Bạn có thể dùng một số IID để xác định một số loại giao diện Luồng. Ví dụ: IID cho RLOC luôn có dạng như sau:

0000:00ff:fe00:RLOC16

IID, kết hợp với Tiền tố cục bộ của mạng lưới, sẽ tạo ra RLOC. Ví dụ: khi sử dụng Tiền tố cục bộ của mạng lưới là fde5:8dba:82e1:1::/64, RLOC cho một nút có RLOC16 = 0x401 là:

OT RLOC

Bạn có thể dùng cùng một logic này để xác định RLOC cho tất cả các nút được làm nổi bật trong cấu trúc liên kết mẫu ở trên:

Cấu trúc liên kết OT có địa chỉ

Tuy nhiên, vì RLOC dựa trên vị trí của nút trong cấu trúc liên kết, nên RLOC của một nút có thể thay đổi khi cấu trúc liên kết thay đổi.

Ví dụ: có thể nút 0x400 bị xoá khỏi mạng Thread. Các nút 0x4010x402 thiết lập các đường liên kết mới đến các Bộ mở rộng mạng lưới khác nhau, do đó, mỗi nút được chỉ định một RLOC16 và RLOC mới:

Cấu trúc liên kết OT sau khi thay đổi

Các loại địa chỉ đơn điểm

RLOC chỉ là một trong nhiều địa chỉ truyền đơn IPv6 mà thiết bị Thread có thể có. Một danh mục địa chỉ khác được gọi là Giá trị nhận dạng điểm cuối (EID), dùng để xác định một giao diện Thread duy nhất trong một phân vùng mạng Thread. EID không phụ thuộc vào cấu trúc mạng Thread.

Các loại truyền đơn hướng phổ biến được trình bày chi tiết bên dưới.

Một EID xác định giao diện Thread có thể truy cập bằng một lần truyền sóng vô tuyến.
Ví dụfe80::54db:881c:3845:57f4
IIDDựa trên địa chỉ mở rộng 802.15.4
Phạm viLiên kết cục bộ
Chi tiết
  • Được dùng để khám phá các thiết bị lân cận, định cấu hình các đường liên kết và trao đổi thông tin định tuyến
  • Không phải là địa chỉ có thể định tuyến
  • Luôn có tiền tố là fe80::/16

EID cục bộ dạng lưới (ML-EID)

Một EID xác định giao diện Thread, độc lập với cấu trúc liên kết mạng. Được dùng để truy cập vào một giao diện Thread trong cùng một phân vùng Thread. Còn được gọi là Địa chỉ cục bộ duy nhất (ULA).
Ví dụfde5:8dba:82e1:1:416:993c:8399:35ab
IIDNgẫu nhiên, được chọn sau khi hoàn tất việc uỷ quyền
Phạm viMesh-Local
Chi tiết
  • Không thay đổi khi cấu trúc liên kết thay đổi
  • Các ứng dụng nên sử dụng
  • Luôn có tiền tố fd00::/8

Bộ định vị định tuyến (RLOC)

Xác định một giao diện Thread, dựa trên vị trí của giao diện đó trong cấu trúc liên kết mạng.
Ví dụfde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
Phạm viMesh-Local
Chi tiết
  • Được tạo khi một thiết bị kết nối với mạng
  • Để phân phối các gói dữ liệu IPv6 trong mạng Thread
  • Thay đổi khi cấu trúc liên kết thay đổi
  • Thường không được các ứng dụng sử dụng

Bộ định vị Anycast (ALOC)

Xác định một giao diện Thread thông qua tra cứu RLOC, khi không biết RLOC của đích đến.
Ví dụfde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
Phạm viMesh-Local
Chi tiết
  • fcXX = Đích đến ALOC, tìm kiếm RLOC thích hợp
  • Thường không được các ứng dụng sử dụng

Địa chỉ truyền đơn toàn cầu (GUA)

EID xác định một giao diện Thread trên phạm vi toàn cầu, ngoài mạng Thread.
Ví dụ2000::54db:881c:3845:57f4
IID
  • SLAAC – Do chính thiết bị chỉ định ngẫu nhiên
  • DHCP – Do máy chủ DHCPv6 chỉ định
  • Thủ công – Do lớp ứng dụng chỉ định
Phạm viToàn cầu
Chi tiết
  • Địa chỉ IPv6 công khai
  • Luôn có tiền tố là 2000::/3

Multicast

Truyền tin đa hướng được dùng để truyền thông tin đến nhiều thiết bị cùng một lúc. Trong mạng Thread, các địa chỉ cụ thể được dành riêng cho việc sử dụng tính năng truyền tin đa hướng với các nhóm thiết bị khác nhau, tuỳ thuộc vào phạm vi.

Địa chỉ IPv6 Phạm vi Người đã nhận tin nhắn
ff02::1 Liên kết cục bộ Tất cả FTD và MED
ff02::2 Liên kết cục bộ Tất cả FTD
ff03::1 Mesh-Local Tất cả FTD và MED
ff03::2 Mesh-Local Tất cả FTD

Bạn có thể nhận thấy rằng Thiết bị đầu cuối ở chế độ ngủ (SED) không được đưa vào làm người nhận trong bảng truyền tin đa hướng ở trên. Thay vào đó, Thread xác định địa chỉ truyền tin đơn hướng dựa trên tiền tố IPv6 đa hướng có phạm vi cục bộ liên kết và phạm vi cục bộ miền được dùng cho Tất cả các nút Thread, kể cả SED. Các địa chỉ truyền tin đa hướng này khác nhau tuỳ theo mạng Thread, vì mạng này được xây dựng trên tiền tố Mesh-Local đơn hướng (xem RFC 3306 để biết thêm thông tin về địa chỉ truyền tin đa hướng IPv6 dựa trên tiền tố đơn hướng).

Các phạm vi tuỳ ý ngoài những phạm vi đã được liệt kê cũng được hỗ trợ cho các thiết bị Thread.

Anycast

Anycast được dùng để định tuyến lưu lượng truy cập đến một giao diện Thread khi không biết RLOC của đích đến. Anycast Locator (ALOC) xác định vị trí của nhiều giao diện trong một phân vùng Thread. 16 bit cuối cùng của ALOC (gọi là ALOC16) có định dạng 0xfcXX, biểu thị loại ALOC.

Ví dụ: ALOC16 giữa 0xfc010xfc0f được dành riêng cho các tác nhân DHCPv6. Nếu không xác định được RLOC của DHCPv6 Agent cụ thể (có thể là do cấu trúc liên kết mạng đã thay đổi), thì bạn có thể gửi một thông báo đến ALOC của DHCPv6 Agent để lấy RLOC.

Luồng xác định các giá trị ALOC16 sau:

ALOC16 Loại
0xfc00 Người đứng đầu
0xfc010xfc0f Tác nhân DHCPv6
0xfc100xfc2f Dịch vụ
0xfc300xfc37 Ủy viên
0xfc400xfc4e Tác nhân khám phá lân cận
0xfc380xfc3f
0xfc4f0xfcff
Đã đặt trước

Tóm tắt

Kiến thức bạn học được:

  • Mạng Thread bao gồm 3 phạm vi: Link-Local, Mesh-Local và Global
  • Thiết bị Thread có nhiều địa chỉ IPv6 đơn phương
    • RLOC đại diện cho vị trí của thiết bị trong mạng Thread
    • ML-EID là mã nhận dạng riêng biệt của một thiết bị Thread trong một phân vùng và nên được các ứng dụng sử dụng
  • Thread sử dụng truyền tin đa hướng để chuyển tiếp dữ liệu đến các nhóm nút
  • Thread sử dụng địa chỉ truyền đến một nhóm bất kỳ khi không xác định được RLOC của đích đến

Để tìm hiểu thêm về việc định địa chỉ IPv6 của Thread, hãy xem các phần 5.2 và 5.3 của Quy cách của Thread.

Kiểm tra kiến thức của bạn

Đâu là 3 phạm vi được dùng để định địa chỉ truyền đơn trong mạng Thread?
Riêng tư
Sai.
Interface-Local
Sai.
Liên kết cục bộ
Chính xác.
Site-Local
Sai.
Mesh-Local
Chính xác.
Toàn cầu
Chính xác.
Điều gì xảy ra khi một thiết bị có Mã nhận dạng trẻ em là 0?
Thiết bị là của trẻ em.
Sai.
Thiết bị là Thiết bị có thể dùng làm bộ mở rộng.
Gần đúng nhưng chưa chính xác.
Thiết bị là Bộ mở rộng mạng lưới.
Chính xác. Bộ mở rộng mạng lưới luôn có Mã nhận dạng thiết bị con là 0.
Camera (một nút trên mạng Thread) nhận được RLOC16 và RLOC mới. Sự kiện nào sau đây có thể gây ra vấn đề này?
Có người đã tải ảnh từ camera xuống từ xa.
Sai. Sự kiện này sẽ không ảnh hưởng đến mạng Thread.
Bộ mở rộng mạng lưới đã bị ngắt kết nối khỏi mạng.
Chính xác. Khi Bộ mở rộng mạng lưới bị ngắt kết nối khỏi mạng, cấu trúc liên kết mạng sẽ thay đổi, điều này có thể dẫn đến việc thiết bị tự quảng bá thành Bộ mở rộng mạng lưới và nhận được một RLOC mới.
Camera chuyển sang chế độ ngủ, làm thay đổi cấu trúc liên kết mạng.
Sai. Việc chuyển sang chế độ ngủ không nhất thiết khiến thiết bị nhận được địa chỉ mạng mới.
Một thiết bị trên mạng Thread đăng ký địa chỉ phát đa hướng ff03::2. Thông tin này cho chúng ta biết điều gì về thiết bị?
Đây là Thiết bị đầu cuối tối thiểu (MED).
Sai.
Đây là một Thiết bị đầu cuối đầy đủ (FED).
Sai. (Gợi ý: Đây có thể là hoặc không phải là một FED.)
Đây là một Thiết bị Thread tối thiểu (MTD).
Sai.
Đây là một Thiết bị Thread đầy đủ (FTD).
Chính xác. Chỉ Thiết bị có đầy đủ chức năng của Thread mới đăng ký địa chỉ phát đa hướng ff03::2. Chúng thực hiện việc này trong phạm vi Mesh-Local.
Thread sử dụng loại định tuyến và định địa chỉ nào để chuyển tiếp dữ liệu đến các nhóm nút?
unicast
Sai.
anycast
Sai.
multicast
Chính xác.
truyền tin
Sai.
Thiết bị Thread sử dụng loại địa chỉ hoá và định tuyến nào khi không xác định được RLOC của người nhận thông báo dự kiến?
unicast
Sai.
anycast
Chính xác. Anycast cho phép một thiết bị kết nối với một nút có RLOC không xác định bằng cách định địa chỉ ALOC của thiết bị.
multicast
Sai.
truyền tin
Sai.