You are on page 1of 9

Translated from English to Vietnamese - www.onlinedoctranslator.

com

Cấu hình lớp MAC

Hình 4.6. Tốc độ nhận gói so với LQI

Để đọc giá trị LQI, chúng tôi sử dụng API Radio:

rd = NETSTACK_RADIO.get_value(PACKETBUF_ATTR_LINK_QUALITY, giá trị);

Ở đâu giá trị là một biến được truyền dưới dạng một con trỏ để lưu trữ giá trị LQI và thứ nó sẽ là
RADIO_RESULT_INVALID_VALUE vàng
RADIO_RESULT_OK .

Đài CC2420 được Z1 mote sử dụng thường nằm trong khoảng từ 110 (biểu thị khung chất lượng tối đa) đến
50 (thường là khung chất lượng thấp nhất mà bộ thu phát có thể phát hiện được).

Thông tin chi tiết về phép tính CC2538 LQI có trongHướng dẫn sử dụng CC253812.

4.2. Cấu hình lớp MAC

giao thức MAC


Các giao thức Kiểm soát truy cập phương tiện (MAC) mô tả quyền truy cập phương tiện được chấp nhận

trong mạng, bằng cách thiết lập các quy tắc chỉ định thời điểm một nút nhất định được phép truyền gói.

Các giao thức có thể được phân loại thành các giao thức dựa trên tranh chấp hoặc dựa trên đặt trước.

12
http://www.ti.com/lit/ug/swru319c/swru319c.pdf

106
trình điều khiển MAC

Đầu tiên dựa trên Cảm biến sóng mang để phát hiện hoạt động trung bình và dễ bị
va chạm và hiệu quả thấp hơn khi tải nặng, nhưng dễ thực hiện. Nhóm thứ hai hiệu
quả về thông lượng và năng lượng, nhưng yêu cầu đồng bộ hóa chính xác và ít thích
ứng hơn với lưu lượng động.

Việc triển khai truy cập phương tiện trong Contiki có 3 lớp khác nhau: Framer, Radio Duty-Cycle
(RDC) và Kiểm soát truy cập phương tiện (MAC).

Hình 4.7.Contiki ngăn xếp MAC13

Lớp mạng có thể được truy cập thông qua các biến toàn cục NETSTACK_FRAMER ,
NETSTACK_RDC và NETSTACK_MAC , được xác định tại thời điểm biên dịch.

Các biến nằm trong lõi/net/netstack.h và có thể được xác định bởi từng nền tảng
như mặc định và bị ghi đè bởi các ứng dụng.

4.2.1. trình điều khiển MAC

Contiki cung cấp hai trình điều khiển MAC: CSMA và NullMAC

CSMA (Carrier-Sense Multiple Access) nhận các gói đến từ lớp RDC và sử dụng lớp RDC để
truyền các gói. Nếu lớp RDC hoặc lớp radio phát hiện ra rằng phương tiện đang bận, thì lớp
MAC có thể truyền lại gói vào thời điểm sau đó. CSMA

13
http://anrg.usc.edu/contiki/index.php/MAC_protocols_in_ContikiOS

107
trình điều khiển DRC

giao thức giữ một danh sách các gói được gửi đến từng hàng xóm và tính toán các số liệu thống kê
như số lần truyền lại, xung đột, trì hoãn, v.v. Kiểm tra truy cập phương tiện được thực hiện bởi trình
điều khiển RDC.

NullMAC là một giao thức truyền qua đơn giản. Nó gọi các chức năng RDC thích hợp.

Theo mặc định cả haiZ1 vi trầnvàXa xôisử dụng trình điều khiển CSMA.

#ifndef NETSTACK_CONF_MAC
#định nghĩa NETSTACK_CONF_MAC csma_driver
# endif

Ngoài ra, người dùng có thể chọn NullMAC như sau:

#define NETSTACK_CONF_MAC nullmac_driver

4.2.2. trình điều khiển DRC

Lớp Radio Duty-Cycle (RDC) xử lý thời gian ngủ của các nút. Lớp này quyết định khi nào các
gói sẽ được truyền và đảm bảo rằng các nút được đánh thức khi các gói được nhận.

Việc triển khai các giao thức RDC của Contiki có sẵn trong các trình lõi/mạng/mac . Trà
điều khiển RDC sau được triển khai: phản đối , xmac , dpi , nullrdc và
sicslowmac . Việc triển khai và chi tiết của các trình điều khiển RDC đã nói ở trên đã được đưa ra
thuộc phạm vi của chương này. Thông dụng nhất là ContikiMAC. NullRDC là lớp thông qua
không bao giờ tắt đài.

