\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. There are several ways of achieving this:

\begin{itemize}
  \item The IP address is pre-selected by a human and stored in the device
    configuration. This process is cumbersome when more than one device needs to
    be configured, and humans have to remember which addresses are configured on
    which device, and which addresses are still free to use on additional
    devices.

  \item Deploying a central server that assigns network addresses
    to the devices in the network, which in order query the server (for example
    via broadcast or on a lower layer) for a unique address before they use the
    IP layer for the first time. This technique supersedes the dependency of
    human memory for mapping IP addresses to devices, and can easily be combined
    with additional central configuration management, like the automatic
    assignment of a static gateway, or a DNS resolver.\\
    The DHCP protocol is one example of central IP address management.

  \item A third alternative is the use of a distributed protocol which enables
    the devices on the network to choose addresses in accordance with other
    devices on the same network, so no IP address is used more than once. In
    respect to the Internet of Things, this approach has the advantage that
    those devices can easily be used in different scenarios without needing
    central deployment at all, and also allowing them to change their addresses
    dynamically, therefore easily reacting 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 built into every
    device.

\end{itemize}

\todo

\paragraph{IPv4 Link-Local Addressing}

Link-Local Addressing uses the IPv4 subnet 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 IPv6 Stateless
Addressing Autoconfiguration use an IPv6 address from the subnet fe80::/64.
Then, an \emph{interface identifier} is generated using the interface's MAC
address. Since MAC addresses must be unique in the network, a unique IPv6
address is obtained by combining the subnet prefix and the interface identifier.
To ensure that no other device exists with this generated IPv6 address, the
device performs \emph{Duplicate Address Detection} on the network through
\emph{Neighbor Advertisement} messages and listening for \emph{Neighbor
Solicitation} messages. If such messages are received from other hosts, the
configured address cannot be used by the device and must be discarded.
Therefore, in order to use IPv6 effectively, it must be guarranteed that MAC
addresses are unique on the network.

In contrast to IPv4 Link-Local Addressing, IPv6 Stateless Address
Autoconfiguration can also be used with a central server. In this case, a
central server broadcasts \emph{Router Advertisement} 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.

addressing

automatic address configuration via Zeroconf/APIPA (IPv4, \cite{rfc3927}) or
IPv6 stateless auto-configuration \cite{rfc4862}

\pages{1}

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