blob: cff18ce500fc8012e776d3d65c727d2bd8fa7713 [file] [log] [blame]
Alexander Afanasyev26181532014-05-07 23:38:51 -07001NFD Overview
2============
Alexander Afanasyev284257b2014-04-11 14:16:51 -07003
Alexander Afanasyev26181532014-05-07 23:38:51 -07004NDN Forwarding Daemon (NFD) is a network forwarder that implements and evolves together
Davide Pesavento9f6a7d92020-10-06 15:21:48 -04005with the Named Data Networking (NDN) `protocol <https://named-data.net/doc/NDN-packet-spec/current/>`__.
6Since the initial public release in 2014, NFD has been a core component of the
7`NDN Platform <https://named-data.net/codebase/platform/>`__.
Alexander Afanasyev284257b2014-04-11 14:16:51 -07008
Alexander Afanasyev26181532014-05-07 23:38:51 -07009NFD is developed by a community effort. Although the first release was mostly done by the
10members of `NSF-sponsored NDN project team
Eric Newberry81a9a862016-12-27 22:59:27 -070011<https://named-data.net/project/participants/>`__, it already contains significant
Alexander Afanasyev26181532014-05-07 23:38:51 -070012contributions 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
14participation from all interested parties, since broader community support is key for NDN
15to succeed as a new Internet architecture. Bug reports and feedback are highly
16appreciated and can be made through `Redmine site
Eric Newberry81a9a862016-12-27 22:59:27 -070017<https://redmine.named-data.net/projects/nfd>`__ and the `ndn-interest mailing list
Alexander Afanasyev26181532014-05-07 23:38:51 -070018<http://www.lists.cs.ucla.edu/mailman/listinfo/ndn-interest>`__.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070019
Alexander Afanasyev26181532014-05-07 23:38:51 -070020The main design goal of NFD is to support diverse experimentation of NDN technology. The
21design emphasizes *modularity* and *extensibility* to allow easy experiments with new
22protocol features, algorithms, and applications. We have not fully optimized the code for
23performance. The intention is that performance optimizations are one type of experiments
24that developers can conduct by trying out different data structures and different
25algorithms; over time, better implementations may emerge within the same design framework.
Alexander Afanasyev40ee3812014-07-01 00:25:21 -070026To facilitate such experimentation with the forwarder, the NFD team has also written a
Davide Pesavento9f6a7d92020-10-06 15:21:48 -040027`developer's guide <https://named-data.net/publications/techreports/ndn-0021-10-nfd-developer-guide/>`__,
Alexander Afanasyev40ee3812014-07-01 00:25:21 -070028which details the current implementation and provides tips for extending all aspects of
29NFD.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070030
Alexander Afanasyev26181532014-05-07 23:38:51 -070031NFD will keep evolving in three aspects: improvement of the modularity framework, keeping
32up with the NDN protocol spec, and addition of other new features. We hope to keep the
33modular framework stable and lean, allowing researchers to implement and experiment
34with various features, some of which may eventually work into the protocol spec.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070035
Alexander Afanasyev26181532014-05-07 23:38:51 -070036The 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
38CCNx codebase and does not maintain compatibility with CCNx.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070039
Alexander Afanasyev284257b2014-04-11 14:16:51 -070040
Alexander Afanasyev26181532014-05-07 23:38:51 -070041Major Modules of NFD
42--------------------
Alexander Afanasyev284257b2014-04-11 14:16:51 -070043
Alexander Afanasyev26181532014-05-07 23:38:51 -070044NFD has the following major modules:
Alexander Afanasyev284257b2014-04-11 14:16:51 -070045
Alexander Afanasyev26181532014-05-07 23:38:51 -070046- 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 Afanasyev284257b2014-04-11 14:16:51 -070050
Alexander Afanasyev26181532014-05-07 23:38:51 -070051- Faces
52 Implements the NDN face abstraction on top of different lower level transport
53 mechanisms.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070054
Alexander Afanasyev26181532014-05-07 23:38:51 -070055- 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 Afanasyev284257b2014-04-11 14:16:51 -070059
Alexander Afanasyev26181532014-05-07 23:38:51 -070060- Forwarding
61 Implements basic packet processing pathways, which interact with Faces, Tables,
62 and Strategies.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070063
Alexander Afanasyev26181532014-05-07 23:38:51 -070064 + **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 Afanasyev284257b2014-04-11 14:16:51 -070069
Alexander Afanasyev26181532014-05-07 23:38:51 -070070- Management
71 Implements the `NFD Management Protocol
Eric Newberry81a9a862016-12-27 22:59:27 -070072 <https://redmine.named-data.net/projects/nfd/wiki/Management>`_, which allows
Alexander Afanasyev26181532014-05-07 23:38:51 -070073 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 Afanasyev284257b2014-04-11 14:16:51 -070075
Alexander Afanasyev26181532014-05-07 23:38:51 -070076- 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.