#ifndef NETSTACK_CONF_RDC
#định nghĩa NETSTACK_CONF_RDC contikimac_driver
# endif

Trình điều khiển RDC cố gắng tắt đài càng nhiều càng tốt, kiểm tra định kỳ phương tiện không dây để biết
hoạt động của đài. Khi hoạt động được phát hiện, radio sẽ được bật để kiểm tra xem nó có phải nhận gói tin
hay không, hoặc nó có thể quay lại chế độ ngủ.

Tốc độ kiểm tra kênh được cung cấp bằng Hz, chỉ định số lần kênh được kiểm tra mỗi giây
và tốc độ kiểm tra kênh mặc định là 8 Hz. Tốc độ kiểm tra kênh được cung cấp theo lũy thừa
của hai và cài đặt điển hình là 2, 4, 8, và 16 Hz.

108
trình điều khiển khung

#ifndef NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE
#định nghĩa NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE số 8
# endif

Một gói thường phải được truyền lại hoặc "quét" cho đến khi người nhận bật và nhận được nó. Điều
này làm tăng mức tiêu thụ năng lượng của máy phát và tăng lưu lượng vô tuyến, nhưng việc tiết kiệm
năng lượng ở máy thu sẽ bù đắp cho điều này và có một mức tiết kiệm năng lượng tổng thể.

Một giải pháp thay thế để tối ưu hóa RDC là bật "tối ưu hóa pha", tính năng này sẽ trì hoãn hoạt
động nhấp nháy cho đến ngay trước khi bộ thu dự kiến sẽ hoạt động. Tuy nhiên, điều này yêu
cầu đồng bộ hóa thời gian tốt giữa máy phát và máy thu (chi tiết hơn trongTối ưu hóa pha DRC14
).Để bật tối ưu hóa pha, hãy thay đổi 0 bên dưới thành một.

#định nghĩa CONTIKIMAC_CONF_WITH_PHASE_OPTIMIZATION0


#định nghĩa VỚI_FAST_SLEEP 1

4.2.3. trình điều khiển khung

Trình điều khiển Framer thực sự là một tập hợp các chức năng để tạo khung cho dữ liệu được truyền và phân
tích cú pháp dữ liệu nhận được. Việc triển khai Framer được đặt tại lõi/mạng/mac , trong đó
đáng chú ý nhất là khung-802154 và khung-nullmac .

bên trongXa xôinền tảng, cấu hình sau là mặc định:

# ifndef NETSTACK_CONF_FRAMER
# nếu NETSTACK_CONF_WITH_IPV6
#define NETSTACK_CONF_FRAMER khung_802154
# khác /* NETSTACK_CONF_WITH_IPV6 */
#define NETSTACK_CONF_FRAMER contimimac_framer
# endif /* NETSTACK_CONF_WITH_IPV6 */
# endif /* NETSTACK_CONF_FRAMER */

Có nghĩa là khi IPv6 được sử dụng, khung-802154 được chọn, nếu không thì
contikimac_framer được sử dụng (cái mặc định cho contikimac_driver ).

Trà khung-nullmac framer nên được sử dụng cùng với nullmac_driver (MAC
lớp). Điều này chỉ cần điền vào 2 trường nullmac_hdr , đó là: địa chỉ người nhận và
địa chỉ người gửi.

14
https://github.com/contiki-os/contiki/wiki/RDC-Phase-optimization

109
IPv6 và định tuyến

Trà khung-802154 được thực hiện trong lõi/net/mac/framer-802154.c . Người lái xe

đóng khung dữ liệu theo tiêu chuẩn IEEE 802.15.4 (2003). Trình tạo khung chèn và trích xuất
dữ liệu vào góibuf kết cấu.

4.3. IPv6 và định tuyến

Một trong những tính năng nổi bật nhất của Contiki là hỗ trợ các giao thức IP, là một trong
những hệ điều hành nhúng đầu tiên cung cấp hỗ trợ IPv6.

Ngoài ra Contiki cũng hỗ trợ giao tiếp IPv4 và non-IP(vần điệu)15,tuy nhiên phần còn lại của
cuốn sách này sẽ tập trung vào IPv6. Có một tập hợp tốt các ví dụ về rime có sẵn tại
ví dụ/vần . TràXa xôi zoul-demo.c ví dụ cơ bản nhất tại ví dụ/
zolertia/zoul sử dụng vần là tốt.

4.3.1. IPv6

TràI pulà một ngăn xếp TCP/IP nguồn mở được thiết kế để sử dụng ngay cả với các bộ vi điều khiển 8
và 16 bit nhỏ. Ban đầu nó được phát triển bởiAdam Dunkels16trong khi ởViện Khoa học Máy tính Thụy
Điển (SICS)17,được cấp phép theo giấy phép kiểu BSD và được phát triển thêm bởi nhiều nhóm nhà
phát triển.

