Link Search Menu Expand Document

What is DTN?

Delay and Disruption Tolerant Networking (DTN) is an architecture that employs an overlay network for the purpose of overcoming stressed network environments with frequent disruptions, disconnections, and extended delays.

The DTN architecture defines a DTN node as a device which implements a message oriented overlay called the “bundle layer” located below the appliction layer and above the network layer. This overlay is responsible for reliably delivering messages in a store-and-forward fashion by utilizing persistent storage and can optionally provide end-to-end acknowledgements.

What is OpenDTN?

OpenDTN is a delay and disruption tolerant Linux kernel network implementation which integrates the Bundle Protocol (BP) of the DTN architecture along with various convergence layer modules (CLM) for the purpose of sending, receiving, and routing messages between various interconnected networks. The seperation of mechanism and policy is reflected in the protocol implementation supported by the Linux kernel networking infrastructure and the administrative, persistent, and UAPI components found in user space.

The DTN protocols, RFC-5050 based, are accessed through the Berkeley Software Distribution (BSD) socket interface, commonly referred to as the POSIX API and is an out-of-tree kernel module implementation which requires minor patching to the kernel.

OpenDTN aims to provide an alternative general purpose implementation that complies with the consensus of contributors from the IETF and DTNWG’s.

OpenDTN Architecture

The following component diagram shows the split of mechanism and policy between user space and kernel space as it relates to BP over a UDPCL adapter.

Concept

Bundle Protocol and Convergence Layer Support

The main protocol component of OpenDTN is the opendtn_bp kernel module which contains the Bundle Protocol (BP) implementation along with other features such as proxy support. Lower layer kernel modules contain specific convergence layer (CL) support such as opendtn_udpcl which handles the UDP convergence layer. As opendtn_udpcl becomes stable, other convergence layers will follow.

Routing

Bundles that are exchanged and/or stored are done so by the opendtnd bundle node. This process is a daemon that acts like a router to manage bundles between application agents and the DTNet. opendtnd can be managed interactivly using an embedded TCL interpreter or with a configuration file upon startup. The latter is the intention with Android devices.

Storage

Bundles that are in the process of being forwarded are persisted in a transactional database in user space, namely, LevelDB. LevelDB is an on-disk key-value store using the BSD License for the purpose of storing bundles.

Userspace

Components used to perform configuration and administrative tasks, routing to endpoints, and bundle storage are located in userspace. The following diagram shows the interconnections between these components.

Concept

Libraries

libopendtn_commons
A library containing general support for all processes.
libopendtn_ipc
A library containing the domain socket implementation shared between opendtnd and odtnctl.
libopendtn_net
A library containing the shared message protocols to include de/serialization between the opendtnd and odtnctl processes.
libopendtn_uapi
An application level userspace library for communicating with the opendtnd, a.k.a., the bundle protocol agent or bundle node.
libOpendtnTcl
A library to support the embedded interperter, odtnctl, and may also function as a TCL extension. This library contains all of the TCL commands used in interfacing with opendtnd.