
	     Status of the DTN2 Reference Implementation
	     ===========================================

This document describes the general features of this implementation
and summarizes the relationship between the implementation and the
various Internet Drafts that describe Delay Tolerant Networking, the
Bundle Protocol, and other related protocols.

The current version of the code is based on the Bundle Protocol
Specification Internet Draft version 4, and the Delay Tolerant
Networking Architecture Internet Draft version 4, both released in
December of 2005.

A copy of these documents can be obtained from:
http://www.ietf.org/internet-drafts/draft-irtf-dtnrg-bundle-spec-04.txt
http://www.ietf.org/internet-drafts/draft-irtf-dtnrg-arch-04.txt


			 The Bundle Protocol
			 -------------------

The features described in the bundle protocol specification that are
implemented include the following:

- The Basic Bundle Protocol
- Self Describing Numeric Values
- Endpoint Identifiers (more information below)
- Bundle expirations (based on timers)
- Registrations (with expiration timers)
- Persistent storage of bundles
- Bundle fragmentation (proactive and reactive)
- Bundle fragment reassembly
- Bundle Status Reports:
  - Received
  - Forwarded 
  - Delivered
  - Deleted

The features that are not yet implemented include:

- Custody Transfer
- Bundle Status Reports:
  - Acknowledged by Application 
  - Custody Acceptance

Unfortunately, this particular document went through some late changes
after the bulk of this implementation was completed, so there are some
minor discrepancies between the specification and qthe code. This
shortcoming will be addressed in the next release.


			  Convergence Layers
			  ------------------

The following Convergence Layers have been implemented. As of yet
there are no Internet Drafts or other specification documents that
describe these protocols. 

-- TCP Convergence Layer

The TCP convergence layer offers a reliable communication channel
between DTN nodes. All bundle communication is unidirectional, thus
two neighboring nodes will need to maintain two TCP connections, one
in each direction) to exchange bundle data.

The protocol returns an acknowledgement message when part or all of
the bundle is received. These acknowledgements allowing the sender
side to determine whether or not the bundle can be removed from the
data store. Also, the partial acknowledgements are used to implement
reactive fragmentation.

The protocol has (newly added) support for pipelining bundles, that
is, having more than one bundle being sent over the wire at a given
time. This support aims to address problems on long-delay links.

The protocol also has support for connection by the receiver side.
This is intended for situations where one of a pair of DTN nodes is
sitting behind a firewall or NAT box such that the other side cannot
initiate a connection to the node.

-- UDP Convergence Layer

The UDP convergence layer offers a simple, unreliable channel. A
single bundle is sent in each UDP datagram, thus only bundles that are
smaller than the 64KB maximum datagram size can be sent. It is assumed
that configuration will be put in place to proactively fragment large
bundles before sending them over this type of link.

-- Ethernet Convergence Layer

This convergence layer sends bundles over raw ethernet frames, using
an invented ethernet type code (0xd710). As with the UDP CL, there is
a maximum size of bundles that can be sent over this type of link,
in this case 1518 bytes.

This convergence layer also includes support for neighbor discovery
through the use of periodic beacon packets.

** Note -- this support is currently disabled for lack of testing. It
   is intended to be re-enabled in a future release.
   

			 Link / Contact Types
			 --------------------

As described by the DTN architecture document, there are four general
types of links:

-- Always On

These links are opened immediatly on configuration, and underlying
transport connections (if any) are maintained open whenever possible.

-- On Demand

These links are opened when there is a bundle (or bundles) that the
router determines should be sent over the link. There is a
configurable idle timer that closes the link after a period of
inactivity.

-- Opportunistic

These links are only opened in response to some external event, such
as detection of a nearby node. Currently, there is only limited
support for neighbor discovery.

-- Scheduled

No support for scheduled links is yet implemented.


			       Routing
			       -------

The implementation offers an interface by which new routing algorithms
and modules can be easily added to the system. To date, however, the
only fully implemented algorithm is a simple static router that
requires manual configuration of routes. 

We intend for this to be an area of future development, with more
routing frameworks added in upcoming release(s).


			 Endpoint Identifiers
			 --------------------

This implementation contains a rich framework for naming based on URI
schemes. The following schemes are supported:

-- DTN scheme

We currently implement a (unspecified) scheme of "dtn". This scheme
offers support for internet hostname style node specifications, along
with URI path style demultiplexers, as well as simple pattern matching
for route entries.

An example DTN uri is dtn://thing1.dtnrg.org.dtn/mail

-- String scheme

A simple scheme used for testing allows any ASCII string to be encoded
in a URI. An example is str:my_name_is_mike

-- Ethernet scheme

This scheme encodes ethernet addresses in a URI format. An example
ethernet scheme URI is eth://01:23:45:ab:cd:ef


======================================================================

Last updated: December 16, 2005
