diff -r 000000000000 -r 2b3e5ec03512 doc/manual/cl-norm.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/manual/cl-norm.html Thu Apr 21 14:57:45 2011 +0100 @@ -0,0 +1,359 @@ + + + DTN2 Manual: NORM Convergence Layer + + + +

NORM Convergence Layer +

+ +

+A Nack-Oriented Reliable Multicast (NORM) convergence layer. The NORM protocol is designed to provide end-to-end reliable transport of bulk data objects or streams over generic IP multicast routing and forwarding services. NORM uses a selective, negative acknowledgement (NACK) mechanism for transport reliability and offers additional protocol mechanisms to conduct reliable multicast sessions with limited "a priori" coordination among senders and receivers. A congestion control scheme is specified to allow the NORM protocol fairly share available network bandwidth with other transport protocols such as Transmission Control Protocol (TCP). +

It is capable of operating with both reciprocal multicast routing among senders and receivers and with asymmetric connectivity (possibly a unicast return path) from the senders to receivers. The protocol offers a number of features to allow different types of applications or possibly other higher level transport protocols to utilize its service in different ways. The protocol leverages the use of FEC-based repair and other IETF reliable multicast transport (RMT) building blocks in its design. Norm sessions persist across link down/up events in order to take full advantage of the built-up tx cache used to satisfy repair requests. + +

Common Configurations +

---------------------

+ +

Here are some basic examples to get you started. The full list of link:w + +parameters are summarized in the next section. + +

Assume DTN nodes A, B, and C can communicate over an IP network. +

+ + + + + + +
EID +IPv4 Address + +
dtn://node_a +10.1.101.1 + +
dtn://node_b +10.1.102.1 + +
dtn://node_c +10.1.103.1 + +
dtn://node_d +10.1.104.1 +
+

Point-to-point link A <-> B

+ +

Below are the "link add" directives for an always-on unicast link between +nodes A and B. Congestion control is enabled (cc) with a maximum tx rate +of 230Kbps. "ack" places the remote node in the acking_list; positive +acknowledgment is expected after zero of more nack-based repair cycles. +"ack" may reduce the number of flush messages. +

+

Node A configuration +

link add link_to_b 10.1.102.1:4557 ALWAYSON norm remote_eid=dtn://node_b cc ack rate=230000 +

Node B configuration +

link add link_to_a 10.1.101.1:4557 ALWAYSON norm remote_eid=dtn://node_a cc ack rate=230000 + +

One-to-many multicast A -> B,C,D

+ +

For a one-to-many multicast link, use "link add" on the node sourcing data and +use "interface add" on the sink nodes. The Node A "acking_list" requests postive +acknowledgments from Nodes B and C (after zero or more nack-based repair +cycles). Delivery to Node D may not succeeed because it's not in the acking_list. +"nodeid" might be needed for senders and/or receivers when nodes are multi-homed. +

+

Node A configuration +

link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group +cc rate=230000 acking_list=10.1.102.1,10.1.103.1 +

Node B configuration +

interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.102.1 +

Node C configuration + i

interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.103.1 +

Node D configuration +

interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.104.1 + +

Many-to-many

+ +

For a many-to-many multicast link, use "link add" on all the nodes sourcing data. +Below, all nodes can send to and receive from the multicast group. Note the +acking_list is adjusted accordingly in each directive. +

+

Node A configuration +

link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group +cc rate=230000 acking_list=10.1.102.1,10.1.103.1,10.1.104.1 +

Node B configuration +

link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group +cc rate=230000 acking_list=10.1.101.1,10.1.103.1,10.1.104.1 +

Node C configuration +

link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group +cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.104.1 +

Node D configuration +

link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group +cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.103.1 + +

Link Parameters +

---------------

+ +To add a norm interface in your config file, use: +

+Syntax: link add name nexthop type norm [arg=val arg2=val2 argN=valN...] +

