Как ETX (Estimated Transmissions) реализован в contikiRPL? - PullRequest
1 голос
/ 16 января 2020

Я работаю над созданием модифицированной версии MRHOF для RPL. Однако у меня есть некоторые сомнения относительно используемых метрик ETX. я запускаю пример rpl-udp (.... / contiki-3.0 / examples / ipv6 / rpl-udp) .

Насколько я понимаю, общее определение ETX следующее:

ETX = 1/(df * dr)

, где df - это измеренная вероятность того, что пакет данных успешно прибудет в получатель, а dr - вероятность успешного получения пакета ACK.

Реализация ETX определена в neighbor_link_callback(rpl_parent_t *p, int status, int numtx) (contiki / core / net / rpl / rpl-mrhof. c) как показано ниже:

new_etx = ((uint32_t)recorded_etx * ETX_ALPHA +(uint32_t)packet_etx * (ETX_SCALE - ETX_ALPHA)) / ETX_SCALE

где

  recorded_etx = nbr->link_metric 
  packet_etx = MAX_LINK_METRIC * RPL_DAG_MC_ETX_DIVISOR
  nbr->link_metric = RPL_INIT_LINK_METRIC * RPL_DAG_MC_ETX_DIVISOR    (rpl-dag.c)
  RPL_INIT_LINK_METRIC = 2                                            (rpl-conf.h)
  ETX_SCALE = 100
  ETX_ALPHA = 90
  RPL_DAG_MC_ETX_DIVISOR = 256                                        (rpl-private.h)
  MAX_LINK_METRIC = 10

Здесь каждый раз, когда канальный уровень получает ACK или событие тайм-аута, функция внутри этот файл (neighbour_link_callback) запущен.

Я понял формальное определение ETX, но когда я пытаюсь сопоставить стандартную формулу ETX с формулой ETX contikiRPL, то я сталкиваюсь с некоторыми проблемами в понимании реализации ETX в contikiRPL.

Как реализуется вероятность успешного получения пакета данных получателем (df) и вероятность успешного получения пакета ACK (dr) Тед в ContikiRPL?

1 Ответ

1 голос
/ 16 января 2020

В коде df и dr по отдельности не известны. Алгоритм запускается на устройстве-отправителе, которое не имеет возможности различать случай, когда пакет потерян, и случай, когда ACK потерян. Они выглядят точно так же, как отсутствие:

Значение packet_etx примерно соответствует 1 / (df * dr) последнего пакета . Обратите внимание, что в одном пакете уже может быть несколько повторных передач по ссылке. Метри c обновляется только тогда, когда пакет успешно подтвержден ACK или превышено максимальное количество повторных передач.

Другая проблема в Contiki заключается в том, что, поскольку он предназначен для встроенных систем, он не имеет памяти для следить за ETX многих недавних пакетов. Вместо этого эта информация агрегируется в одно значение с помощью фильтра экспоненциально взвешенного скользящего среднего (EWMA). Параметр \alpha алгоритма задан в коде как ETX_ALPHA / ETX_SCALE; масштабирование выполняется, чтобы избежать более дорогих операций с плавающей запятой.

Значение recorded_etx - это предыдущее значение ETX, отражающее ETX, вычисленное из всех предыдущих пакетов. Значение new_etx - это значение ETX канала, когда предыдущий ETX и ETX последнего пакета были объединены с алгоритмом ETX.

...