Chi tiết triển khai của uIP/uIPv6 nằm ngoài phạm vi của phần này. Phần còn lại của phần
này giải thích các cấu hình cơ bản ở cấp độ nền tảng và ứng dụng.

Để kích hoạt IPv6, điều sau đây phải được xác định, hoặc trong ứng dụng của nó Makefile hoặc trong

dự án-conf.h tập tin:

# xác định UIP_CONF_IPV61

#ifndef NBR_TABLE_CONF_MAX_NEIGHBORS
#định nghĩa NBR_TABLE_CONF_MAX_NEIGHBORS 20
# endif
#ifndef UIP_CONF_MAX_ROUTES
#định nghĩa UIP_CONF_MAX_ROUTES 20
# endif

15
https://github.com/alignan/contiki/tree/master/core/net/rime
16
http://dunkels.com/adam/
17
https://en.wikipedia.org/wiki/Swedish_Instolarship_of_Computer_Science

110
RPL

/* uIP */
#ifndef UIP_CONF_BUFFER_SIZE
#định nghĩa UIP_CONF_BUFFER_SIZE 1300
# endif

#định nghĩa UIP_CONF_IPV6_QUEUE_PKT 0


#định nghĩa UIP_CONF_IPV6_CHECKS 1
#định nghĩa UIP_CONF_IPV6_REASSEMBLY 0
#định nghĩa UIP_CONF_MAX_LISTENPORTS số 8

Tùy thuộc vào ứng dụng và nền tảng của bạn, cuối cùng bạn có thể
hết bộ nhớ RAM, đặc biệt đúng với các nền tảng có RAM 8-10KB. Một
cách tốt để tiết kiệm RAM là giảm UIP_CONF_MAX_ROUTES
và NBR_TABLE_CONF_MAX_NEIGHBORS số trong bạn dự án-
conf.h .

4.3.2. RPL

Có một số hương vị định tuyến cho mọi thứ, nhưng cuối cùng tất cả đều làm cùng một việc: đảm bảo rằng
các gói đến đúng đích. Điều này được thực hiện theo nhiều cách khác nhau tùy thuộc vào các yếu tố như số
liệu định tuyến (cách một tuyến đường được đánh giá là tốt hơn các tuyến khác), việc định tuyến được thực
hiện động hay tĩnh, v.v.

Trong Contiki, giao thức định tuyến mặc định là RPL. Các giao thức khác như Ad hoc On-Demand
Distance Vector (AODV) nằm ngoài phạm vi của phần này.

Các chi tiết cụ thể của việc triển khai RPL nằm ngoài phạm vi của phần này, chúng tôi chỉ mô
tả các cấu hình chung và giới thiệu ngắn gọn về RPL. Để biết thêm chi tiết, hãy kiểm tra việc
triển khai RPL tại lõi/mạng/rpl .

RPL là gì?
RPL là một giao thức định tuyến IPv6 dành cho các mạng có tổn thất và năng lượng thấp được thiết kế bởi

nhóm Định tuyến qua mạng có tổn thất và năng lượng thấp (ROLL) của IETF, được sử dụng làm giao thức
định tuyến thực tế trong Contiki. RPL là một giao thức vectơ khoảng cách chủ động, nó bắt đầu tìm các

tuyến ngay khi mạng RPL được khởi tạo.

111
RPL

Hình 4.8. RPL trong ngăn xếp giao thức

Nó hỗ trợ ba mẫu lưu lượng:

• Đa điểm tới điểm (MP2P)

• Điểm-đa điểm (P2MP)

• Điểm tới điểm (P2P)

RPL xây dựng các DAG hướng đích (DODAG) bắt nguồn từ một phần chìm (DAG
ROOT) được xác định bởi mã định danh duy nhất DODAGID. DODAG được tối ưu hóa
bằng cách sử dụng chỉ số Hàm mục tiêu (OF) được xác định bởi Điểm mã mục tiêu
(OCP), cho biết các ràng buộc động và các chỉ số như số bước nhảy, độ trễ, số lần
truyền dự kiến, lựa chọn gốc, mức tiêu thụ năng lượng, v.v. Số thứ hạng được gán
cho mỗi nút có thể được sử dụng để xác định vị trí tương đối và khoảng cách của nó
tới gốc trong DODAG.

Trong một mạng nhất định, có thể có nhiều phiên bản RPL độc lập về mặt logic. Một nút RPL có thể thuộc

về nhiều phiên bản RPL và có thể hoạt động như một bộ định tuyến trong một số và như một lá trong

những phiên bản khác. Một tập hợp nhiều DODAG có thể nằm trong một TRƯỜNG HỢP RPL và một nút có

