Этот пример демонстрирует лавинную рассылку слоя сети в сети mesh Bluetooth, пользующейся Библиотекой Communications Toolbox™ для Протокола 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
Сетевая безопасность уровня
Некоторые главные функциональности слоя сети показывают ниже.
Релейная функция: Для того, чтобы иметь надежный и эффективный механизм лавинной рассылки, стандарт 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 узла создается, и некоторые из этих узлов сконфигурированы как реле. В каждом сценарии заданы источник и целевые пары узла и их соответствующие значения 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 передает i.e. сообщения рассматриваются для последующей обработки в узле
Количество сообщений передается узлом
Количество сообщений пропущено в узле
Переменная 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, чтобы получить числовые результаты, усредненные по нескольким итерациям.
Пример использует этих помощников:
helperBLEMeshNetworkNode: Создайте объект для узла mesh Bluetooth
helperBLEMeshNetworkLayer: Создайте объект для функциональности слоя сети mesh Bluetooth
helperBLEMeshNetworkPDU: Сгенерируйте сеть PDU mesh Bluetooth
helperBLEMeshNetworkPDUDecode: Декодируйте сеть PDU mesh Bluetooth
helperBluetoothQueue: Создайте объект для функциональности очереди Bluetooth
helperBLEMeshRetransmissions: Создайте объект для повторных передач в узле mesh Bluetooth
helperBLEMeshChannelMessage: Получите сообщение от канала сети mesh Bluetooth
helperBLEMeshPath: Выведите путь между источником и местом назначения в сети mesh Bluetooth
helperBLEMeshVicinityNodes: Получите узлы близости данного узла
helperBLEMeshGraphCursorCallback: Отобразитесь статистические данные узла по мыши наводят действие
helperBLEMeshVisualizeNetwork: Создайте объект для mesh Bluetooth сетевая визуализация
helperBLEMeshFloodingSimulation: Симулируйте сеть mesh Bluetooth
helperBLEMeshFloodingSimulationResults: результаты симуляции сети mesh Bluetooth
helperBLEMeshMonteCarloSimulations: симуляции Монте-Карло сети mesh Bluetooth
Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.0. https://www.bluetooth.com/.
Специальная группа (SIG) Bluetooth. "Профиль Mesh Bluetooth". Версия 1.0. https://www.bluetooth.com/.
Столица, Николас и С. Улэм. "Метод Монте-Карло". Журнал американской Статистической Ассоциации 44, № 247 (сентябрь 1949): 335–41. https://doi.org/10.1080/01621459.1949.10483310.