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.