Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 1 | NFD Overview |
| 2 | ============ |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 3 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 4 | NDN Forwarding Daemon (NFD) is a network forwarder that implements and evolves together |
Davide Pesavento | 9f6a7d9 | 2020-10-06 15:21:48 -0400 | [diff] [blame] | 5 | with the Named Data Networking (NDN) `protocol <https://named-data.net/doc/NDN-packet-spec/current/>`__. |
| 6 | Since the initial public release in 2014, NFD has been a core component of the |
| 7 | `NDN Platform <https://named-data.net/codebase/platform/>`__. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 8 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 9 | NFD is developed by a community effort. Although the first release was mostly done by the |
| 10 | members of `NSF-sponsored NDN project team |
Eric Newberry | 81a9a86 | 2016-12-27 22:59:27 -0700 | [diff] [blame] | 11 | <https://named-data.net/project/participants/>`__, it already contains significant |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 12 | contributions from people outside the project team (for more details, refer to `AUTHORS.md |
| 13 | <https://github.com/named-data/NFD/blob/master/AUTHORS.md>`__). We strongly encourage |
| 14 | participation from all interested parties, since broader community support is key for NDN |
| 15 | to succeed as a new Internet architecture. Bug reports and feedback are highly |
| 16 | appreciated and can be made through `Redmine site |
Eric Newberry | 81a9a86 | 2016-12-27 22:59:27 -0700 | [diff] [blame] | 17 | <https://redmine.named-data.net/projects/nfd>`__ and the `ndn-interest mailing list |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 18 | <http://www.lists.cs.ucla.edu/mailman/listinfo/ndn-interest>`__. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 19 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 20 | The main design goal of NFD is to support diverse experimentation of NDN technology. The |
| 21 | design emphasizes *modularity* and *extensibility* to allow easy experiments with new |
| 22 | protocol features, algorithms, and applications. We have not fully optimized the code for |
| 23 | performance. The intention is that performance optimizations are one type of experiments |
| 24 | that developers can conduct by trying out different data structures and different |
| 25 | algorithms; over time, better implementations may emerge within the same design framework. |
Alexander Afanasyev | 40ee381 | 2014-07-01 00:25:21 -0700 | [diff] [blame] | 26 | To facilitate such experimentation with the forwarder, the NFD team has also written a |
Davide Pesavento | 9f6a7d9 | 2020-10-06 15:21:48 -0400 | [diff] [blame] | 27 | `developer's guide <https://named-data.net/publications/techreports/ndn-0021-10-nfd-developer-guide/>`__, |
Alexander Afanasyev | 40ee381 | 2014-07-01 00:25:21 -0700 | [diff] [blame] | 28 | which details the current implementation and provides tips for extending all aspects of |
| 29 | NFD. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 30 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 31 | NFD will keep evolving in three aspects: improvement of the modularity framework, keeping |
| 32 | up with the NDN protocol spec, and addition of other new features. We hope to keep the |
| 33 | modular framework stable and lean, allowing researchers to implement and experiment |
| 34 | with various features, some of which may eventually work into the protocol spec. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 35 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 36 | The design and development of NFD benefited from our earlier experience with `CCNx |
| 37 | <http://www.ccnx.org>`__ software package. However, NFD is not in any part derived from |
| 38 | CCNx codebase and does not maintain compatibility with CCNx. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 39 | |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 40 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 41 | Major Modules of NFD |
| 42 | -------------------- |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 43 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 44 | NFD has the following major modules: |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 45 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 46 | - Core |
| 47 | Provides various common services shared between different NFD modules. These include |
| 48 | hash computation routines, DNS resolver, config file, face monitoring, and |
| 49 | several other modules. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 50 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 51 | - Faces |
| 52 | Implements the NDN face abstraction on top of different lower level transport |
| 53 | mechanisms. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 54 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 55 | - Tables |
| 56 | Implements the Content Store (CS), the Pending Interest Table (PIT), the Forwarding |
| 57 | Information Base (FIB), and other data structures to support forwarding of NDN Data |
| 58 | and Interest packets. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 59 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 60 | - Forwarding |
| 61 | Implements basic packet processing pathways, which interact with Faces, Tables, |
| 62 | and Strategies. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 63 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 64 | + **Strategy Support**, a major part of the forwarding module |
| 65 | Implements a framework to support different forwarding strategies. It includes |
| 66 | StrategyChoice, Measurements, Strategies, and hooks in the forwarding pipelines. The |
| 67 | StrategyChoice records the choice of the strategy for a namespace, and Measurement |
| 68 | records are used by strategies to store past performance results for namespaces. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 69 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 70 | - Management |
| 71 | Implements the `NFD Management Protocol |
Eric Newberry | 81a9a86 | 2016-12-27 22:59:27 -0700 | [diff] [blame] | 72 | <https://redmine.named-data.net/projects/nfd/wiki/Management>`_, which allows |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 73 | applications to configure NFD and set/query NFD's internal states. Protocol interaction |
| 74 | is done via NDN's Interest/Data exchange between applications and NFD. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 75 | |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 76 | - RIB Management |
| 77 | Manages the routing information base (RIB). The RIB may be updated by different parties |
| 78 | in different ways, including various routing protocols, application's prefix |
| 79 | registrations, and command-line manipulation by sysadmins. The RIB management module |
| 80 | processes all these requests to generate a consistent forwarding table, and then syncs |
| 81 | it up with the NFD's FIB, which contains only the minimal information needed for |
| 82 | forwarding decisions. Strictly speaking RIB management is part of the NFD management |
| 83 | module. However, due to its importance to the overall operations and its more complex |
| 84 | processing, we make it a separate module. |