Лавинная рассылка Mesh Bluetooth в беспроводных сетях датчика

Этот пример демонстрирует лавинную рассылку слоя сети в сети mesh Bluetooth, пользующейся Библиотекой Communications Toolbox™ для Протокола Bluetooth®. Лавинная рассылка является механизмом, в котором каждый входящий пакет отправляется через каждую исходящую ссылку кроме той, в которую это прибыло. Механизм лавинной рассылки изучен путем идентификации пути между источником и целевыми узлами через промежуточные релейные узлы. Этот пример также показывает, как выполнить симуляции Монте-Карло в сети mesh Bluetooth, чтобы получить числовые результаты, усредненные по нескольким итерациям.

Стек Mesh Bluetooth

Спецификация [1] Ядра Bluetooth включает Низкую энергетическую версию для беспроводных персональных сетей области с низкой ставкой, называемых Bluetooth низкой энергией (BLE) или Умным Bluetooth. Стек BLE состоит из Типового Профиля Атрибута (GATT), Протокол Атрибута (ATT), Протокол менеджера безопасности (SMP), Управление Логической ссылкой и Протокол (L2CAP) Адаптации, Слой Link (LL) и Физический уровень. BLE был добавлен к стандарту для низких энергетических устройств, генерирующих небольшие количества данных, такие как предупреждения уведомления, используемые в таких приложениях как домашняя автоматизация, здравоохранение, фитнес и Интернет вещей (IoT).

Профиль mesh Bluetooth [2] задает основные требования, чтобы реализовать сетевое решение mesh для BLE. Стек mesh расположен сверху базовой спецификации BLE и состоит из Слоя Модели, Слоя Модели Основы, доступа к Слою, Верхнему Транспортному уровню, Более низкому Транспортному уровню, Слою сети и Слою Несущей. Организация сети mesh Bluetooth включает крупномасштабные сети устройства в приложениях, таких как умная подсветка, промышленная автоматизация, организация сети датчика, отслеживание актива и много других решений IoT.

Два типа несущих, поддержанных mesh Bluetooth, рекламируют несущая GATT и несущая. Этот пример рассматривает только рекламную несущую. Фигура ниже показов mesh Bluetooth складывает по рекламной несущей.

Слой сети Mesh Bluetooth

Слой сети в основном ответственен за:

  • Передача верхнего уровня обменивается сообщениями по сети с помощью слоя несущей

  • Передача сообщений mesh

  • Сетевая безопасность уровня

Некоторые главные функциональности слоя сети показывают ниже.

Релейная функция: Для того, чтобы иметь надежный и эффективный механизм лавинной рассылки, стандарт mesh Bluetooth задает релейную функцию. Включенные узлы релейной функции могут ретранслировать сообщения mesh по сети. Это помогает в сокращении перегрузки канала по сравнению с традиционной лавинной рассылкой, где каждый узел ретранслирует полученное сообщение. Узлы могут включить или отключить релейную опцию на основе сетевых условий. Релейный узел (любой узел mesh, разрешающий релейную функцию), передает полученное сообщение в сети. Это помогает в расширении досягаемости сообщения mesh включить крупномасштабные сети.

Управляемая лавинная рассылка: профиль mesh Bluetooth [2] задает методы, чтобы оптимизировать операцию лавинной рассылки для эффективной сети. Это называется как управляемая лавинная рассылка. Главные методы, используемые в управляемой лавинной рассылке:

  • Кэш сообщения: Все узлы должны реализовать сетевой кэш сообщения. Кэш сообщения содержит все недавно замеченные сетевые сообщения. Если полученное сообщение, как находят, находится в кэше, то это отбрасывается.

  • TTL: время-к-живому (TTL) управляет количеством транзитных участков, сообщение передается в сети. Выбор оптимального значения TTL сохраняет энергию по сети. Если значение TTL в узле больше или равно 2, оно указывает, что сообщение, возможно, было передано и может быть передано. Значение TTL меньше чем 2, указывает, что сообщение, возможно, было передано, но не будет передано.

  • Heartbeat: сообщения Heartbeat периодически отправляются узлами. Это используется в качестве индикации узлам получения, что передающий узел жив. В узле получения оптимальное значение TTL для публикации сообщения к отправителю получено на сообщение heartbeat.

