|
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
2 \documentclass[11pt]{article} |
|
3 \usepackage{graphicx,times,lscape,fancyheadings,color} |
|
4 |
|
5 \textwidth 6.5in |
|
6 \textheight 9.0in |
|
7 \oddsidemargin -0.1in |
|
8 \topmargin -0.5in |
|
9 \parindent 0.0in |
|
10 \parskip 5pt |
|
11 |
|
12 \setcounter{secnumdepth}{4} |
|
13 |
|
14 \chead{} |
|
15 \input{local-macros} |
|
16 |
|
17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
18 \begin{document} |
|
19 |
|
20 \title{DTN Plugin Architecture \\ |
|
21 {\large Approved for Public Release, Distribution Unlimited. [2/27/2007]} |
|
22 } |
|
23 |
|
24 \author{Rajesh Krishnan, Christopher Small, Ram Ramanathan, Joanne Mikkelson, |
|
25 and Prithwish Basu\thanks{Contact: pbasu@bbn.com, 617.873.7742}\\ |
|
26 BBN Technologies, 10 Moulton St, Cambridge MA 02138} |
|
27 \date{\today} |
|
28 \maketitle |
|
29 |
|
30 \tableofcontents |
|
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
32 \newpage |
|
33 \section{Introduction} \label{sec:intro} |
|
34 |
|
35 In this document, we describe a DTN reference system architecture. The purpose |
|
36 of this document is to identify the components of the DTN reference system, |
|
37 and to define and specify the semantics of the interfaces between the |
|
38 components. |
|
39 %We seek feedback from the DTN community on the architecture and |
|
40 %the interfaces described here, for possible inclusion in future versions of |
|
41 %this document. |
|
42 |
|
43 The reader is assumed to be familiar with the Bundle Protocol |
|
44 specification~\cite{BP-ID}, the Bundle Security Protocol |
|
45 specification~\cite{BSP-ID}, and the DTNRG reference |
|
46 implementation~\cite{DTN2}. |
|
47 |
|
48 A particular goal of this architecture is to enable the community to experiment |
|
49 with multiple solutions for persistent storage, routing, naming and late |
|
50 binding, policy, and DTN convergence layers, while continuing to build upon a |
|
51 common core of open DTNRG standards and software. This is accomplished by |
|
52 defining interfaces that allow the experimental features to plug into the |
|
53 common core. In this document, the term {\em system} will refer to the |
|
54 SPINDLE-II DTN system (the core of which is based on the DTN2 system), unless |
|
55 specified otherwise. |
|
56 |
|
57 \subsection{Glossary of Abbreviations and Technical Terms} \label{sec:glossary} |
|
58 |
|
59 Some commonly used acronyms and terms used throughout this document are listed |
|
60 and described below. |
|
61 |
|
62 \begin{description} |
|
63 \item[A/M] Application / Middleware |
|
64 \item[BPA] Bundle Protocol Agent |
|
65 \item[BP] Bundle Protocol |
|
66 \item[BSP] Bundle Security Protocol |
|
67 \item[CLA] Convergence Layer Adapter |
|
68 \item[DBMS] Database Management System |
|
69 \item[DP] Decision Plane |
|
70 \item[DS] Data Store |
|
71 \item[DTNRG-public] A design specification that will undergo the DTNRG consensus process during DTN Program Phase 2. |
|
72 \item[EID] Endpoint IDentifier for denoting a DTN endpoint (see~\cite{BP-ID}) |
|
73 \item[GBOF-ID] Global Bundle Or Fragment ID |
|
74 \item[KB] Knowledge Base |
|
75 \item[Link] An association between two DTN endpoints (detailed description in Section \ref{sec:linktypes}) |
|
76 \item[MANET] Mobile Ad hoc NETwork |
|
77 \end{description} |
|
78 |
|
79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
80 \newpage |
|
81 \section{Overview} \label{sec:complist} |
|
82 |
|
83 The high-level components and interfaces of the system are illustrated in |
|
84 Figure \ref{fig:componly}. |
|
85 |
|
86 %%%%%%%%%%%% |
|
87 \begin{figure}[htbp] |
|
88 \centering |
|
89 \includegraphics[height=3in]{figs/components-toplevel.pdf} |
|
90 \caption{\label{fig:componly} Architectural Components and Interfaces} |
|
91 \end{figure} |
|
92 %%%%%%%%%%%% |
|
93 % |
|
94 |
|
95 The system SHOULD contain the following components (described in |
|
96 Section \ref{sec:compdesc}): |
|
97 |
|
98 \vspace{-4pt} |
|
99 \begin{enumerate} |
|
100 \setlength{\parskip}{-3pt} |
|
101 \item Bundle Protocol Agent (BPA), a DTNRG-public component |
|
102 \item Data Store (DS) |
|
103 \item Decision Plane (DP) |
|
104 \item Convergence Layer Adapter (CLA) |
|
105 \item Application/Middleware (A/M) |
|
106 \end{enumerate} |
|
107 |
|
108 Table \ref{tab:comp-functions} summarizes the key functionality provided by |
|
109 each of the five components. The above components MAY be implemented in |
|
110 separate processes to enable language and tool-chain independence across |
|
111 components. |
|
112 |
|
113 Instances of the BPA will be also referred to as the {\it core} and instances |
|
114 of the other four components shall be referred to as {\it plugins}. The DS |
|
115 SHOULD provide a service that is accessible from all other components of the |
|
116 system.\footnote{As a result, the system can support both daemon-centric and |
|
117 database-centric concepts of operation.} |
|
118 |
|
119 The system MUST implement the relevant DTNRG-public interfaces as name below |
|
120 and described in Section \ref{sec:interfaces}: |
|
121 \vspace{-4pt} |
|
122 \begin{enumerate} |
|
123 \setlength{\parskip}{-3pt} |
|
124 \item Data Store Interface (used by BPA, CLA, DP, and A/M) |
|
125 \item Decision Plane Interface (used by BPA) |
|
126 \item Convergence Layer Adapter Interface (used by BPA) |
|
127 \item Bundle Protocol Agent Interface (used by A/M) |
|
128 \end{enumerate} |
|
129 |
|
130 All interfaces SHOULD be provided using the Inter-Component Communication |
|
131 protocol (discussed in Section \ref{sec:iccp}, defined in a separate document) |
|
132 for uniformity. |
|
133 |
|
134 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
135 \begin{landscape} |
|
136 \begin{table}[htbp] |
|
137 \centering |
|
138 {\small |
|
139 \begin{tabular}{|p{1.5in}|p{1.5in}|p{1.5in}|p{1.5in}|p{1.5in}|} |
|
140 \hline |
|
141 {\bf BPA} & {\bf DS} & {\bf CLA} & {\bf DP} & {\bf A/M}\\ |
|
142 \hline |
|
143 Implement the Bundle Protocol specification |
|
144 & |
|
145 Store, retrieve, and delete key-data pairs |
|
146 & |
|
147 Provide a bundle transport mechanism |
|
148 & |
|
149 Receive link and bundle event notifications from the BPA and |
|
150 generate actions (requests). |
|
151 & |
|
152 Generate, submit, and receive application bundle payloads |
|
153 \\ |
|
154 \hline |
|
155 |
|
156 Implement the Bundle Security Protocol specification |
|
157 & |
|
158 Database management for metadata, including schema management, |
|
159 and query processing |
|
160 & |
|
161 Neighbor discovery (via scanning or staring) |
|
162 & |
|
163 Provide an adaptive dissemination service that can be used |
|
164 by various routing and naming protocols |
|
165 & |
|
166 Create/remove registration with BPA |
|
167 \\ |
|
168 \hline |
|
169 |
|
170 Implement the Bundle Protocol Agent Interface (accessed by A/M) |
|
171 & |
|
172 Knowledge base management for metadata, including ontology management, |
|
173 query processing, and rule-based inference |
|
174 & |
|
175 Link formation, tear-down, and characterization (e.g., delay, capacity, |
|
176 loss) |
|
177 & |
|
178 Perform a long-term characterization of available communication |
|
179 opportunities (e.g., computes a cost metric) |
|
180 & |
|
181 Register procedure(s) for handling delivery failure |
|
182 \\ |
|
183 \hline |
|
184 |
|
185 Use and implement support for DP interface, CLA interface, and DS interface |
|
186 & |
|
187 Manage storage of bundles, bundle metadata, registration information, BPA state |
|
188 if any, connectivity (historic, current, and scheduled) information, naming |
|
189 ontology, and cached content |
|
190 & |
|
191 Link status reporting (e.g., in response to queries) |
|
192 & |
|
193 Process policy inputs and respond to queries regarding decision choices |
|
194 that conform to policy |
|
195 & |
|
196 \\ |
|
197 \hline |
|
198 |
|
199 & |
|
200 Database triggers |
|
201 & |
|
202 Implement CLA interface |
|
203 & |
|
204 Perform forwarding and scheduling decisions for bundles |
|
205 & |
|
206 \\ |
|
207 \hline |
|
208 |
|
209 & |
|
210 Implement DS interface |
|
211 & |
|
212 & |
|
213 Perform route computation and/or route discovery |
|
214 & |
|
215 \\ |
|
216 \hline |
|
217 |
|
218 & |
|
219 & |
|
220 & |
|
221 Perform name resolution and distributed name KB management |
|
222 & |
|
223 \\ |
|
224 \hline |
|
225 |
|
226 & |
|
227 & |
|
228 & |
|
229 Implement DP interface |
|
230 & |
|
231 \\ |
|
232 \hline |
|
233 |
|
234 \end{tabular} |
|
235 } |
|
236 \caption{Summary of functionality of system components \label{tab:comp-functions}} |
|
237 \end{table} |
|
238 \end{landscape} |
|
239 |
|
240 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
241 \newpage |
|
242 \section{Architectural Components} \label{sec:compdesc} |
|
243 |
|
244 In this section we describe each of the system components mentioned in Section |
|
245 \ref{sec:complist} (DS, CLA, DP, A/M). These will be implemented as plug-ins in |
|
246 the SPINDLE-II system; in other words, a newly developed module (implemented as |
|
247 a process) can be started on the node and its services will be automatically |
|
248 available to the other already running DTN processes. |
|
249 |
|
250 |
|
251 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
252 \subsection{Bundle Protocol Agent} |
|
253 \label{sec:bpa} |
|
254 |
|
255 The bundle protocol agent (BPA) of a DTN node offers bundle protocol (BP) |
|
256 services. The BPA executes procedures of the BP and the Bundle Security |
|
257 Protocol (BSP) with help from other components in the system. The BPA MUST |
|
258 comply with the DTNRG specifications for the BP~\cite{BP-ID} and the BSP |
|
259 ~\cite{BSP-ID}. |
|
260 |
|
261 The BPA is responsible for implementing the mechanisms of the bundle protocol, |
|
262 but any key decisions (for example, those based on particular policies or |
|
263 optimization strategies) that need to be taken during the execution of such |
|
264 mechanisms MAY be exported to the {\em Decision Plane (DP)} module. Typically |
|
265 these decisions are indicated within the BP and BSP specifications as local |
|
266 policy or implementation issues. |
|
267 |
|
268 The BPA is responsible for taking actions on every bundle that passes through |
|
269 the DTN node. For example, the BPA is responsible for reading, creating, |
|
270 and updating fields in the bundle header. |
|
271 |
|
272 A comprehensive list of functional requirements for the BPA in terms of |
|
273 conformance to the BP and BSP can be found in a companion document \cite{MJ}. |
|
274 Some key functions are: |
|
275 |
|
276 \begin{enumerate} |
|
277 |
|
278 \item Forwarding a bundle to a ``next-hop'' node via a specified convergence |
|
279 layer adapter. The BP specification talks about forwarding to the ``minimum |
|
280 reception group'' for each bundle in each of the unicast, multicast, and |
|
281 anycast scenarios. The DP must compute these lists and returns them to the BPA |
|
282 along with scheduling instructions to handle ``Class of Service'' requirements. |
|
283 |
|
284 \item Fragmentation and reassembly of bundle payload (both reactive and |
|
285 pro-active). |
|
286 |
|
287 \item Implementation of the Custody-transfer mechanism in the bundle header, |
|
288 sending Custody Acknowledgments, etc.: The decision of whether to accept, |
|
289 refuse, or relinquish custody is taken by the DP. Once a decision has been |
|
290 made, a list of DP-specified actions such as re-forwarding the bundle may have |
|
291 to be taken (depends on policy). |
|
292 |
|
293 \item Delivery to application: Deliver incoming bundle to application if it is |
|
294 {\it registered} on this node; otherwise abandon delivery based on policy. |
|
295 |
|
296 \item Discarding and Deleting a bundle: If the set of ``retention |
|
297 constraints'' on a bundle is empty, then discard the bundle and all references |
|
298 to it. Deleting a bundle involves removing all retention constraints and then |
|
299 discarding it. This may happen upon bundle expiration. These mechanisms can |
|
300 richly interact with the policy module within the DP. |
|
301 |
|
302 \item Sending administrative bundles such as status reports. |
|
303 |
|
304 \item Security functions such as authentication, confidentiality, |
|
305 and data integrity. |
|
306 %prevention of DOS over resource strapped networks. |
|
307 \end{enumerate} |
|
308 |
|
309 In addition, the BPA SHOULD {\it implement} the Bundle Protocol Agent Interface that |
|
310 can be accessed by applications, and {\it use} the other interfaces listed in |
|
311 Section \ref{sec:complist}. |
|
312 |
|
313 %The interactions between the BPA and other components are described in |
|
314 %Section \ref{sec:XXX}. |
|
315 |
|
316 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
317 \subsection{Data Store} |
|
318 \label{sec:ds} |
|
319 |
|
320 The Data Store (DS) module offers a persistent storage service and is |
|
321 responsible for storing bundles, knowledge about bundle metadata, network state |
|
322 information (routing tables, name ontology data, content metadata, policy |
|
323 rules), and application state information (registrations and other metadata). |
|
324 We note that the SPINDLE system may eventually need to cater to a wide spectrum |
|
325 of solutions for the data storage layer. These may range from a dumb file |
|
326 system residing on Flash memory attached to a low power sensor node to a very |
|
327 powerful logic engine running on a powerful DTN node. Hence a DS in the |
|
328 SPINDLE system could exist in one of the following incarnations of increasing |
|
329 capability: |
|
330 |
|
331 \begin{enumerate} |
|
332 \item A simple key-value store (that can be based on a file system) that allows |
|
333 other modules to add, retrieve and delete key-value pairs. Bundles, bundle metadata |
|
334 and network state information can exist in such a store. This may be |
|
335 applicable for resource-strapped devices such as battery-powered sensor |
|
336 nodes. |
|
337 |
|
338 \item A DBMS that allows other modules to add, delete, and get |
|
339 elements with multiple fields information (by its key). An DBMS might |
|
340 expose only {\it canned queries} to other modules, or it might allow other |
|
341 modules to submit queries, e.g. written in SQL. |
|
342 |
|
343 \item A full fledged knowledge base (KB) that supports deduction or inference |
|
344 by means of execution of rules (e.g., Prolog style) on stored facts. In |
|
345 addition to add/delete(key)/get(key) features, a KB will support advanced |
|
346 deductive database style querying features. Advanced KBs like Flora-2 even |
|
347 allow setting up ``triggers'' that fire when a certain rule executes |
|
348 successfully, and this typically results in the execution of a specified |
|
349 callback function. A KB will include support for data storage, either |
|
350 internally, or via a back-end storage system such as MySQL or Berkeley DB. |
|
351 |
|
352 \end{enumerate} |
|
353 |
|
354 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
355 \subsection{Decision Plane} \label{sec:dp} |
|
356 |
|
357 The Decision Plane component includes the following subcomponents which may |
|
358 interact with each other: |
|
359 |
|
360 \begin{enumerate} |
|
361 |
|
362 \item {\it Router module:} Functions of a Router module include unicast and |
|
363 multicast route computation, generation of next hop(s) for bundles, replication |
|
364 and forwarding, bundle scheduling, decision to take custody of a bundle, |
|
365 decision to discard a bundle, etc. |
|
366 |
|
367 Note that while the BPA performs the forwarding mechanism to a particular CLA, |
|
368 it is the Router module that performs the consulting role for the BPA. Similarly, |
|
369 for custody transfer, the BPA performs the mechanism of assuming and |
|
370 relinquishing custody and sending a custody-ACK to the previous node, but it |
|
371 consults the external router module to decide whether to take custody or not. |
|
372 |
|
373 \item {\it Adaptive Dissemination module:} This is responsible for determining |
|
374 {\it what} network state to distribute, and {\it to whom}, and {\it when}. It |
|
375 is also responsible for gathering network state encoded in incoming |
|
376 dissemination bundles and populating the KB appropriately, if one exists. For |
|
377 example, decisions such as whether to alter the content of a flooded |
|
378 network-state bundle before re-dissemination will be taken by this module. This |
|
379 module is also responsible for interacting with CLA (via the BPA) to track |
|
380 changes in the status of incoming/outgoing links and then capture these changes |
|
381 in the ``to-be-disseminated'' network state. Even though the network state is |
|
382 stored in the KB, the dissemination logic may be implemented outside the KB for |
|
383 performance reasons, if necessary. |
|
384 |
|
385 \item {\it Policy module:} This will let users add and delete policies that may |
|
386 be stored in the KB, if one exists. Basic functions include interpretation of |
|
387 policy, enforcement of policy, and dispatching an event afterward. Performance |
|
388 reasons aside, ideally every bundle or network event in the SPINDLE system |
|
389 should be subjected to policy enforcement. This advocates a |
|
390 ``trap-and-dispatch'' (or ``event-condition-action'') style design. An |
|
391 alternative style is that of ``consultation.'' The policy module listens on |
|
392 a well known port for policy-enforcement requests |
|
393 and reacts only when asked. |
|
394 |
|
395 \item {\it Naming and Late binding module:} This module maintains and |
|
396 opportunistically shares name ontologies (or {\it schemes}, as referred to |
|
397 in~\cite{BP-ID}) between DTN nodes. This module is called upon to resolve rich |
|
398 intentional names to canonical endpoint identifiers of care-of nodes that are |
|
399 subsequently used by the Router module. This is also responsible for |
|
400 registration and dissemination or synchronization of Name KBs (in particular, |
|
401 intentional name to canonical name bindings stored within). |
|
402 |
|
403 \item {\it Content-based access module:} responsible for performing content |
|
404 caching/replication, distributed indexing, and content-addressable search. |
|
405 This may use several services from other DP modules, e.g., dissemination, late |
|
406 binding, external router. |
|
407 |
|
408 %{\it does this fall under Decision or App? Or maybe there should be no |
|
409 %distinction?} |
|
410 |
|
411 \end{enumerate} |
|
412 |
|
413 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
414 \subsection{Convergence Layer Adapter} |
|
415 \label{sec:cla} |
|
416 |
|
417 A Convergence layer adapter's function (as described in \cite{BP-ID}) is to |
|
418 send and receive bundles on behalf of the BPA. It achieves this by utilizing |
|
419 the services of the native protocol which is supported in one of the {\it |
|
420 underlying} networks that the node is homed on. A CLA thus {\it adapts} the |
|
421 packet/frame/signal transmission service provided in the underlying network to |
|
422 an abstract bundle transmission service that presents itself to the BPA. |
|
423 |
|
424 A CLA is responsible for maintaining information about DTN {\it links} (status, |
|
425 schedule, and possibly other QoS parameters) and discover them if possible. |
|
426 After discovering a DTN peer or monitoring the status of a link, the CLA is |
|
427 responsible for generating and posting events to the BPA about such facts. |
|
428 These facts then get relayed to the DP and may also be stored in the DS. |
|
429 |
|
430 %The CLA may also interact directly (IPC poke?) with some decision modules |
|
431 %(adaptive dissemination) for triggered dissemination under certain |
|
432 %circumstances. |
|
433 |
|
434 %{\it What is the service contract of send/receive with the BP? and how are the |
|
435 %CLA params presented to BP?} |
|
436 |
|
437 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
438 \subsection{Application/Middleware} |
|
439 \label{sec:am} |
|
440 |
|
441 The application agent (also referred to as the A/M module) uses the BP services |
|
442 to transmit and receive bundle payloads. This can act as a multiplexed DTN |
|
443 communication service to other non-DTN applications running on the node. |
|
444 |
|
445 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
446 \newpage |
|
447 \section{Interfaces} |
|
448 \label{sec:interfaces} |
|
449 |
|
450 In this section we describe the primitives for each of the four interfaces |
|
451 identified in Figure \ref{fig:componly}. |
|
452 |
|
453 The BPA implements the BPA interface that can be used by A/M and DP to send and |
|
454 receive bundles. |
|
455 |
|
456 The DP implements the DP interface that is accessed by the BPA to serve various |
|
457 decision points identified in the BP (such as routing, scheduling, name |
|
458 resolution, custody acceptance, and storage management). |
|
459 |
|
460 The DS implements the DS interface for storing bundles, bundle metadata, |
|
461 application registrations, connectivity information, and other system state. |
|
462 The DS interface can be accessed system-wide. The CLA, for example, may access |
|
463 the DS interface for storing and retrieving connectivity information that is |
|
464 discovered or scheduled/specified. The DP, for example, may access the DS |
|
465 interface for storing and retrieving information related to routing, naming, |
|
466 policy, and content caching/indexing. |
|
467 |
|
468 The CLA implements the CLA interface which is accessed by the BPA for |
|
469 bundle transport and link management. |
|
470 |
|
471 We briefly discuss at the end of this section the Inter-Component |
|
472 Communication Protocol (ICCP), the details of which will be described |
|
473 in a separate document. |
|
474 |
|
475 \subsection{Interface Conventions} |
|
476 |
|
477 We note that this is a ``semantic'' interface, that is, we expect it to be |
|
478 specifying the kinds of things that go across the interface and their meanings, |
|
479 not necessarily at a level necessary for implementation. We expect, though, |
|
480 that an implementation-level specification can be generated from this easily. |
|
481 |
|
482 All messages are assumed to be transparently reliably delivered. This |
|
483 functionality may be provided by the inter-component communication protocol |
|
484 mentioned in Section \ref{sec:iccp}. |
|
485 |
|
486 All parameters are assumed to be ``required'' unless specifically |
|
487 noted to be ``optional'' (Opt). |
|
488 |
|
489 The interface messages are named in a top-down hierarchical |
|
490 fashion. For example, in the DP and CLA interfaces, at the highest |
|
491 level, there are four kinds of messages: Event, Request, Query, |
|
492 Report. At the next level, there are Link-specific and Bundle-specific |
|
493 messages, for each message type. At a further level, there is |
|
494 Created/Deleted, Transmitted/Received etc. which are |
|
495 the next level down. This naming convention is intended for readability |
|
496 of the specification only. The implementation should adopt/retain the style |
|
497 most convenient to it. |
|
498 |
|
499 Query/Report messages consist of a set of ``paired'' messages---a Query |
|
500 message from a plugin to the BPA requesting certain information from the BPA |
|
501 and a report message (for that query) from the BPA to the plugin delivering the |
|
502 requested information, if possible.\footnote{Note that Query/Report messages are |
|
503 possible in the reverse direction as well, e.g., the BPA can send a Query |
|
504 message to the CLA or the DS and can expect a Report back.} Unlike the |
|
505 Request-Event messages which are only loosely tied, there is a tighter coupling |
|
506 between query and report; in particular, a report identifies which query is |
|
507 being responded to. |
|
508 |
|
509 \subsubsection{Links and Link Types} \label{sec:linktypes} |
|
510 |
|
511 A link in DTN2 is an association between two DTN endpoints. In other words it |
|
512 can be represented as a relation between two EIDs which is established over a |
|
513 certain convergence layer. A link possesses physical attributes such as |
|
514 datarate, (estimated) delay, error rate, loss rate etc. as well as other |
|
515 attributes including {\it type}, {\it state}, and other {\it flags}. A |
|
516 measurement process (in the convergence layer adapter) can track and |
|
517 update the values of these attributes. |
|
518 |
|
519 \begin{table} |
|
520 \centering |
|
521 \begin{tabular}{|l|c|c|c||c|c|} |
|
522 \multicolumn{1}{c}{ } & \multicolumn{3}{c}{States} & \multicolumn{2}{c}{Flags} \\ |
|
523 \hline |
|
524 Link Type & OPEN, BUSY & UNAVAILABLE & AVAILABLE & UNUSABLE & REACHABLE\footnotemark \\ |
|
525 \hline |
|
526 Persistent (AlwaysOn) & x & x & & x & \\ |
|
527 \hline |
|
528 On-demand & x & x & x & x & \\ |
|
529 \hline |
|
530 Opportunistic (Discovered) & x & x & & x & x\\ |
|
531 \hline |
|
532 Scheduled & x & x & x & x & x\\ |
|
533 \hline |
|
534 Predicted & x & x & & x & x\\ |
|
535 \hline |
|
536 \end{tabular} |
|
537 \caption{\label{table:link-tsf} Link types and possible states/flags.} |
|
538 \end{table} |
|
539 \footnotetext{Anticipated changes in the way bundle queuing is done for |
|
540 closed links might make the REACHABLE flag unnecessary. Thus this column |
|
541 is likely to disappear in future versions.} |
|
542 |
|
543 There are three link types implemented in DTN2: Persistent (AlwaysOn), |
|
544 On-demand, and Opportunistic (Discovered).\footnote{DTN2 uses AlwaysOn |
|
545 to denote what the DTN Architecture refers to as Persistent; |
|
546 ``Discovered'' is influenced by the term |
|
547 ``neighbor discovery'' commonly used in mobile ad hoc networking literature.} |
|
548 We extend the semantics of the Opportunistic link to support a wider range |
|
549 of neighbor discovery procedures. We add the |
|
550 remaining two types discussed in the DTN Architecture: Scheduled, and |
|
551 Predicted.\footnote{ |
|
552 There is a Scheduled link type in DTN2 but it is not fully implemented.} |
|
553 Not all link states and flags apply to all link types.\footnote{In |
|
554 particular, note that there is no discovery for on-demand links, and |
|
555 reachability is assumed.} Table \ref{table:link-tsf} depicts the various {\it |
|
556 types} of links and their corresponding range of {\it states} and {\it flags} |
|
557 that SHOULD be allowed in a DTN system. A detailed description of the various |
|
558 link states and flags can be found in Section \ref{sec:linkstates}. |
|
559 |
|
560 A Persistent (AlwaysOn) link is simply a static link, and it should always |
|
561 be open. The |
|
562 link is opened as soon as it is created. If the link closes for any reason the |
|
563 link becomes UNAVAILABLE and the BPA will attempt to reopen the link. |
|
564 An example of an AlwaysOn link would be a wired connection to a peer such as a |
|
565 T1. |
|
566 |
|
567 An On-demand link is assumed to be usable at any time as required, but is not |
|
568 opened until there are bundles to be sent over the link. When in this state, |
|
569 the link is AVAILABLE. Once the link is OPEN, if no bundle traffic is sent over |
|
570 an on-demand link for a while, the BPA will consider the link idle and |
|
571 automatically close the link, returning it to AVAILABLE. If the link closes for |
|
572 any reason other than being idle or being explicitly closed by an operator, the |
|
573 link becomes UNAVAILABLE and the BPA will periodically attempt to reopen the |
|
574 link. If the link is successfully reopened, the link state returns to OPEN. A |
|
575 dial-up connection over a modem would be represented by an |
|
576 on-demand link. |
|
577 |
|
578 An Opportunistic (Discovered) link is used with CLAs when there is no need |
|
579 to form a {\em point-to-point} connection for a link to be open. |
|
580 Discovered links are intended to capture characteristics of communications in |
|
581 multihop broadcast wireless networks (MANETs). Note that |
|
582 in a broadcast channel context there really is no ``link'' {\it per se,} but peers |
|
583 discover ability to communicate, which we declare as links. |
|
584 %We shall assume, as |
|
585 %is consistent with current state of art, that the CLA only discovers and |
|
586 %uses two-way communication possibilities. |
|
587 % XXX: I think above sentence is too strong, I can imagine CLAs that |
|
588 % discover one-way communication possibilities through an out-of-band |
|
589 % mechanism; --krash |
|
590 One |
|
591 popular way of peer discovery is using a Hello protocol~\cite{OLSR}, where each |
|
592 node puts the set of nodes it can hear in the Hello, to help determine |
|
593 existence of bidirectional communications. Thus, receiving a hello is {\em not} |
|
594 an indication of bidirectional communications, although it is a necessary |
|
595 condition. |
|
596 |
|
597 Discovered links may be constrained, for example, in a ``only k links out |
|
598 of n'' situation. |
|
599 %As long as the CLA can transmit on any k---it need not transmit |
|
600 %simultaneously, but may transmit in round robin. |
|
601 If the situation calls for choosing a particular set of k links and |
|
602 locking out the other (for example, if a CLA knows which satellites it |
|
603 can associate with but can do so only k at a time), then these would |
|
604 not be Discovered links by definition (they are not for point to point |
|
605 links).\footnote{In a one-of-many link situation A $\rightarrow$ |
|
606 one-of(B,C,D), the ``choosing'' is either ``hard'' (i.e., you cannot |
|
607 send on the other links for more than a threshold period of time), or |
|
608 ``soft'' (you can do round robin). With hard links the DP has to |
|
609 first choose the link to use (this may be part of topology control), |
|
610 say A $\rightarrow$ C. In this case, both A $\rightarrow$ D and A |
|
611 $\rightarrow$ B are both closed and unreachable. With soft links you |
|
612 can keep the links open and send on each within milliseconds of each |
|
613 other. In the current semantics, Discovered links only cover the |
|
614 ``soft type'', that is, when all can be kept open and reachable.} |
|
615 |
|
616 Thus, with discovered links, any time a peer is |
|
617 reachable, bundles can be transmitted or received without any additional |
|
618 action, so the link is always OPEN if it is REACHABLE. The link will remain |
|
619 open if the peer becomes |
|
620 unreachable temporarily, but if the peer remains unreachable for a long time, |
|
621 then the link can be considered closed, and the state will be changed to |
|
622 UNAVAILABLE (the closed state). |
|
623 |
|
624 Note that a special case of the Opportunistic link is implemented in DTN2 |
|
625 which is subsumed by the more general semantics discussed above. In the |
|
626 current implementation, links are created and opened when a previously |
|
627 unknown peer somehow connects to the node to open a link. If it can be |
|
628 inferred from this connection that traffic can be sent from the node to this |
|
629 peer, an opportunistic link is created and opened so that bundles may be sent |
|
630 to the new peer. Once an opportunistic link is closed for any reason, it |
|
631 becomes UNAVAILABLE and will only be reopened if the peer opens the |
|
632 link again. An example of an opportunistic link is one created when a peer |
|
633 opens a TCP or dial-up connection to the node; the node now knows it can |
|
634 communicate with and send bundles to the peer that initiated the first |
|
635 connection, and represents this fact with an opportunistic link. |
|
636 |
|
637 Scheduled links can be thought of as an extension to on-demand links. When a |
|
638 scheduled link is created, it is set to AVAILABLE. This means the link is |
|
639 available to be opened. |
|
640 %Unlike on-demand though, the opening is not under any user's control but under |
|
641 %the control of the ``clock''. When the scheduled time comes, it moves |
|
642 %automatically into state OPENING. There it waits for a contactUpEvent just |
|
643 %like the on-demand link. When this event happens, it moves into OPEN. |
|
644 When the scheduled time comes, the BPA will open the link. (This adds a |
|
645 new requirement to the functionality of the BPA.) |
|
646 \typeout{XXX If this new requirement is hard, DP can track schedule and open |
|
647 at the right instant.} A |
|
648 scheduled link is expected to be reachable during the scheduled interval. If |
|
649 the link is still scheduled to be open when it closes, it becomes UNAVAILABLE, |
|
650 and otherwise it becomes AVAILABLE until the next time the link is scheduled to |
|
651 be opened. If the link is UNAVAILABLE and the link is scheduled to be open, |
|
652 the BPA will try to reopen the link, |
|
653 like it does for UNAVAILABLE on-demand links, until the end of the scheduled |
|
654 opportunity. During the time the link is scheduled to be open, if the CLA can |
|
655 ascertain reachability, the REACHABLE flag can be used to provide extra |
|
656 information to the DP. A scheduled link would represent, for example, |
|
657 communications with a satellite which is overhead at regular intervals. |
|
658 |
|
659 A predicted link is similar to a discovered link. When created, it is |
|
660 UNAVAILABLE. A separate process (perhaps in the DP) computes the next time it |
|
661 expects the link to be REACHABLE. However, |
|
662 that is used for DP purposes only to make routing decisions, and the link is |
|
663 not opened automatically when the predicted time arrives. Instead, the |
|
664 discovery process |
|
665 %(hellos) |
|
666 is initiated shortly before the predicted time by the CLA. |
|
667 %When you hear back from the contact, a contactUpEvent forces the state into |
|
668 %OPEN. Then the OPEN to BUSY transition and the transitions to UNAVAILABLE are |
|
669 %as in discovered links. |
|
670 When the neighbor becomes reachable, the link becomes OPEN and then behaves |
|
671 like a discovered link: it is OPEN until the peer is unreachable for too long, |
|
672 at which point the link is closed and set to UNAVAILABLE. At the end of the |
|
673 predicted opportunity, discovery for the peer is discontinued. The difference |
|
674 between discovered and predicted links is that for predicted links we don't |
|
675 initiate discovery until the predicted time (or shortly before). For CLAs where |
|
676 the discovery process is continuous (e.g.\ MANETs), there is no functional |
|
677 difference in the CLA between predicted links and discovered links, but even in |
|
678 this case, the DP can make decisions based on whether a link has a predicted |
|
679 opportunity or not. A regularly observed UAV flyover would be described |
|
680 by a predicted link. |
|
681 |
|
682 \subsubsection{Link States and Flags} \label{sec:linkstates} |
|
683 |
|
684 The DP and CLA interfaces make use of four link states present in DTN2: |
|
685 UNAVAILABLE, AVAILABLE, OPEN, and BUSY.\footnote{DTN2 also has an OPENING state |
|
686 used for determining whether ContactDownEvent should be sent, but this state |
|
687 need not be used in the interface. The CLA posts EventLinkClosed and the BPA |
|
688 may need to keep track of on-demand links for which the RequestOpenLink message |
|
689 has been sent and EventLinkOpen has not been received yet, but in the external |
|
690 interface the link is simply not OPEN until the EventLinkOpen message has |
|
691 arrived.} The link can be in only one of these four states at a given time. Two |
|
692 additional states are added: UNUSABLE and REACHABLE. These two states are |
|
693 independent of the other four, so the link state should be considered a set of |
|
694 flags. |
|
695 |
|
696 The OPEN and BUSY \typeout{XXX We may want to revisit the idea of changing |
|
697 BUSY into a flag distinct from OPEN.} states signify that the |
|
698 link is open. For links whose CLA requires a specific action to be done before |
|
699 communication can happen (e.g.\ dialout, set up a TCP connection, initiate a |
|
700 route discovery on a MANET to a remote node, etc.), these states mean that |
|
701 whatever needs to be done has been done and bundles can be sent on the link. |
|
702 For Discovered links, these states indicate that the peer is or very recently |
|
703 was reachable. If the link is BUSY, the CLA is applying back-pressure to the |
|
704 BPA by requesting that the BPA not try to send any more bundles over the |
|
705 link.\footnote{In DTN2 this is set when the per-CLA bundle queue gets too long |
|
706 or as part of LinkAttributeChange Event. The DP would then have to perform a |
|
707 query to determine whether this has been set.} |
|
708 |
|
709 Closed links are either UNAVAILABLE or AVAILABLE. The difference between these |
|
710 two states generally pertains to whether or not the BPA must automatically try |
|
711 to reopen the link. The state is AVAILABLE is when the link is {\it closed}, |
|
712 but {\it openable}. UNAVAILABLE is when the link cannot be opened for some |
|
713 reason. The BPA will periodically attempt to reopen UNAVAILABLE links of the |
|
714 following types: AlwaysOn, On-demand, and Scheduled. For other link types, |
|
715 there is only one kind of closed state, so those links are always UNAVAILABLE |
|
716 when closed. |
|
717 |
|
718 The availability concept has more to do with the {\it ability} to open a link |
|
719 rather than policy directives such as ``I think this link is dangerous |
|
720 (eavesdroppers in there), so you SHOULD not open it even if it can be''. The |
|
721 latter concept is captured by {\it usability}. A link can be marked with the |
|
722 UNUSABLE flag based on policy. This flag can be set by the DP. If a link is |
|
723 marked UNUSABLE, the BPA and DP should not attempt to open it. |
|
724 Usability is different from availability in that it is not an |
|
725 ``inability'' but a ``forbidding''. Note that the peer endpoint of an |
|
726 UNUSABLE link can still open a link and send bundles to the node; those |
|
727 bundles should be accepted and processed by the node because the UNUSABLE |
|
728 flag only disallows the local node from opening the link and sending bundles |
|
729 over it. |
|
730 |
|
731 The reachability of a link pertains to the ability to actually communicate over |
|
732 the link and talk to the peer. The DTN neighbor discovery process, if enabled, |
|
733 will use the underlay network to determine whether other DTN nodes are |
|
734 reachable. Nodes should provide their canonical EIDs as part of the discovery |
|
735 process so that links may be created and used in future decisions. When the |
|
736 CLA ascertains bidirectional communications with some adequate quality (and |
|
737 keeps ascertaining it), the link will be marked REACHABLE. If discovery notices |
|
738 that a neighbor has become unreachable, the REACHABLE flag will be cleared. |
|
739 The REACHABLE flag is meant to express the communication ability currently |
|
740 present in the underlay network and is used to inform decisions made by the DP. |
|
741 |
|
742 |
|
743 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
744 % The four interface sections |
|
745 \input{ds-interface} |
|
746 \input{decision-interface} |
|
747 \input{cla-interface} |
|
748 \input{bpa-interface} |
|
749 % |
|
750 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
751 \subsection{Inter-Component Communication Protocol} \label{sec:iccp} |
|
752 |
|
753 Communications between the BPA and other components will use messages |
|
754 formatted using XML. We currently plan to build upon and extend the |
|
755 external router interface protocol developed by MITRE for this purpose. |
|
756 Some extensions to the support the Data Store interface were described in |
|
757 Section~\ref{sec:ds-iccp-impl}. For example, the MITRE solution |
|
758 uses UDP multicast, but we believe that it will be beneficial to |
|
759 support TCP as well. |
|
760 |
|
761 Details of this protocol will be described in a separate document. |
|
762 |
|
763 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
764 \newpage |
|
765 \begin{thebibliography}{99} |
|
766 |
|
767 %\bibitem{MaxProp} J. Burgess, B. Gallagher, D. Jensen, and B. L. Levine, |
|
768 %``MaxProp: Routing for Vehicle-Based Disruption Tolerant Networks,'' {\em Proc. |
|
769 %IEEE Infocom 2006.} |
|
770 |
|
771 \bibitem{MITRE-IF} J. Bush and R. Durst, ``DTN External Router Interface,'' |
|
772 {\em Presentation at DARPA DTN Phase 2 Kickoff}, August 2006. |
|
773 |
|
774 \bibitem{DTN2} M. Demmer, ``DTN2: DTNRG Reference Implementation''. Available |
|
775 from {\tt http://www.dtnrg.org} |
|
776 |
|
777 \bibitem{Flora2} FLORA-2: An Object-Oriented Knowledge Base Language. |
|
778 {\tt http://flora.sourceforge.net} |
|
779 |
|
780 \bibitem{MJ} J. Mikkelson and C. E. Jones, ``Bundle Protocol Agent Functional |
|
781 Requirements,'' October 2006 (available upon request). |
|
782 |
|
783 \bibitem{OLSR} T. Clausen, Ed. and P. Jacquet Ed., ``Optimized Link State |
|
784 Routing Protocol (OLSR),'' {\tt http://ietf.org/rfc/rfc3626.txt} |
|
785 |
|
786 \bibitem{BP-ID} K. Scott and S. Burleigh, ``Bundle Protocol Specification,'' |
|
787 IRTF DTNRG Internet Draft revision 06, August 2006. |
|
788 |
|
789 \bibitem{BSP-ID} S. Symington, S. Farrell, and H. Weiss, ``Bundle Security |
|
790 Protocol Specification,'' IRTF DTNRG Internet Draft revision 01, March 2006. |
|
791 |
|
792 \bibitem{XSB} XSB: A Logic Programming and Deductive Database system. |
|
793 {\tt http://xsb.sourceforge.net} |
|
794 |
|
795 \end{thebibliography} |
|
796 |
|
797 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
798 \end{document} |
|
799 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |