ZigBee 2007 (ZigBee Pro). Логический формат пакета данных от конечной точки.

Описание одного из наиболее важных пакетов (для разработчика).



Как оказалось Ti не соврали про полезность сниффера. Он действительно делает жизнь приятней. Кстати т.к. это ZigBee то этот сниффер работает со всеми ZigBee трансиверами от разных производителей.

Но без понимания как выглядит пакет данных он абсолютно бесполезен.

Надо заметить, что ZigBee довольно сильно похож на Ethernet.

Адресация



ZigBee сеть (далее сеть) может быть огромной. До 65535 устройств в одной сети. Более того сети/кластеры можно объединять через шлюзы.

Сеть включает себя:
— кластер/кластеры. В каждой сети имеется хотя-бы один кластер;
— группу/группы. В кластере должна быть хотя-бы одна группа;
— конечная точка. В группе должно быть хотя-бы одно устройство.

Такое разделение позволяет максимально эффективно использовать канал данных (а это 100Кбит/с) да и организовывать сеть.

Также это позволяет отправлять широковещательные пакеты:
— в сети;
— в кластере;
— в группе;
— мультиадресные (в поле назначения указан список адресов).
Когда мы отправляем пакет то мы указываем номер сети, кластера, группы или адрес устройства.

Для этого заполняются поля:

PAN (Personal Area Network/Персональная сеть) 16-битный адрес. Этот адрес выбирает разработчики или генерит координатор.

Cluster ID(Cluster Identifier) 16-битный адрес. Указывает разработчик или координатор.

Extended Address/Short Address or Group ID:
-Extended Address уникальный 64-битный адрес в сети. Обычно прописан в трансивере но можно за 300$ купить вечный запас адресов.
-Short Address уникальный 16-битный адрес в сети. Генерируется во время регистрации и может неоднократно меняться во время работы.
-Group ID 16-битный уникальный адрес в кластере.

Формат пакета


.
.
Эта часть для коммуникации между сетями.

.
.
Для коммуникации внутри сети.

.
.
Отправленное сообщение.

(Картинки качественные но при загрузки они почему-то портятся)

Это все одни пакет. Я его разбил на три логические части.

А это его вид в HEX
Packet index: 218
Length: 30
Raw data (hex): 61 88 A0 BC 12 00 00 B4 15 48 00 00 00 B4 15 0F 48 00 D7 77 00 D7 D7 D7 07 48 65 6C 6C 6F
RSSI [dBm]: -51
Correlation value: 108
CRC OK: 1


.
.
.
Personal number — номер отловленного сниффером пакета. Для нас не имеет значения.
Time — время от старта. Это используется для составления временной диаграммы. Для нас не имеет значения.
Length — длинна пакета + 2 байта LQI и RSSI.


.
.
.
HEX 61 88



Старшую часть сниффер обрезал. Т.к. дальше и так видно какая адресация.

Frame type — тип принятого пакет.



Security enabled — шифрование включено/выключено.

Frame pending — 0 — это целый пакет. 1 — это часть пакета. (В ZigBee большой пакет может быть разбит на части).

Ack. request — 0 — отправка без подтверждения. 1- с подтверждением.

Intra-PAN — 1 — пакет передается внутри сети. 0 — передать пакет в другую сеть.


.
Sequence number — порядковый номер пакета. Используется для подтверждения получения пакета в текущем соединении.

В ZigBee пакеты не передаются сразу. Они ставятся в очередь. Каждому пакету в очереди присваивается уникальный номер. За один сеанс передачи может быть передано более одного пакета и порядковый номер нужен для того чтоб определить какие именно пакеты дошли успешно.


.

Dest. PAN (Destination Personal Area Network/Персональная сеть) — адрес сети получателя.


.
Dest. Address — адрес получателя в сети назначения(адрес сети может быть другой). В данном случае координатор. Это не обязательно адрес конечного получателя. Может быть другим если пакет следует по маршруту.


.
Source Address — адрес отправителя сообщения. Это не обязательно адрес конечной точки(устройства) которое отправило сообщение. Это может быть адресом того кто переслал сообщение.

Т.е. если пакет передается в такой сети.
Coord < — Router 1 < — Router 2 < — End Point.
От конечной точки к координатору. И на данный момент прошла передача между роутерами, то это поле описывает соединение между Router 1 и Router 2 а не соединение между конечной точкой и координатором.


.
MAC Payload (Medium Access Control/Управление доступом к среде Payload/Полезная нагрузка ) — сообщение которое отправлено по сети или между сетями.


.
NWK(Network) Frame control field — поле описывающая текущий сеанс передачи.



Frame type — тип пакета.


У нас может быть четыре вида соединений.


Unicast — передача конкретному устройству. Можно произвести его поиск и составить маршрут. Можно шифровать пакет. Допустима расширенная адресация получателя и отправителя.

Broadcast — широковещательный пакет. Нельзя составить маршрут. Разрешено шифрование. Расширенная адресация получателя запрещена но разрешена расширенная адресация отправителя.

Multicast — многоадресный пакет. Составить маршрут нельзя. Разрешено шифрование. Расширенная адресация получателя запрещена но разрешена расширенная адресация отправителя.

Source router — пакет для составления маршрута. Отправляется перед Unicast передачей.

Version — версия протокола.

DR (Discover route) — найти маршрут.

MF (Multicast Flag) — 1 — многоадресный пакет.

Sec (Security) — шифрование.

DIEEE (Destination IEEE Address Sub-Field) — 1 расширенная адресация.

SIEEE ( Source IEEE Address Sub-Field) — 1 расширенная адресация.



NWK Dest. Address — адрес получателя. (У меня два устройства поэтому адреса совпадают).



NWK Src.(Source) Address — адрес отправителя.



Broadcast Radius — максимальна длинна пути (количество рутеров посредников). Число при пересылке декрементируется.



Broadcast Seq. Num (Sequence Number) — номер пакета в текущей передаче данных от конечной точки к конечному получателю.



NWK(Network) payload — полезная нагрузка сетевого сообщения.



APS (Application Support) Frame control field — это поле описывает сообщение которое отправила конечная точка к получателю.



Type — тип пакета ACK/DATA/CMD.

Delivery mode — способ доставки.

Unicast — прямая доставка по адресу.
Indirect — косвенная. Вещь специфичная. Смысл ее не понял.
Broadcast — широковещательная.
Group addressing — доставка группе.

Ack Format Field — подтверждение. 0- если конечный получатель должен подтвердить получение пакета Data. 1- если конечный получатель должен подтвердить получение пакета CMD.

Sec — шифрование.

Ack. request — это поле сниффер выбросил. Т.к. его значение определяется по Ack Format Field.

Extended Header Present — расширенная адресация отправителя.



APS Dest Endpoint — Что именно означает это поле не понял.
2.2.5.1.2 Destination Endpoint Field
The destination endpoint field is 8-bits in length and specifies the endpoint of the
final recipient of the frame. This field shall be included in the frame only if the
delivery mode sub-field of the frame control field is set to 0b00 (normal unicast
delivery), 0b01 (indirect delivery where the indirect address mode sub-field of the
frame control field is also set to 0), or 0b10 (broadcast delivery). In the case of
broadcast delivery, the frame shall be delivered to the destination endpoint
specified within the range 0x01-0xf0 or to all active endpoints if specified as 0xff.
A destination endpoint value of 0x00 addresses the frame to the ZigBee device
object (ZDO), resident in each device. A destination endpoint value of 0x01-0xf0
addresses the frame to an application operating on that endpoint. A destination
endpoint value of 0xff addresses the frame to all active endpoints except endpoint
0x00. All other endpoints (0xf1-0xfe) are reserved.



APS Cluster ID — идентификатор кластера к которому относится данное сообщение.



APS Profile ID (Profile Identifier Field) — идентификатор профиля сети (В ZigBee есть еще профили сети Public, Private, Smart Energy и т.д.)



APS Src. Endpoint — это я тоже не понял.

2.2.5.1.6 Source Endpoint Field
The source endpoint field is eight-bits in length and specifies the endpoint of the
initial originator of the frame. A source endpoint value of 0x00 indicates that the
frame originated from the ZigBee device object (ZDO) resident in each device. A
source endpoint value of 0x01-0xf0 indicates that the frame originated from an
application operating on that endpoint. All other endpoints (0xf1-0xff) are
reserved.




