blob: b13b59114bcab7c7b3c7aa6e0934942968b328eb [file] [log] [blame]
Alexander Afanasyev26181532014-05-07 23:38:51 -07001NFD Overview
2============
Alexander Afanasyev284257b2014-04-11 14:16:51 -07003
Davide Pesaventobf4c1312023-02-23 20:32:01 -05004NDN Forwarding Daemon (NFD) is a network forwarder that implements and evolves together with
5the Named Data Networking (NDN) `protocol <https://docs.named-data.net/NDN-packet-spec/current/>`__.
Davide Pesavento9f6a7d92020-10-06 15:21:48 -04006Since 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
Davide Pesaventobf4c1312023-02-23 20:32:01 -050010members of `NSF-sponsored NDN project team <https://named-data.net/project/participants/>`__,
11it already contains significant contributions from people outside the project team (for more
12details, refer to `AUTHORS.md <https://github.com/named-data/NFD/blob/master/AUTHORS.md>`__).
13We strongly encourage participation from all interested parties, since broader community
14support is key for NDN to succeed as a new Internet architecture. Bug reports and feedback
15are highly appreciated and can be made through our `Redmine site
Eric Newberry81a9a862016-12-27 22:59:27 -070016<https://redmine.named-data.net/projects/nfd>`__ and the `ndn-interest mailing list
Alexander Afanasyev26181532014-05-07 23:38:51 -070017<http://www.lists.cs.ucla.edu/mailman/listinfo/ndn-interest>`__.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070018
Alexander Afanasyev26181532014-05-07 23:38:51 -070019The main design goal of NFD is to support diverse experimentation of NDN technology. The
20design emphasizes *modularity* and *extensibility* to allow easy experiments with new
21protocol features, algorithms, and applications. We have not fully optimized the code for
Davide Pesaventobf4c1312023-02-23 20:32:01 -050022performance. The intention is that performance optimizations are one type of experiments
Alexander Afanasyev26181532014-05-07 23:38:51 -070023that developers can conduct by trying out different data structures and different
24algorithms; over time, better implementations may emerge within the same design framework.
Alexander Afanasyev40ee3812014-07-01 00:25:21 -070025To facilitate such experimentation with the forwarder, the NFD team has also written a
Davide Pesavento3bc8e192022-12-31 01:40:11 -050026`developer's guide <https://named-data.net/publications/techreports/ndn-0021-11-nfd-guide/>`__,
Alexander Afanasyev40ee3812014-07-01 00:25:21 -070027which details the current implementation and provides tips for extending all aspects of
28NFD.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070029
Alexander Afanasyev26181532014-05-07 23:38:51 -070030NFD will keep evolving in three aspects: improvement of the modularity framework, keeping
31up with the NDN protocol spec, and addition of other new features. We hope to keep the
32modular framework stable and lean, allowing researchers to implement and experiment
33with various features, some of which may eventually work into the protocol spec.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070034
Alexander Afanasyev26181532014-05-07 23:38:51 -070035The 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
37CCNx codebase and does not maintain compatibility with CCNx.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070038
Alexander Afanasyev284257b2014-04-11 14:16:51 -070039
Alexander Afanasyev26181532014-05-07 23:38:51 -070040Major Modules of NFD
41--------------------
Alexander Afanasyev284257b2014-04-11 14:16:51 -070042
Alexander Afanasyev26181532014-05-07 23:38:51 -070043NFD has the following major modules:
Alexander Afanasyev284257b2014-04-11 14:16:51 -070044
Alexander Afanasyev26181532014-05-07 23:38:51 -070045- 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 Afanasyev284257b2014-04-11 14:16:51 -070049
Alexander Afanasyev26181532014-05-07 23:38:51 -070050- Faces
51 Implements the NDN face abstraction on top of different lower level transport
52 mechanisms.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070053
Alexander Afanasyev26181532014-05-07 23:38:51 -070054- 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 Afanasyev284257b2014-04-11 14:16:51 -070058
Alexander Afanasyev26181532014-05-07 23:38:51 -070059- Forwarding
60 Implements basic packet processing pathways, which interact with Faces, Tables,
61 and Strategies.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070062
Alexander Afanasyev26181532014-05-07 23:38:51 -070063 + **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 Afanasyev284257b2014-04-11 14:16:51 -070068
Alexander Afanasyev26181532014-05-07 23:38:51 -070069- Management
70 Implements the `NFD Management Protocol
Davide Pesavento3bc8e192022-12-31 01:40:11 -050071 <https://redmine.named-data.net/projects/nfd/wiki/Management>`__, which allows
Alexander Afanasyev26181532014-05-07 23:38:51 -070072 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 Afanasyev284257b2014-04-11 14:16:51 -070074
Alexander Afanasyev26181532014-05-07 23:38:51 -070075- 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.