Nick Gordon | f3a9ecb | 2017-01-24 13:55:14 -0600 | [diff] [blame^] | 1 | \section{Introduction} |
| 2 | \label{sec:intro} |
| 3 | |
| 4 | The Named-data Link State Routing protocol (NLSR) is an intra-domain routing protocol for Named Data Networking (NDN). |
| 5 | It is an application level protocol similar to many IP routing protocols, but NLSR uses NDN's Interest/Data packets to disseminate routing updates. |
| 6 | Although 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 | |
| 8 | NLSR 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, |
| 9 | and 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} |
| 13 | NLSR contains multiple modules that each contribute to the total realization of the protocol. |
| 14 | Many of the modules interact with one another to trigger some behavior or to modify information in data structures. |
| 15 | NLSR 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 | |
| 31 | NLSR 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. |
| 32 | The entire protocol is described in detail in the NLSR paper~\cite{NlsrTr}. |
| 33 | |
| 34 | \subsubsection{Discovering Neighbors} |
| 35 | |
| 36 | NLSR determines the adjacency status of neighboring routers using the Hello Protocol module (Section~\ref{sec:hello-protocol}). |
| 37 | When 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 | |
| 41 | When 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. |
| 42 | The 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; |
| 43 | the Sync Logic Handler module interfaces with NSync to perform the two tasks. |
| 44 | |
| 45 | When the Sync Logic Handler module learns of a new LSA, it will inform the LSDB module. |
| 46 | The LSDB module will attempt to fetch the new LSA and will store it in the LSDB module's database if it can be retrieved. |
| 47 | If 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 | |
| 56 | When the routing table is calculated by the Routing Table module, the computed next hops are passed to the Name Prefix Table module. |
| 57 | The 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. |
| 58 | The FIB module will then perform the registrations or unregistrations with NFD's FIB.\\ |
| 59 | |
| 60 | A simplified diagram of NLSR's actions when receiving new routing information is shown in Figure~\ref{fig:system-interaction}. |
| 61 | The 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 | |