\subsection{Address allocation}

Considering the TCP/IP protocol suite, in order to be able to communicate on the
IP layer, a device needs to configure one of its network interfaces with an IP
address that can be reached from the network that the device wants to connect
to. Letting the user choose and configure IP addresses manually is a cumbersome
when it comes to several devices. Deploying a central server for assigning IP
addresses automatically from a pre-configured address pool is possible (e.~g. by
using DHCP~\cite{rfc2131}), however, there is also the alternative
to use a distributed protocol which enables the devices on a network to choose
addresses in accordance with each other, so no IP address is used twice.

In respect to the Internet of Things, this decentralized approach has the
advantage that devices can easily be used in different deployments, even where
central infrastructures do not exist, and it also allows them to change their
addresses dynamically in order to react to changes in the network.

There are two major protocols which are used for dynamic configuration of IP
addresses. In the IPv4 world, Link-Local Addressing~\cite{rfc3927} is often
used, and in IPv6 networks, Stateless Address Autoconfiguration~\cite{rfc4862}
is a fundamental feature specified in the IPv6 protocol.

\paragraph{IPv4 Link-Local Addressing}

\term{Link-Local Addressing}, also known as \term{Automatic Private IP
Addressing (APIPA)} or \term{Zeroconf}, uses the IPv4 subnet
\code{169.254.0.0/16} for addressing. Every device first chooses a random
address from that address space.  Then it checks if the chosen address is used
by any other device on the network by probing the chosen address, which is
usually done using the ARP protocol. If the probing process results that the
address is not used on the network (e.~g.  no device returned an ARP response
during a random time interval), the device claims its chosen address and uses it
for communication on the IPv4 layer. If the chosen address is already used, the
device continues the process, subsequently choosing a new random address and
trying to claim it, until a free address has been found.

\paragraph{IPv6 Stateless Address Autoconfiguration}

Similar to IPv4 Link-Local Addressing, devices configured with \term{IPv6
Stateless Address Auto\-configuration} use an IPv6 address from the subnet
\code{fe80::/64}. First, a 64-bit \term{interface identifier} is generated,
which can be random, or based on the interface's MAC address. Most likely, this
interface identifier is unique in the network, so a unique IPv6 address is
obtained by combining the subnet prefix and the interface identifier.
Nonetheless, to ensure that no other device uses the generated IPv6 address, the
device performs \term{Duplicate Address Detection} on the network by
broadcasting its generated address with \term{Neighbor Advertisement} messages
and listening for \term{Neighbor Solicitation} messages. If such a message is
received from another hosts, the generated address cannot be used by the device
and must be discarded, and the address generation process is repeated until a
unique address has been found.

In contrast to IPv4 Link-Local Addressing, IPv6 Stateless Address
Autoconfiguration can also be used with a central server. In this case, the
server broadcasts \term{Router Solicitation} messages on the network
which contain a global network prefix. The hosts on the network can then use
that prefix instead to configure a global IPv6 address.

% vim: set ft=tex et ts=2 sw=2 :
