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