What are the differences of  IPv6 address in Thread network?


When a device joined a Thread network, we can type CLI command "info" in console to get the following info of this node.



network status: 0x03
eui64: >000B57FFFE315B35
network id: br-2BCB
node type: 0x02
extended pan id: >34F48C11FEC2D244
pan id: 0xED1B
channel: 24
radio tx power: 4 dBm
ula prefix: fd44:d2c2:fe11::/64
local ip 0: fd44:d2c2:fe11:0:9624:c64:2d70:45
local ip 1: fe80::cc82:af87:fe43:5177
local ip 2: 2001:db8:385:9318:55af:f90b:971b:b154



What are the differences of  these three local IP addresses?


* IP 0 contains the mesh-local 64 address of the node.
* IP 1 contains the link-local 64 address of the node.
* IP 2 and greater will return any global unicast addresses (GUAs) of this node.



Mesh-Local is for sending a message anywhere on the entire mesh.Thread uses mesh-local addresses to reach Thread interfaces within the same Thread Network Partition.


Link-Local is nodes within a single hop. Thread uses link-local addresses to reach Thread interfaces within range of a single radio transmission. Thread devices use link-local addresses to discover neighbors, configure links, and exchange routing information. A Thread device MUST assign a link-local IPv6 address where the interface identifier is set to the MAC Extended Address with the universal/local bit inverted. 


Global Unicast Address is assigned by the Border Router so this is generally used from outside the mesh. Thread interfaces MAY assign additional IPv6 unicast addresses for valid prefixes assigned to the Thread Network. Such addresses can be used to enable communication with devices outside the Thread Network Partition.


This is briefly explained in network-management.h and please refer to Thread specification for more information.


  • ZigBee and Thread
  • Thread SDK
  • Knowledge Base Articles