A Weave fabric is a collection of Weave-enabled resources. It provides a convenient way for Weave nodes in a user's home to exchange messages in a secure way.
The fabric is provisioned by the first node in the Weave system. Once provisioned, other nodes can securely join the fabric using Weave certificates. We'll get more into certificates and security later, but remember, device pairing and fabric joining in Weave is always secure.
Each resource in the fabric is assigned a special IPv6 address for use by the Weave application. It doesn't matter what routable wireless technology you use. Ethernet, Wi-Fi, or Thread—as long as each node is running Weave and is a member of the fabric, messages may be sent and received.
Example
Suppose you have a simple Home Area Network (HAN) that consists of resources connected by both Wi-Fi and Thread. These two networks are joined together by a border router, which participates in both networks and acts as a router to route traffic between them.
The resources in each network use their standard IP routing configurations to talk to each other through transport protocols such as UDP or TCP, but with a Weave fabric provisioned, they can now pass Weave messages over those same transports.
IPv6 addressing
A Weave fabric enables simple IPv6 routing across Weave applications by assigning a Unique Local Address (ULA)
to each resource in the fabric. The Weave application uses this address to route Weave messages.Here's an example of a node's IPv6 Weave address:
fd00::fab1:2:3e36:13ff:fe33:732e
Let's go through the different elements that make up the address.
Global Prefix
All Weave nodes use an IPv6 global prefix of fd00::/48
. Addresses in this
block are designated by the IETF in
RFC-4193 for use within private networks
such as a HAN.
Fabric ID
The fabric is assigned a randomly generated, unique 64-bit ID during fabric provisioning. This ID becomes part of the IPv6 global prefix.
For example, if a fabric is assigned a Fabric ID of fab1
, the fabric's global
prefix becomes:
fd00:0000:fab1::/48
Node ID
Each node in the fabric assigns itself a Weave Node ID, which takes the form of an IEEE Extended Unique Identifier (EUI-64). Most nodes derive their Node ID from their MAC address. A node may have a 48-bit or 64-bit MAC address, usually associated with their WiFi or 802.15.4 interfaces, respectively. Weave prefers to use the 64-bit value as the Node ID, when available.
If a node only has a 48-bit MAC address, per RFC
4291, Weave inserts the 16-bit
value of FF:FE
in the middle to create the EUI-64 value, which is used as the
Weave Node ID.
For example, if the node's MAC address is the 48-bit 3c:36:13:33:73:2e
, the
resulting Weave Node ID is 3c3613fffe33732e
.
To use the Node ID in an IPv6 address, you must transform it into an Interface
Identifier by flipping the seventh bit, called the universal/local bit. Thus a
Node ID of 3c3613fffe33732e
becomes an Interface Identifier of
3e3613fffe33732e
.
Subnet
The last piece of the Weave IPv6 address is the subnet, a 16-bit value used to identify network interfaces. These values are determined by the underlying networks. For example, Wi-Fi or Thread.
For this example, let's say our subnet is 0x0002
.
Putting it all together
Putting all the above elements together give you a Weave IPv6 address:
With a resource joined to the fabric, Weave profiles can now pass messages between it and other resources in the fabric via the node's Weave-assigned IPv6 address. Next we'll look at the basics of messaging in Weave.
Recap
What you learned:
- A fabric is a collection of Weave-enabled resources that cooperate to provide services to the user and the structure
- Resources are always authenicated and securely joined to a fabric
- Each resource in a fabric is assigned an IPv6 Unique Local Address for use by Weave
- Weave messages are passed between those IPv6 addresses regardless of underlying wireless technology or transport