blob: db91a841eec38ef73f40322fde7b6f45253e6797 [file] [log] [blame]
Nick Gordonf3a9ecb2017-01-24 13:55:14 -06001\section{Introduction}
2\label{sec:intro}
3
4The Named-data Link State Routing protocol (NLSR) is an intra-domain routing protocol for Named Data Networking (NDN).
5It is an application level protocol similar to many IP routing protocols, but NLSR uses NDN's Interest/Data packets to disseminate routing updates.
6Although NLSR is designed in the context of a single domain, its design patterns may offer a useful reference for future development of inter-domain routing protocols.
7
8NLSR supports name-based routing in NDN, computes routing ranks for all policy-compliant next-hops which provides a name-based multi-path routing table for NDN's forwarding strategy,
9and ensures that routers can originate only their own routing updates using a hierarchical trust model.
10
11\subsection{NLSR Modules and Data Structures}
12\label{sec:modules}
13NLSR contains multiple modules that each contribute to the total realization of the protocol.
14Many of the modules interact with one another to trigger some behavior or to modify information in data structures.
15NLSR uses the following modules:
16\begin{itemize}
17\item \textbf{Hello Protocol} (Section~\ref{sec:hello-protocol}) - determines the status of neighboring routers using periodic Hello Interests and notifies other modules when neighbors' statuses change.
18\item \textbf{NSync} - provides LSDB synchronization by extending the ChronoSync protocol~\cite{chronosync}.
19\item \textbf{Sync Logic Handler} (Section~\ref{sec:sync-logic}) - handles sync update notifications from NSync by retrieving updated LSAs.
20\item \textbf{LSAs} (Section~\ref{sec:lsas}) - represent routing information published by the router.
21\item \textbf{LSDB} (Section~\ref{sec:lsdb}) - stores the LSA information distributed by other routers in the network.
22\item \textbf{Routing Table} (Section~\ref{sec:routing-table}) - calculates and maintains a list of next hops for each router in the network.
23\item \textbf{Name Prefix Table} (Section~\ref{sec:npt}) - stores all advertised name prefixes and their next hops.
24\item \textbf{FIB} (Section~\ref{sec:fib}) - maintains a shadow FIB which represents the intended state of NFD's FIB~\cite{NFD}.
25\item \textbf{Prefix Update Processor} - listens for dynamic prefix announcements to advertise or withdraw name prefixes.
26\end{itemize}
27
28\subsection{Protocol Overview}
29\label{sec:protocol-overview}
30
31NLSR is designed to accomplish three main tasks: (1) discover adjacent neighbors; (2) disseminate and synchronize topology, name prefix, and hyperbolic routing information; and (3) calculate a consistent routing table and populate NFD's FIB.
32The entire protocol is described in detail in the NLSR paper~\cite{NlsrTr}.
33
34\subsubsection{Discovering Neighbors}
35
36NLSR determines the adjacency status of neighboring routers using the Hello Protocol module (Section~\ref{sec:hello-protocol}).
37When the Hello Protocol detects a status change for a neighbor, it will ask the LSDB module (Section~\ref{sec:lsdb}) to update the router's advertised adjacency information.
38
39\subsubsection{Disseminating Routing Information}
40
41When one of a router's LSAs (Section~\ref{sec:lsas}) changes, the information of this change should be distributed to every other router in the network.
42The Sync Logic Handler module (Section~\ref{sec:sync-logic}) is used to notify the synchronization protocol of changes to the router's own LSAs as well as to learn of LSA changes from other routers in the network;
43the Sync Logic Handler module interfaces with NSync to perform the two tasks.
44
45When the Sync Logic Handler module learns of a new LSA, it will inform the LSDB module.
46The LSDB module will attempt to fetch the new LSA and will store it in the LSDB module's database if it can be retrieved.
47If the newly fetched LSA informs the router of previously unknown routing information, the LSDB module will inform other modules depending on the type of routing information:
48\begin{itemize}
49\item \textbf{Change in network topology} - the LSDB module will inform the Routing Table module (Section~\ref{sec:routing-table}), so the Routing Table module can calculate an up-to-date routing table.
50\item \textbf{Change in name prefix advertisement} - the LSDB module will inform the Name Prefix Table module (Section~\ref{sec:npt}), which will in turn notify the FIB module (Section~\ref{sec:fib}) in order to add or remove the changed name prefixes.
51\item \textbf{Change in hyperbolic coordinates} - the LSDB module will inform the Routing Table module (Section~\ref{sec:routing-table}), so the Routing Table module can calculate an up-to-date routing table.
52\end{itemize}
53
54\subsubsection{Calculating the Routing Table and Populating NFD's FIB}
55
56When the routing table is calculated by the Routing Table module, the computed next hops are passed to the Name Prefix Table module.
57The Name Prefix Table module will then further pass the next hops to the FIB module to update NLSR's expected state of NFD's FIB.
58The FIB module will then perform the registrations or unregistrations with NFD's FIB.\\
59
60A simplified diagram of NLSR's actions when receiving new routing information is shown in Figure~\ref{fig:system-interaction}.
61The remainder of this documentation will describe the purpose of and interaction between each module in more detail.
62
63\begin{figure}
64\center
65\includegraphics[width=\linewidth]{figures/system-interaction}
66\caption{Simplified Diagram of the Actions of NLSR's Modules}
67\label{fig:system-interaction}
68\end{figure}
69