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 @@ + +
++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 + |
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 + +
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 + +
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 +
------------ + +
+NORM libraries from the Naval Research Lab + +
make -f Makefile.linux +
make -f Makefile.linux libnorm.a + +
------------ + +
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 + + + +