Сетевые Адреса: слой сети задает четыре типа адресов:

  • Неприсвоенный Адрес: неприсвоенный адрес указывает, что никакой адрес не был выделен узлу

  • Одноадресный Адрес: одноадресный адрес используется в уникальной идентификации узла

  • Адрес группы: адрес группы используется, чтобы идентифицировать группу узлов

  • Виртуальный адрес: виртуальный адрес представляет набор адресов назначения. Каждый виртуальный адрес логически представляет 128-битную метку UUID (Универсально Уникальный идентификатор)

В лавинной рассылке mesh Bluetooth слой сети играет важную роль. Все сетевые сообщения, полученные и переданные в слое сети, используют или рекламную несущую или несущую GATT. Реле и прокси показывают в справке слоя сети во включении крупномасштабных сетей mesh. Релейная функция используется к релейной/прямой сети PDUs, полученной узлом по рекламной несущей. Функция прокси используется к релейной/прямой сети PDUs, полученной узлом между GATT и рекламными несущими. В этом примере продемонстрирована лавинная рассылка mesh Bluetooth в беспроводной сети датчика, использующей рекламную несущую.

Проверяйте на установку пакета поддержки

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

Симуляция лавинной рассылки Mesh Bluetooth

Этот пример позволяет вам создавать и конфигурировать сеть mesh Bluetooth. Два сетевых сценария, каждый состоящий из пятидесяти сетей mesh узла создается, и некоторые из этих узлов сконфигурированы как реле. В каждом сценарии заданы источник и целевые пары узла и их соответствующие значения TTL. В первом сценарии идентифицированы пути между источником и целевыми узлами. Можно также визуализировать поток сообщений в сети со статистикой. Во втором сценарии являются отказавшими некоторые релейные и конечные узлы (любой узел в сети mesh). Кроме того, релейная опция некоторых релейных узлов также отключена. Симуляции показывают, что существует шанс наличия пути между выбранным источником и целевыми узлами, даже если часть промежуточного реле и конечных узлов перестала работать в сети.

Цели:

  • Создайте и сконфигурируйте сеть mesh

  • Визуализируйте лавинную рассылку сообщения

  • Выведите путь между выбранным источником и местом назначения

  • Отобразитесь статистика (отошлите Статистику Слоя сети в Каждом Узле) в каждом узле

Настройка:

  • Источник и целевые пары узла

  • Значение TTL для пакета, порожденного в каждом источнике

  • Релейные узлы

  • Не пройдено узлы

Результаты:

Создайте и сконфигурируйте сеть mesh:

Можно использовать helperBLEMeshNetworkNode и helperBLEMeshVisualizeNetwork для создания и визуализации сети mesh соответственно. Необходимо задать NumberOfNodes и NodePositionType в helperBLEMeshVisualizeNetwork. Значение по умолчанию для NodePositionType 'Сетка'. Можно также задать собственную сеть путем конфигурирования значения NodePositionType к 'UserInput' и положениям узла к Positions.

% Set random number generator seed to 'default'
sprev = rng('default');

% Number of nodes in the mesh network
totalNodes = 50;

% Initialize 'bleMeshNodes' vector with objects of type
% helperBLEMeshNetworkNode
bleMeshNodes(1, totalNodes) = helperBLEMeshNetworkNode;
% Configure mesh nodes
for idx = 1:totalNodes
    meshNode = helperBLEMeshNetworkNode;
    meshNode.Identifier = idx;
    meshNode.NetworkLayer.ElementAddresses = dec2hex(idx, 4);
    bleMeshNodes(idx) = meshNode;
end

% Load node positions
load('bleMeshNetworkNodePositions.mat');

