blob: 437649d5efaac843f54f87332c0992d8191e3d24 [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 -07004.. toctree::
5 :maxdepth: 2
Alexander Afanasyev284257b2014-04-11 14:16:51 -07006
Alexander Afanasyev26181532014-05-07 23:38:51 -07007 RELEASE_NOTES
Alexander Afanasyev284257b2014-04-11 14:16:51 -07008
Alexander Afanasyev26181532014-05-07 23:38:51 -07009NDN Forwarding Daemon (NFD) is a network forwarder that implements and evolves together
10with the Named Data Networking (NDN) `protocol
11<http://named-data.net/doc/ndn-tlv/>`__. After the initial release, NFD will become a core
12component of the `NDN Platform <http://named-data.net/codebase/platform/>`__ and will
13follow the same release cycle.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070014
Alexander Afanasyev26181532014-05-07 23:38:51 -070015NFD is developed by a community effort. Although the first release was mostly done by the
16members of `NSF-sponsored NDN project team
17<http://named-data.net/project/participants/>`__, it already contains significant
18contributions from people outside the project team (for more details, refer to `AUTHORS.md
19<https://github.com/named-data/NFD/blob/master/AUTHORS.md>`__). We strongly encourage
20participation from all interested parties, since broader community support is key for NDN
21to succeed as a new Internet architecture. Bug reports and feedback are highly
22appreciated and can be made through `Redmine site
23<http://redmine.named-data.net/projects/nfd>`__ and the `ndn-interest mailing list
24<http://www.lists.cs.ucla.edu/mailman/listinfo/ndn-interest>`__.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070025
Alexander Afanasyev26181532014-05-07 23:38:51 -070026The main design goal of NFD is to support diverse experimentation of NDN technology. The
27design emphasizes *modularity* and *extensibility* to allow easy experiments with new
28protocol features, algorithms, and applications. We have not fully optimized the code for
29performance. The intention is that performance optimizations are one type of experiments
30that developers can conduct by trying out different data structures and different
31algorithms; over time, better implementations may emerge within the same design framework.
Alexander Afanasyev40ee3812014-07-01 00:25:21 -070032To facilitate such experimentation with the forwarder, the NFD team has also written a
33`developer's guide <http://named-data.net/wp-content/uploads/2014/07/NFD-developer-guide.pdf>`_,
34which details the current implementation and provides tips for extending all aspects of
35NFD.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070036
Alexander Afanasyev26181532014-05-07 23:38:51 -070037NFD will keep evolving in three aspects: improvement of the modularity framework, keeping
38up with the NDN protocol spec, and addition of other new features. We hope to keep the
39modular framework stable and lean, allowing researchers to implement and experiment
40with various features, some of which may eventually work into the protocol spec.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070041
Alexander Afanasyev26181532014-05-07 23:38:51 -070042The design and development of NFD benefited from our earlier experience with `CCNx
43<http://www.ccnx.org>`__ software package. However, NFD is not in any part derived from
44CCNx codebase and does not maintain compatibility with CCNx.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070045
Alexander Afanasyev284257b2014-04-11 14:16:51 -070046
Alexander Afanasyev26181532014-05-07 23:38:51 -070047Major Modules of NFD
48--------------------
Alexander Afanasyev284257b2014-04-11 14:16:51 -070049
Alexander Afanasyev26181532014-05-07 23:38:51 -070050NFD has the following major modules:
Alexander Afanasyev284257b2014-04-11 14:16:51 -070051
Alexander Afanasyev26181532014-05-07 23:38:51 -070052- Core
53 Provides various common services shared between different NFD modules. These include
54 hash computation routines, DNS resolver, config file, face monitoring, and
55 several other modules.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070056
Alexander Afanasyev26181532014-05-07 23:38:51 -070057- Faces
58 Implements the NDN face abstraction on top of different lower level transport
59 mechanisms.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070060
Alexander Afanasyev26181532014-05-07 23:38:51 -070061- Tables
62 Implements the Content Store (CS), the Pending Interest Table (PIT), the Forwarding
63 Information Base (FIB), and other data structures to support forwarding of NDN Data
64 and Interest packets.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070065
Alexander Afanasyev26181532014-05-07 23:38:51 -070066- Forwarding
67 Implements basic packet processing pathways, which interact with Faces, Tables,
68 and Strategies.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070069
Alexander Afanasyev26181532014-05-07 23:38:51 -070070 + **Strategy Support**, a major part of the forwarding module
71 Implements a framework to support different forwarding strategies. It includes
72 StrategyChoice, Measurements, Strategies, and hooks in the forwarding pipelines. The
73 StrategyChoice records the choice of the strategy for a namespace, and Measurement
74 records are used by strategies to store past performance results for namespaces.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070075
Alexander Afanasyev26181532014-05-07 23:38:51 -070076- Management
77 Implements the `NFD Management Protocol
78 <http://redmine.named-data.net/projects/nfd/wiki/Management>`_, which allows
79 applications to configure NFD and set/query NFD's internal states. Protocol interaction
80 is done via NDN's Interest/Data exchange between applications and NFD.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070081
Alexander Afanasyev26181532014-05-07 23:38:51 -070082- RIB Management
83 Manages the routing information base (RIB). The RIB may be updated by different parties
84 in different ways, including various routing protocols, application's prefix
85 registrations, and command-line manipulation by sysadmins. The RIB management module
86 processes all these requests to generate a consistent forwarding table, and then syncs
87 it up with the NFD's FIB, which contains only the minimal information needed for
88 forwarding decisions. Strictly speaking RIB management is part of the NFD management
89 module. However, due to its importance to the overall operations and its more complex
90 processing, we make it a separate module.