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