在阅读 LoRaWAN 规范时,我肯定错过了一些东西,因为这似乎太糟糕了,难以置信。请告诉我我神志不清:)
当我有许多 OTAA 节点并且我无法弄清楚是什么会阻止它时,我的测试平台似乎会发生以下情况:
我的网络中的多个节点同时发出 JOIN REQUEST(这可能是偶然发生的,或者如果它们同时通电)
网关成功接收(至少)其中一个,并以分配 DevAddr 的 JOIN ACCEPT 响应,认为一个节点执行了加入请求
所有执行 JOIN REQUEST 的节点都会收到 ACCEPT 并认为 JOIN ACCEPT 是针对他们的,并且很乐意设置相同的接收到的 DevAddr
从这里开始,我们有几个节点都认为他们成功加入并且都认为他们是唯一的但具有相同的 DevAddr。不用说,系统会严重混乱。
阅读 LoRaWAN 规范,JOIN REQUEST 有一个节点唯一的 DevEUI、一个网络唯一的 AppEUI 和一个随机的 DevNonce(以防止重放攻击)。MIC 是根据这些和存储在节点中的秘密网络唯一 AppKey 计算得出的。
据我所知,JOIN ACCEPT 中没有从 JOIN REQUEST 派生的数据,因此在许多节点当前正在侦听 ACCEPT 的情况下,它不能被定向到特定节点。
它具有:AppNonce NetID DevAddr DLSettings RxDelay CFList,并使用网络唯一而非节点唯一的 AppKey 进行加密。MIC 只涉及这些值,因此也无济于事。
我本来希望 JOIN ACCEPT 至少包括作为 MIC 的一部分请求加入的 DevEUI,并且还包括 DevNonce。似乎两者都不包括。
是什么赋予了?OTAA 是否损坏?:)