|
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 |