doc/manual/cl-norm.html
changeset 0 2b3e5ec03512
equal deleted inserted replaced
-1:000000000000 0:2b3e5ec03512
       
     1 <html>
       
     2 <head>
       
     3 <title> DTN2 Manual: NORM Convergence Layer </title>
       
     4 <link rel="stylesheet" type="text/css" href="manual.css" />
       
     5 </head>
       
     6 <body>
       
     7 <h1>NORM Convergence Layer
       
     8 </h1>
       
     9 
       
    10 <p>
       
    11 A Nack-Oriented Reliable Multicast (NORM) convergence layer. The <a href="http://cs.itd.nrl.navy.mil/work/norm/index.php">NORM</a> 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). 
       
    12 <p>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.
       
    13 
       
    14 <h2><p>Common Configurations
       
    15 <p>---------------------</h2>
       
    16 
       
    17 <p>Here are some basic examples to get you started.  The full list of link:w
       
    18 
       
    19 parameters are summarized in the next section.
       
    20 
       
    21 <p>Assume DTN nodes A, B, and C can communicate over an IP network.
       
    22 <p>
       
    23 <table>
       
    24 <tr>
       
    25 <th>EID
       
    26 <th>IPv4 Address
       
    27 
       
    28 <tr>
       
    29 <td><tt>dtn://node_a</tt>
       
    30 <td>10.1.101.1
       
    31 
       
    32 <tr>
       
    33 <td><tt>dtn://node_b</tt>
       
    34 <td>10.1.102.1
       
    35 
       
    36 <tr>
       
    37 <td><tt>dtn://node_c</tt>
       
    38 <td>10.1.103.1
       
    39 
       
    40 <tr>
       
    41 <td><tt>dtn://node_d</tt>
       
    42 <td>10.1.104.1
       
    43 </table>
       
    44 <h4>Point-to-point link A <-> B</h4>
       
    45 
       
    46 <p>Below are the "link add" directives for an always-on unicast link between
       
    47 nodes A and B.  Congestion control is enabled (cc) with a maximum tx rate
       
    48 of 230Kbps.  "ack" places the remote node in the acking_list; positive
       
    49 acknowledgment is expected after zero of more nack-based repair cycles.
       
    50 "ack" may reduce the number of flush messages.
       
    51 <p>
       
    52 <p><i> Node A configuration</i>
       
    53     <p><tt>link add link_to_b 10.1.102.1:4557 ALWAYSON norm remote_eid=dtn://node_b cc ack rate=230000</tt>
       
    54 <p><i> Node B configuration</i>
       
    55    <p><tt> link add link_to_a 10.1.101.1:4557 ALWAYSON norm remote_eid=dtn://node_a cc ack rate=230000</tt>
       
    56 
       
    57 <h4>One-to-many multicast A -> B,C,D</h4>
       
    58 
       
    59 <p>For a one-to-many multicast link, use "link add" on the node sourcing data and
       
    60 use "interface add" on the sink nodes.  The Node A "acking_list" requests postive
       
    61 acknowledgments from Nodes B and C (after zero or more nack-based repair
       
    62 cycles).  Delivery to Node D may not succeeed because it's not in the acking_list.
       
    63 "nodeid" might be needed for senders and/or receivers when nodes are multi-homed.
       
    64 <p>
       
    65 <p><i> Node A configuration</i>
       
    66     <p><tt>link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group 
       
    67 cc rate=230000 acking_list=10.1.102.1,10.1.103.1</tt>
       
    68 <p><i> Node B configuration</i>
       
    69    <p><tt> interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.102.1</tt>
       
    70 <p><i> Node C configuration</i>
       
    71    i<p><tt> interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.103.1</tt>
       
    72 <p><i> Node D configuration</i>
       
    73    <p><tt> interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.104.1</tt>
       
    74 
       
    75 <h4>Many-to-many</h4>
       
    76 
       
    77 <p>For a many-to-many multicast link, use "link add" on all the nodes sourcing data.
       
    78 Below, all nodes can send to and receive from the multicast group.  Note the
       
    79 acking_list is adjusted accordingly in each directive.
       
    80 <p>
       
    81 <p><i> Node A configuration</i>
       
    82    <p><tt> link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group 
       
    83 cc rate=230000 acking_list=10.1.102.1,10.1.103.1,10.1.104.1</tt>
       
    84 <p><i> Node B configuration</i>
       
    85    <p><tt> link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group 
       
    86 cc rate=230000 acking_list=10.1.101.1,10.1.103.1,10.1.104.1</tt>
       
    87 <p><i> Node C configuration</i>
       
    88    <p><tt> link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group 
       
    89 cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.104.1</tt>
       
    90 <p><i> Node D configuration</i>
       
    91     <p><tt> link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group 
       
    92 cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.103.1</tt>
       
    93 
       
    94 <h2><p>Link Parameters
       
    95 <p>---------------</h2>
       
    96 
       
    97 To add a norm interface in your config file, use:
       
    98 <p>
       
    99 Syntax: <tt>link add <i>name</i> <i>nexthop</i> <i>type</i> <i>norm</i> [<i>arg=val arg2=val2 argN=valN...</i>]</tt>
       
   100 <p>Valid arguments for <tt><i>arg</i></tt> are:
       
   101 
       
   102 <p>
       
   103 <table>
       
   104 <tr>
       
   105 <th>arg
       
   106 <th>Possible settings
       
   107 <th>Default
       
   108 <th>Comments
       
   109 
       
   110 <tr>
       
   111 <td><tt>cc</tt>
       
   112 <td>true or false
       
   113 <td>false
       
   114 <td> Whether NORM congestion control is enabled.
       
   115 
       
   116 <tr>
       
   117 <td><tt>rate</tt>
       
   118 <td>number (bps)
       
   119 <td>64000
       
   120 <td> Rate of NORM link in bits per second (bps). If congestion control is
       
   121 enabled (see cc) this is the maximum achievable rate.
       
   122 
       
   123 <tr>
       
   124 <td><tt>nodeid</tt>
       
   125 <td>string (hostname || IPv4 address)
       
   126 <td>none
       
   127 <td> Uniquely identify this node on the NORM link with an IPv4 address.
       
   128 (Normally only needed for multi-homed nodes).
       
   129 
       
   130 <tr>
       
   131 <td><tt>segment_size</tt>
       
   132 <td>number (bytes)
       
   133 <td>1400
       
   134 <td> Maximum payload size of NORM sender messages in bytes (not incl.
       
   135 NORM message header fields).
       
   136 
       
   137 <tr>
       
   138 <td><tt>local_port</tt>
       
   139 <td>number (port)
       
   140 <td>4558
       
   141 <td> (NORM interfaces only) Local UDP port to listen on for 
       
   142 incoming multicast traffic.
       
   143 
       
   144 <tr>
       
   145 <td><tt>remote_addr</tt>
       
   146 <td>number (bytes)
       
   147 <td>acquired from the "link add" directive
       
   148 <td> Remote NORM link IP address (not used -- normally acquired from the 
       
   149 "link add" directive)
       
   150 
       
   151 <tr>
       
   152 <td><tt>remote_port</tt>
       
   153 <td>number (port)
       
   154 <td>4557
       
   155 <td> Remote NORM link port. (not used -- normally acquired from the "link
       
   156 add" directive)
       
   157 
       
   158 <tr>
       
   159 <td><tt>multicast_interface</tt>
       
   160 <td>interface
       
   161 <td>tbc
       
   162 <td> The host interface to use when working with multicast groups.
       
   163 
       
   164 <tr>
       
   165 <td><tt>group_addr</tt>
       
   166 <td>IP address (IPv4)
       
   167 <td>tbc
       
   168 <td> (NORM interfaces only) Multicast IPv4 address to join.  
       
   169 For multicast links, the group address is acquired from 
       
   170 the "link add" directive.
       
   171 
       
   172 
       
   173 
       
   174 <tr>
       
   175 <td><tt>tx_robust_factor</tt>
       
   176 <td>number 
       
   177 <td>20
       
   178 <td> The number of flush messages sent at the end of each transmission.
       
   179 Flush messages are used to prompt receivers to request needed repairs.
       
   180 With "acking_list" or "ack", periodic flush messages cease once positive
       
   181 ack(s) are received.
       
   182 
       
   183 <tr>
       
   184 <td><tt>rx_robust_factor</tt>
       
   185 <td>number
       
   186 <td>20
       
   187 <td> The number of times a receiver will nack for repairs before giving up.
       
   188 
       
   189 <tr>
       
   190 <td><tt>tos</tt>
       
   191 <td>number (marking)
       
   192 <td>0
       
   193 <td> DSCP marking (0-64) for all bundles on a specific link
       
   194 Size of the receive buffer for each NORM link.
       
   195 
       
   196 <tr>
       
   197 <td><tt>acking_list</tt>
       
   198 <td>string (comma delimited list)
       
   199 <td>tbc
       
   200 <td> (multicast links) A comma separated list of IPv4 addresses (NORM node ids) that must
       
   201 positively ack sender-initiated flush messages (once any nack-based
       
   202 repair process has completed).
       
   203 
       
   204 <tr>
       
   205 <td><tt>ack</tt>
       
   206 <td>tbc
       
   207 <td>tbc
       
   208 <td> A shorthand way of requesting positive acks from the remote end of unicast
       
   209 links.
       
   210 
       
   211 <tr>
       
   212 <td><tt>silent</tt>
       
   213 <td>true or false
       
   214 <td>false
       
   215 <td>"silent" receivers do not originate any NORM traffic and must rely on 
       
   216 proactive FEC for repairs.
       
   217 
       
   218 <tr>
       
   219 <td><tt>ecn</tt>
       
   220 <td>true or false
       
   221 <td>false
       
   222 <td> Whether NORM explicit congestion notification support is enabled.
       
   223 Size of the receive buffer for each NORM link.
       
   224 
       
   225 
       
   226 <tr>
       
   227 <td><tt>object_size</tt>
       
   228 <td>number (objects)
       
   229 <td>0
       
   230 <td>Partition large DTN bundles into multiple NORM data objects for
       
   231 transmission. With the default of zero bytes, no object partitioning
       
   232 is performed. Setting object size to a relatively small value, e.g.
       
   233 50000 bytes, may be useful in some contention based networks (see
       
   234 tx_spacer). This feature is similar in concept to proactive bundle
       
   235 fragmentation or "bundle MTU" (neither yet implemented in DTN2).
       
   236 (see tx_spacer). 
       
   237 
       
   238 <tr>
       
   239 <td><tt>tx_spacer</tt>
       
   240 <td>number (ms)
       
   241 <td>0
       
   242 <td> When combined with object_size, tx_spacer may be used to add a 
       
   243 constant pause time (ms) between successive NORM data object 
       
   244 transmissions. On contention based networks, this pause time may 
       
   245 give other nodes a chance to transmit.
       
   246 
       
   247 <tr>
       
   248 <td><tt>keepalive_intvl</tt>
       
   249 <td>number (ms)
       
   250 <td>5000
       
   251 <td>For DTN opportunistic links, keepalive_intvl is the number of
       
   252 miliseconds between successive keepalive packets. Opportunistic
       
   253 links are made unavailable when three remote keepalive packets are
       
   254 missed. In addition, reliable mode links send watermarks at
       
   255 keepalive intervals.
       
   256 
       
   257 <tr>
       
   258 <td><tt>fec_buf_size</tt>
       
   259 <td>number (bytes)
       
   260 <td>1048576
       
   261 <td> The number of bytes allocated for sender calculated FEC segments and repair state.
       
   262 
       
   263 <tr>
       
   264 <td><tt>block_size</tt>
       
   265 <td>number (source symbol segments)
       
   266 <td>64
       
   267 <td> The number of source symbol segments per coding block for the systematic Reed-Solomon FEC code used in the NRL NORM implementation.
       
   268 
       
   269 <tr>
       
   270 <td><tt>num_parity</tt>
       
   271 <td>number (parity blocks)
       
   272 <td>16
       
   273 <td> The maximum number of parity blocks the sender is willing to calculate per coding block.
       
   274 
       
   275 <tr>
       
   276 <td><tt>auto_parity</tt>
       
   277 <td>number (messages)
       
   278 <td>0
       
   279 <td> The number of "auto-parity" messages sent at the end of each coding block.
       
   280 
       
   281 <tr>
       
   282 <td><tt>backoff_factor</tt>
       
   283 <td>number (factor) 
       
   284 <td>0.0 for unicast; 4.0 for multicast links
       
   285 <td>  Used to scale various timeouts during the NACK repair process.
       
   286 
       
   287 <tr>
       
   288 <td><tt>group_size</tt>
       
   289 <td>number 
       
   290 <td>1000
       
   291 <td> Group size is advertised to the receiver group where it is used in 
       
   292 calculating backoff timers. Due to encoding techniques in the NORM 
       
   293 header, 1000 receivers is the smallest value allowed by the NORM 
       
   294 protocol.
       
   295 
       
   296 <tr>
       
   297 <td><tt>tx_cache_size_max</tt>
       
   298 <td>number (bytes)
       
   299 <td>20971520
       
   300 <td> Size of the NORM object cache per link.
       
   301 
       
   302 <tr>
       
   303 <td><tt>tx_cache_count_min</tt>
       
   304 <td>number (objects)
       
   305 <td>8
       
   306 <td> At at minimum, this many objects are allowed to be enqueued in the 
       
   307 NORM engine regardless of the object sizes. After the tx_cache_count_min 
       
   308 value is surpassed, cache size contraints are in effect (see tx_cache_size_max).
       
   309 
       
   310 <tr>
       
   311 <td><tt>tx_cache_count_max</tt>
       
   312 <td>number (objects)
       
   313 <td>1024
       
   314 <td> The maximum number of objects that may be enqueued for transmission 
       
   315 with the NORM engine assuming the total size is less that tx_cache_size_max.
       
   316 
       
   317 <tr>
       
   318 <td><tt>rx_buf_size</tt>
       
   319 <td>number (bytes)
       
   320 <td>300000
       
   321 <td> Size of the receive buffer for each NORM link.
       
   322 
       
   323 </table>
       
   324 
       
   325 <p> <b>Note</b>
       
   326 <p><h5>Requirements
       
   327 <p>------------</h5>
       
   328 
       
   329 <p>
       
   330 NORM libraries from the Naval Research Lab
       
   331 
       
   332 <ul>
       
   333 <li>Download <a href="http://downloads.pf.itd.nrl.navy.mil/norm/">norm-nightlybuild.tgz</a> (tested with version 1.4b4)
       
   334  and <a href="http://downloads.pf.itd.nrl.navy.mil/protolib/">protolib-nightlybuild.tgz</a>
       
   335 
       
   336 <li>Unpack the norm code.  cd into the norm top-level directory
       
   337     and unpack the protolib code there.
       
   338 
       
   339 <li>For linux, cd into the unix directory and type
       
   340 <tt><p>make -f Makefile.linux
       
   341 <p>make -f Makefile.linux libnorm.a</tt>
       
   342 
       
   343 <li>Copy libnorm.a and ../protolib/unix/libProtokit.a to
       
   344      /usr/lib or /usr/local/lib
       
   345 
       
   346 <li>Copy ../common/normApi.h to /usr/include or /usr/local/include
       
   347 </ul>
       
   348 <a name="install_norm"/>
       
   349 <p><h5>Installation
       
   350 <p>------------</h5>
       
   351 
       
   352 <p>Configure DTN2 using <i>'--with-norm'</i> and (re)compile.
       
   353 
       
   354 <p>Add NORM links to dtn.conf, for example:
       
   355    <p><tt>link add norm_link remote_host:4557 ALWAYSON norm</tt>
       
   356 
       
   357 </body>
       
   358 </html>
       
   359