% Create visualization objects for two scenarios
numberOfScenarios = 2;
% Initialize 'meshNetworkPlots' vector with objects of type
% helperBLEMeshVisualizeNetwork
meshNetworkPlots(1, numberOfScenarios) = helperBLEMeshVisualizeNetwork;
for idx = 1:numberOfScenarios
    meshNetworkPlots(idx) = helperBLEMeshVisualizeNetwork;
    meshNetworkPlots(idx).NumberOfNodes = totalNodes;
    % Set type of allocation 'Grid' | 'UserInput'
    meshNetworkPlots(idx).NodePositionType = 'UserInput';
    % Set node positions based on number of nodes (applicable for
    % 'UserInput'), in meters
    meshNetworkPlots(idx).Positions = bleMeshNetworkNodePositions;
    % Set vicinity range based on node positions, in meters
    meshNetworkPlots(idx).VicinityRange = 25;
    % Set title
    meshNetworkPlots(idx).Title = ...
        ['Scenario ' num2str(idx) ': Bluetooth Mesh Flooding'];
end

Сконфигурируйте параметры симуляции: параметры Симуляции сконфигурированы как показано ниже. Можно задать количество источника и целевых пар в сети с помощью srcDstPairs. Результаты симуляции содержат полученные пути, соответствующие каждому источнику и целевой паре. Можно также просмотреть статистику слоя сети в каждом узле. Однако в отображенном графике, можно визуализировать результаты для первых трех источников и целевых пар.

% Simulation time, in milliseconds
simulationTime = 600;

% Enable/disable visualization
enableVisualization = true;

% Source and destination pairs
srcDstPairs = [1 7; 13 29];

% TTL values for packet originated at each source node
ttl = [25; 25];

Симуляции: функции helperBLEMeshFloodingSimulation и helperBLEMeshFloodingSimulationResults запускают симуляцию и собирают результаты симуляции соответственно.

  • Сценарий один: В этом сценарии все эти пятьдесят узлов в сети активны. Некоторые из этих узлов выбраны как реле. График, показанный ниже подсветок соответствующие пути для каждого источника и целевой пары. Результаты, содержащие полученные пути, хранятся в scenarioOneResults.

% Relay nodes
relayNodeIDs = [3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 ...
    42 43 44 45 46 47 48 49];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [];

% Simulate the scenario
pathScenarioOne = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(1), ...
    simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ...
    enableVisualization);

% Scenario result
scenarioOneResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioOne)
scenarioOneResults =

  2x4 table

    Source    Destination        Path        NumberOfHops
    ______    ___________    ____________    ____________

       1           7         {1x9 double}         8      
      13          29         {1x7 double}         6      

  • Сценарий два: конфигурация сети изменена, чтобы продемонстрировать, что существует альтернативный путь между источником и целевыми узлами. В этом сценарии релейная опция отключена в узле 41. Принимая во внимание, что, узлы 3 и 43 удалены из сети. График, показанный ниже подсветок соответствующие пути для каждого источника и целевой пары. Результаты, содержащие полученные пути, хранятся в scenarioTwoResults.

% Relay nodes
relayNodeIDs = [4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 42 ...
    44 45 46 47 48 49];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [3, 43];

% Simulate the scenario
pathScenarioTwo = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(2), ...
    simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ...
    enableVisualization);

% Scenario result
scenarioTwoResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioTwo)
scenarioTwoResults =

  2x4 table

    Source    Destination        Path         NumberOfHops
    ______    ___________    _____________    ____________

       1           7         {1x11 double}         10     
      13          29         {1x8  double}          7     

Статистика слоя сети в каждом узле

Статистические данные слоя сети, полученные в каждом узле:

  • Количество сообщений передается от узла

  • Количество сообщений получено узлом

  • Количество приложения сообщения Rx т.е. сообщения рассматривается для последующей обработки в узле

  • Количество сообщений передается узлом

  • Количество сообщений пропущено в узле

Переменная statisticsAtEachNode рабочей области содержит совокупную сетевую статистику всех узлов для обоих сценарии. Однако для данного шанса симуляции, Вы видите сетевую статистику для максимума первых пяти узлов. Сетевые статистические данные для первых пяти узлов в сети:

statisticsAtEachNode = helperBLEMeshFloodingSimulationResults(bleMeshNodes);
statisticsForFirstFiveNodes = statisticsAtEachNode(1:min(5, totalNodes), :)
statisticsForFirstFiveNodes =

  5x6 table

    NodeID    TotalTxMsgs    TotalRxMsgs    TotalAppRxMsgs    TotalRelayedMsgs    TotalDroppedMsgs
    ______    ___________    ___________    ______________    ________________    ________________

      1            2              4               0                  0                   4        
      2            0              8               0                  0                   8        
      3            0              5               0                  2                   3        
      4            0             10               0                  4                   6        
      5            0              9               0                  4                   5        

