This article contains some frequently asked questions and answers about Thread, its underlying technologies, and its implementation OpenThread.
Q: What is Thread?
A: Open IP based Secure mesh networking protocol for IoT devices.
Q: Is there a Thread specification?
Thread is specified by the members of the Thread Group. The specification is available upon request at https://www.threadgroup.org/ThreadSpec
Q: What is Thread commissioning?
A: Thread standardized the way commissioning should work. This requires a dedicated device role to be accessible by the Thread network. This device is the commissioner.
The commissioner has a list of device credentials that are allowed to join the thread mesh. Joiner devices that have these credentials must authenticate themselves with the commissioner to be able to join.
Commissioners can be part of the thread mesh or external devices communicating with the thread mesh through a border router.
More info on commissioning in open-thread: https://openthread.io/guides/build/commissioning
Q: What is the RCP how is it different from an NCP?
A: While in the NCP design the core stack lives on the SoC this variant of the NCP design allows the core of OpenThread to live on the host processor with only a minimal MAC layer "controller" on the SoC with the Thread radio. The host processor typically doesn’t sleep in this design, in part to ensure the reliability of the Thread network. The advantage here is that OpenThread can utilize the resources on the more powerful processor.
More info can be found at https://openthread.io/platforms#platform_designs
Q: What is an IPv6 prefix and why do we care about it?
A: IP and consequently IPv6 prefixes define the valid address ranges of IP-based networks by setting the number of given bits indicated by, /8 - /16 - /64 - etc., to a fixed value from the 128-bit address value.
Example: Given the following prefix: 2000::/8 We know that the first 8 bits of the IPv6 addresses will always be: 0010 0000 (x20) which gives us the IP address range of: 2000:0000:0000:0000:0000:0000:0000:0000 - 20ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
It is recommended to ramp up on IPv6 which is described by the rfc2460 IETF standard before ramping up on Thread.
More info on OT addresses can be found at https://openthread.io/guides/thread-primer/ipv6-addressing
Q. Can a Thread network have multiple Leader devices?
A: Thread networks have only one Leader device at any given time but this leader device can dynamically change according to network needs and changes.
Q. What is the theoretical maximum of Thread devices in a single mesh network?
A: Thread supports 1 leader 32 routers and 511 end devices/routers. This means a theoretical maximum of 16385 devices in a single thread mesh network.
Q: What's the master key?
A: The knowledge of the master key allows the decryption of all network traffic inside a Thread mesh network.
It is mostly a randomly chosen 16-byte key that is usually shared with joining devices through the commissioning process or other out of band methods.
Q: What is the joiner passphrase?
A: The Joiner Passphrase or Joining Device Credential is a human-scaled passphrase for authenticating the new Joiner Device.
This passphrase is used to establish a secure session between the Commissioner and Joiner. It is usually shared with the commissioner using an out-of-band method.
Details: Length: 6-32 characters, encoding: base32-thread (0-9,A-Y excluding I,O,Q and Z for readability)
Q: Is the PSKd different from the Joiner Device Credential?
A: The Joiner Device Credential is referred to as the PSKd or Pre-Shared Key for the Device when specifically encoded in binary form.
Q: What is the PSKc?
A: Pre-Shared Key for the Commissioner is a derived key based on the commissioning credential which is used to establish the Commissioner Session.
Used to establish a secure session with a Border Agent. All devices in the Thread network store the PSKc.
Q: What is OpenThread?
A: This is an open-source implementation of Thread®. Google has released OpenThread to make the networking technology used in Google Nest products more broadly available to developers, in order to accelerate the development of products for the connected home and commercial buildings.
Q: Where can I get the OpenThread stack?
A: You can either get the OpenThread SDK as part of the Gecko SDK using Simplicity Studio V5 and it's built-in package manager OR get the raw OpenThread stack via Github: https://github.com/openthread/openthread.git
Q: What is the best way to start developing an OT application using Silicon Labs IC?
A: With Simplicity Studio 5, you can start with our project examples sleepy-demo-ftd / sleepy-demo-mtd. These examples are part of a 2 device demo where the sleepy-demo-ftd acts as a leader and the sleepy-demo-mtd joins the network as a Sleepy End Device.
Or if you prefer you can also run the OpenThread example projects using our SDK: (ot-cli-ftd, ot-cli-mtd, etc... )
Q: How do I do OTA in OpenThread?
A: OTA is not defined as part of OpenThread since Thread is a networking protocol, and OTA is an app-level feature.
Q. Does OTBR support MQTT?
A: Yes. Check out the OTBR example configuration with MQTT at https://github.com/osaether/otbr-mqtt-sn/blob/master/README.md
Q. Can we have a list of all devices and their roles in the thread network?
A: This topic deserves its own article but the short answer is: The tools in the Thread network exist to map out such a list to some extent but there is no single command from a single node that can do this.
Q. Does OpenThread support use with the Apple HomeKit?
Q. If there is no border router, then the devices can't get a global address, right?
A: The Border Router is required for Global IPv6 addresses in the Thread network.