APS Counter — счетчик для исключения дубликатов. Пакет может может дойти успешно, но подтверждение может потеряться. В таком случае появится дубль. С помощью этого счетчика можно отфильтровать дубли.
При успешной передачи и получения подтверждения он инкриминируется.

Помним номер пакета в очереди используется только для подтверждения получения но с помощью него невозможно отфильтровать дубликаты.



APS Payload — полезные данные. В данном случае «Hello».



Качество соединения с сниффером. Для нас значения не имеет.
FCS — проверка контрольной суммы.

Конец

Это упрощенное описание.

Более подробная информация в
IEEE Std 802.15.4
ZIGBEE SPECIFICATION
  • +2
  • 02 сентября 2012, 22:51
  • a9d

Комментарии (8)

RSS свернуть / развернуть
ZigBee довольно сильно похож на Ethernet

Хм, честно говоря, спорное утверждение. Ethernet это только физический и канальный уровень, а стек ZigBee покрывает уровни от физического до прикладного.

APS Dest Endpoint — Что именно означает это поле не понял.

ЕМНИП, APS Dest Endpoint позволяет адресовать конкретного «получателя» в рамках одного узла сети. На сетевом уровне поле NWK Dest. Address определяет адрес узла, а поле APS Dest Endpoint определяет «получателя» (индекс конечной точки) в рамках узла.

Если провести очень грубую аналогию со стеком TCP/IP, то данное поле (индекс конечной точки получателя) выполняет ту же функцию, что и номер порта TCP (TCP destination port).
0
  • avatar
  • e_mc2
  • 03 сентября 2012, 02:02
Чето-то не вкурил. А зачем вводить такую адресацию? Если у роута конечная точка находиться в списке, то он перекинет ей пакет напрямую и так.
0
  • avatar
  • a9d
  • 03 сентября 2012, 02:41
Мне кажется, вы путаете термины ZigBee End Device (ZED) и Endpoint.

Роутер маршрутизирует пакеты между узлами (устройствами), он оперирует сетевыми адресами узлов (End Device — это именно узел).

А вот каждый End Device может иметь несколько Endpoint. Endpoint – это некий логический «канал» в рамках узла (устройства).

Например, у нас одно устройство с адресом 0х0001 обслуживает 2 датчика. Чтобы как-то различать эти датчики используют Endpoint (например, первый датчик имеет Endpoint 0x01, второй 0x02).

По аналогии TCP/IP, End Device – это комп, который имеет свой IP адрес. Но на этом компе работает одновременно куча сетевых служб. Каждая служба слушает свой TCP порт – это аналог Endpoint. Чтобы обратиться к конкретной сетевой службе нужно знать IP адрес компа и порт, который она слушает. Аналогично в ZigBee, при «обычной» адресации нужно знать NWK Dest. Address и APS Dest Endpoint.

Это достаточно грубая аналогия, но в целом как-то так.
0
Все понял. Нашел картинку архитектуры стэка в спецификации. У каждого Application Object есть своя End Point.
0
  • avatar
  • a9d
  • 03 сентября 2012, 04:02
А классно они придумали. Идея с endpoint очень удобная. Можно каждому процессу назначить свой endpoint и общаться непосредственно с самим процессом. Очень удобная вещь.
0
  • avatar
  • a9d
  • 04 сентября 2012, 01:44
Угу. ZigBee вообще достаточно продуманный и удобный стандарт. Но он довольно сложен в реализации. Я как-то пытался написать свою реализацию стека, но забил на это дело где-то на середине :)
0
Ethernet это не только физика. Eth это первый и второй уровень сетевой модели — и канальный и сетевой уровень. Стандарт на Eth описывает огромное количество вспомогательных протоколов и механизмов — от .1Q VLANs до Spanning Tree.
0
Я не говорил, что Ethernet это только физика, я говорил «Ethernet это только физический и канальный уровень».

Eth это первый и второй уровень сетевой модели

Да, первый и второй, это и есть физический (1) и канальный (2) уровень. А вот сетевой уровень (3) это протоколы уровня IP, ICMP.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.