Дальнейшее исследование

Метод Монте-Карло [3] используется в получении числовых результатов, усредненных по нескольким симуляциям. Симуляции Монте-Карло выполняются в сети mesh Bluetooth с помощью этих параметров конфигурации, чтобы анализировать вероятность доставки сообщений путем моделирования отказов узла.

% Source and destination nodes
srcDstPair = [16 12];

% TTL value for the message originated at the above source node
ttl = 25;

% Relay nodes
relayNodeIDs = [21 15 25 11 38 19 46 8 39 20 37 32 30 5 45 49 43 3 28 36 47 ...
    34 23 48 41 44 42 10 4];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [];

В каждой симуляции релейные узлы отключены случайным образом между источником и целевыми узлами, и соответствующий путь хранится. Эти симуляции запущены путем варьирования десяти тысяч seed для генератора случайных чисел. Статистические данные, наблюдаемые после выполнения симуляций Монте-Карло:

  • Вероятность доставки сообщений от источника до места назначения, когда релейные узлы перестали работать случайным образом в сети

  • Среднее число переходов необходимо между источником и целевыми узлами

  • Критические реле в наличии пути между источником и местом назначения

Для вышеупомянутой настройки вы видите результаты симуляции в файле MAT bleMeshMonteCarloResults.mat.

load('bleMeshMonteCarloResults.mat');
disp(['Probability of having a route between nodes ' num2str(srcDstPair(1)) ...
    ' and ' num2str(srcDstPair(2)) ' is: ' ...
    num2str(probabilityOfSuccess) '%']);
disp(['Average hop count between nodes ' num2str(srcDstPair(1)) ' and ' ...
    num2str(srcDstPair(2)) ' is: ' ...
    num2str(averageHopCount)]);
disp(['Apart from the vicinity nodes of node ' num2str(srcDstPair(1)) ...
    ' and node ' num2str(srcDstPair(2)) ', nodes [' num2str(criticalRelaysInfo{1:5, 1}') ...
    '] are the top five critical relays in having a path between them.']);
% Restore the previous setting of random number generation
rng(sprev);
Probability of having a route between nodes 16 and 12 is: 88.6428%
Average hop count between nodes 16 and 12 is: 8
Apart from the vicinity nodes of node 16 and node 12, nodes [39  37   8  38   4] are the top five critical relays in having a path between them.

Можно запустить/изменить helperBLEMeshMonteCarloSimulations скрипт (симуляция длительного периода) для генерации результатов через симуляции Монте-Карло.

Этот пример позволяет вам создать и сконфигурировать мультиузел сеть mesh Bluetooth и анализировать лавинную рассылку слоя сети. Чтобы изучить поведение лавинной рассылки, два сценария симуляции рассматриваются. В первом сценарии путь между источником и целевыми узлами идентифицируется и визуализируется путем выбора некоторых промежуточных узлов как релейных узлов. Во втором сценарии пропущены некоторые узлы (Реле и Конец), и релейная опция некоторых релейных узлов отключена. Полученные результаты показывают, что там существует путь между источником и целевыми узлами, даже если узлы (Реле и Конец) перестали работать случайным образом в сети.

Этот пример позволяет вам создавать свою собственную сеть mesh Bluetooth и визуализировать лавинную рассылку сети в нем со статистикой. Кроме того, можно также выполнить симуляции Монте-Карло в сети mesh Bluetooth, чтобы получить числовые результаты, усредненные по нескольким итерациям.

Приложение

Помощники, используемые в этом примере:

Выбранная библиография

  1. Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.0. https://www.bluetooth.com

  2. Специальная группа (SIG) Bluetooth. "Профиль Mesh Bluetooth". Версия 1.0. https://www.bluetooth.com

  3. Столица, L. и С. Улэм. "Метод Монте-Карло" Журнал американской Статистической Ассоциации. Издание 44, Номер 247, 1949, стр 335-341