thể là thành viên của nhiều TRƯỜNG HỢP RPL, nhưng chỉ có thể thuộc về tối đa một DODAG trên mỗi

TRƯỜNG HỢP DAG.

Cơ chế hẹn giờ nhỏ giọt điều chỉnh việc truyền thông báo Đối tượng thông tin
DODAG (DIO), được sử dụng để xây dựng và duy trì các tuyến đi lên của DODAG,
quảng cáo phiên bản RPL, ID DODAG, RANK và số phiên bản DODAG của nó.

112
RPL

Một nút có thể yêu cầu thông tin DODAG bằng cách gửi thông báo Yêu cầu thông tin DODAG
(DIS), yêu cầu thông báo DIO từ các vùng lân cận của nó để cập nhật thông tin định tuyến và
tham gia một phiên bản.

Các nút phải giám sát các thông báo DIO trước khi tham gia DODAG, sau đó tham gia
DODAG bằng cách chọn một Nút gốc từ các nút lân cận bằng cách sử dụng độ trễ được
quảng cáo, OF và RANK. Các thông báo Đối tượng quảng cáo đích (DAO) được sử dụng
để duy trì các tuyến đi xuống bằng cách chọn nút gốc ưu tiên có thứ hạng thấp hơn và
gửi một gói đến DAG ROOT thông qua từng Nút trung gian.

RPL có hai cơ chế để sửa chữa cấu trúc liên kết của DODAG, một cơ chế để tránh vòng lặp và cho
phép các nút tham gia/tham gia lại và cơ chế khác được gọi là sửa chữa toàn cầu. Sửa chữa toàn cầu
được bắt đầu tại DODAG ROOT bằng cách tăng Số phiên bản DODAG để tạo Phiên bản DODAG mới.

Thông tin thêm về RPL có thể được tìm thấy trongRFC655018.

Hỗ trợ định tuyến được bật theo mặc định trongZ1 vi trầnvàXa xôinền tảng. Để kích hoạt định tuyến, những
điều sau đây phải được kích hoạt:

#ifndef UIP_CONF_ROUTER
#định nghĩa UIP_CONF_ROUTER 1
# endif

Để bật RPL, hãy thêm phần sau vào tệp ứng dụng của bạn. Makefile Hoặc của nó dự án-conf.h

#define UIP_CONF_IPV6_RPL1

Sau đây là cấu hình mặc định được thực hiện trongXa xôi:

/* ND và định tuyến */
#định nghĩa UIP_CONF_ND6_SEND_RA 0
#định nghĩa UIP_CONF_IP_FORWARD 0
#định nghĩa RPL_CONF_STATS 0

Tắt gửi quảng cáo định tuyến

18
https://tools.ietf.org/html/rfc6550

113
Thiết lập một trình thám thính không dây

Vô hiệu hóa chuyển tiếp IP

Thống kê cấu hình RPL bị vô hiệu hóa


Trà RPL_CONF_OF tham số cấu hình chức năng mục tiêu RPL. Thứ hạng tối thiểu
với Hàm mục tiêu độ trễ (MRHOF) sử dụng ETX làm chỉ số định tuyến và nó cũng có sơ khai cho chỉ số
năng lượng.

#ifndef RPL_CONF_OF
#định nghĩa RPL_CONF_OF rpl_mrhof
# endif

Số liệu Số lần truyền dự kiến (ETX) đo lường số lần cần thiết để nhận được xác nhận (ACK)
của một gói đã gửi, giữ mức trung bình động cho mỗi hàng xóm, tính toán tổng của tất cả
các ETX để xây dựng các tuyến đường.

Theo mặc định Contiki sử dụng chế độ lưu trữ cho các tuyến đường đi xuống của RPL. Về cơ bản tất cả các nút lưu trữ

trong một bảng định tuyến địa chỉ của các nút con của chúng.

4.4. Thiết lập một trình thám thính không dây

Trình nghe lén gói tin là một công cụ bắt buộc phải có cho bất kỳ ứng dụng mạng không dây nào, nó
cho phép xem những gì bạn đang truyền qua vô tuyến, xác minh cả hai việc truyền đang diễn ra, các
khung/gói được định dạng đúng và việc truyền thông đang diễn ra. chúng tôi đã đưa ra kênh.

Có sẵn các tùy chọn thương mại, chẳng hạn như Texas InstrumentsBộ đánh hơi gói SmartRF19,
mà có thể được sử dụng với mộtBộ chuyển đổi USB CC253120để chụp các gói tin như bên dưới.

19
http://www.ti.com/tool/packet-sniffer
20
http://www.ti.com/tool/CC2531EMK

114

You might also like