Valid arguments for arg are: + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arg +Possible settings +Default +Comments + +
cc +true or false +false + Whether NORM congestion control is enabled. + +
rate +number (bps) +64000 + Rate of NORM link in bits per second (bps). If congestion control is +enabled (see cc) this is the maximum achievable rate. + +
nodeid +string (hostname || IPv4 address) +none + Uniquely identify this node on the NORM link with an IPv4 address. +(Normally only needed for multi-homed nodes). + +
segment_size +number (bytes) +1400 + Maximum payload size of NORM sender messages in bytes (not incl. +NORM message header fields). + +
local_port +number (port) +4558 + (NORM interfaces only) Local UDP port to listen on for +incoming multicast traffic. + +
remote_addr +number (bytes) +acquired from the "link add" directive + Remote NORM link IP address (not used -- normally acquired from the +"link add" directive) + +
remote_port +number (port) +4557 + Remote NORM link port. (not used -- normally acquired from the "link +add" directive) + +
multicast_interface +interface +tbc + The host interface to use when working with multicast groups. + +
group_addr +IP address (IPv4) +tbc + (NORM interfaces only) Multicast IPv4 address to join. +For multicast links, the group address is acquired from +the "link add" directive. + + + +
tx_robust_factor +number +20 + The number of flush messages sent at the end of each transmission. +Flush messages are used to prompt receivers to request needed repairs. +With "acking_list" or "ack", periodic flush messages cease once positive +ack(s) are received. + +
rx_robust_factor +number +20 + The number of times a receiver will nack for repairs before giving up. + +
tos +number (marking) +0 + DSCP marking (0-64) for all bundles on a specific link +Size of the receive buffer for each NORM link. + +
acking_list +string (comma delimited list) +tbc + (multicast links) A comma separated list of IPv4 addresses (NORM node ids) that must +positively ack sender-initiated flush messages (once any nack-based +repair process has completed). + +
ack +tbc +tbc + A shorthand way of requesting positive acks from the remote end of unicast +links. + +
silent +true or false +false +"silent" receivers do not originate any NORM traffic and must rely on +proactive FEC for repairs. + +
ecn +true or false +false + Whether NORM explicit congestion notification support is enabled. +Size of the receive buffer for each NORM link. + + +
object_size +number (objects) +0 +Partition large DTN bundles into multiple NORM data objects for +transmission. With the default of zero bytes, no object partitioning +is performed. Setting object size to a relatively small value, e.g. +50000 bytes, may be useful in some contention based networks (see +tx_spacer). This feature is similar in concept to proactive bundle +fragmentation or "bundle MTU" (neither yet implemented in DTN2). +(see tx_spacer). + +
tx_spacer +number (ms) +0 + When combined with object_size, tx_spacer may be used to add a +constant pause time (ms) between successive NORM data object +transmissions. On contention based networks, this pause time may +give other nodes a chance to transmit. + +
keepalive_intvl +number (ms) +5000 +For DTN opportunistic links, keepalive_intvl is the number of +miliseconds between successive keepalive packets. Opportunistic +links are made unavailable when three remote keepalive packets are +missed. In addition, reliable mode links send watermarks at +keepalive intervals. + +
fec_buf_size +number (bytes) +1048576 + The number of bytes allocated for sender calculated FEC segments and repair state. + +
block_size +number (source symbol segments) +64 + The number of source symbol segments per coding block for the systematic Reed-Solomon FEC code used in the NRL NORM implementation. + +
num_parity +number (parity blocks) +16 + The maximum number of parity blocks the sender is willing to calculate per coding block. + +
auto_parity +number (messages) +0 + The number of "auto-parity" messages sent at the end of each coding block. + +
backoff_factor +number (factor) +0.0 for unicast; 4.0 for multicast links + Used to scale various timeouts during the NACK repair process. + +
group_size +number +1000 + Group size is advertised to the receiver group where it is used in +calculating backoff timers. Due to encoding techniques in the NORM +header, 1000 receivers is the smallest value allowed by the NORM +protocol. + +
tx_cache_size_max +number (bytes) +20971520 + Size of the NORM object cache per link. + +
tx_cache_count_min +number (objects) +8 + At at minimum, this many objects are allowed to be enqueued in the +NORM engine regardless of the object sizes. After the tx_cache_count_min +value is surpassed, cache size contraints are in effect (see tx_cache_size_max). + +
tx_cache_count_max +number (objects) +1024 + The maximum number of objects that may be enqueued for transmission +with the NORM engine assuming the total size is less that tx_cache_size_max. + +
rx_buf_size +number (bytes) +300000 + Size of the receive buffer for each NORM link. + +
+ +

Note +

Requirements +

------------

+ +

+NORM libraries from the Naval Research Lab + +

+ +

Installation +

------------

+ +

Configure DTN2 using '--with-norm' and (re)compile. + +

Add NORM links to dtn.conf, for example: +

link add norm_link remote_host:4557 ALWAYSON norm + + + +