\term{Multicast DNS}~\cite{rfc6762} (mDNS) describes an extension to the Domain
Name System that allows DNS resource records to be distributed on multiple hosts
in a network, therefore avoiding central authorities and enabling every host to
-publish its own entries.
+publish its own entries. For that purpose, a special domain, usually
+named \code{.local}, is used.
-Software that supports resolution of mDNS records listens on the reserved
+Software that supports mDNS 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.
This is a two-step process, consisting of \term{Service Instance Enumeration}
and \term{Service Instance Resolution}.
-\begin{figure}[htop]
+\begin{figure}[top]
\centering
\includegraphics[width=0.9\textwidth]{dnssd-mock.jpg}
\caption{DNS-SD: Service Instance Enumeration and Resolution
\input{address-allocation.tex}
\input{dns-extensions.tex}
\input{xmpp.tex}
-
-\section{System Architecture of Chatty Things}
-\todo
-\pages{3}
-\subsection{Service Provisioning Sublayer}
-\subsection{Bootstrapping}
-\subsection{Presence Subscription}
+\input{sec-chatty-things.tex}
\section{Related Approaches}
\todo
\cite{xep-0045}
-\subsubsection{Publish/Subscribe and the Roster}
+\subsubsection{Publish/Subscribe, Presence and the Roster}
\cite{xep-0060}
-\subsubsection{Presence}
-
-\cite{rfc6120}
+\cite{rfc6121}
\subsubsection{XMPP Serverless Messaging}
\todo
-\cite{xep-0174} \pages{1}
+
+To overcome the need for a central server and authentication, XMPP Serverless
+Messaging~\cite{xep-0174} allows XMPP clients on a network to build a
+peer-to-peer mesh network and chat directly with each other. This feature was
+first introduced by Apple as part of their \term{Bonjour} project, and nowadays
+it is also available in many other XMPP clients.
+
+With XMPP Serverless Messaging, XMPP clients simply open a port on the host, and
+then rely on mDNS and DNS-SD (see Section~\ref{sec:dns})
+to publish instance names in the domain \code{\_presence.\_tcp.local}. For
+example, if Juliet uses her machine (named \code{capulet}) with serverless
+messaging, her client would publish the following four mDNS records:
+
+\begin{itemize}
+ \item an A record \code{capulet.local}, specifying her IP address,
+ \item an SRV record \code{juliet@capulet.\_presence.\_tcp.local}, specifying
+ the port on which her XMPP client listens, and refering to
+ \code{capulet.local} as the host name
+ \item a PTR record \code{\_presence.\_tcp.local} for service discovery,
+ pointing to \code{juliet@capulet.\_presence.\_tcp.local}
+ \item and a TXT record \code{juliet@capulet.\_presence.\_tcp.local} specifying
+ more information about her (e.~g. her online status, contact data, etc.)
+\end{itemize}
+
+When other clients in the same network enumerate the available services by
+querying \code{\_presence.\_tcp.local}, they notice Juliet's presence and add
+her to the roster automatically. In that way, XMPP users can see who is
+currently available for communication. To start a chat session, clients initiate
+a TCP connection over the advertised ports, open their XML streams, and send
+message or IQ stanzas like they would to an XMPP server. Presence is managed
+over the corresponding TXT record in the mDNS. To go offline, a client
+announces the deletion of its mDNS records.
+
+\pages{1}
% vim: set ft=tex et ts=2 sw=2 :