\subsection{Extensions to the DNS protocol}

\subsubsection{Multicast DNS}

\term{Multicast DNS}~\cite{rfc6762} (mDNS) describes an extension of the Domain
Name System that allows DNS resource records to be distributed on multiple hosts
in a network, therefore avoiding the need of a central server.

Software that supports resolution of mDNS records listens on the reserved
link-local multicast address \code{224.0.0.251} (for IPv4 queries) or
\code{FF02::FB} (for IPv6 queries) on UDP port 5353 for incoming queries.
Queries sent to those multicast address and port are standard DNS queries, and
if a host receiving a query knows about the queried resource, it responds to the
querying host with a standard DNS response. The querying host can then simply
finish and use the result, or wait until other hosts respond to its query. The
latter is typically the case when querying for \code{SRV} records to obtain a
list of services which are present in the network.

Another feature of Multicast DNS is the reduction of traffic through
\term{Known-Answer Suppression}. It allows a querying host to specify already
known resources in its query when querying resources that could exist on more
than one host (e.~g., SRV records). The hosts matching those resources then do
not generate a response.

Finally, hosts may also send unsolicited responses. This can be used to notify
the network of new services available on a host.

\pages{1}

\subsubsection{DNS-Based Service Discovery}\label{sec:dnssd}

As a recent extension for the Domain Name System, \term{DNS-Based Service
Discovery (DNS-SD)}~\cite{rfc6763} uses DNS records of type
\code{SRV}~\cite{rfc2782} and \code{PTR} in a way that allows hosts to browse
for services in a domain. As an example, Figure~\ref{fig:dnssd} shows the
process of browsing for all XMPP clients in the domain \code{example.org}.
This is a two-step process, consisting of \term{Service Instance Enumeration}
and \term{Service Instance Resolution}.

\begin{figure}[htop]
  \centering
  \includegraphics[width=0.9\textwidth]{dnssd-mock.jpg}
  \caption{DNS-SD: Service Instance Enumeration and Resolution}
  \label{fig:dnssd}
\end{figure}

\paragraph{Service Instance Enumeration} At first, to enumerate the available
services in a domain for a given protocol, a DNS-SD-enabled client queries
resources of type \code{PTR} of the form \code{\_service.\_proto.domain}. The
result of this query is then a list of \term{instance names} of the form
\code{name.\_service.\_proto.domain} which provide the specified service. For
example, in Figure~\ref{fig:dnssd}, all XMPP clients in the domain
\code{example.org} are enumerated, and as a result, the instance names of three
hosts are returned.

\paragraph{Service Instance Resolution} As a second step, the returned instance
names are resolved as \code{SRV} records to retrieve the actual host names and
port numbers of a service. In the example, resolution of one instance name shows
that an XMPP client is running at host \code{juliet.example.org} on port 5222.

Through the usage of \code{SRV} records, it is easily possible for a service to
inform clients about non-standard port numbers, and especially in connection
with Multicast DNS makes it easy to deploy decentralized systems for the
Internet of Things~\cite{Klauck:2012:BCC:2352852.2352881}.

\pages{1}
% vim: set ft=tex et ts=2 sw=2 :
