Network Working Group | J. A. Zinky |
Internet-Draft | A. Caro |
Intended status: Experimental | Raytheon BBN Technologies |
Expires: February 22, 2013 | G. Stein |
Laboratory for Telecommunications Sciences | |
August 23, 2012 |
Bundle Protocol Erasure Coding Basic Objects
draft-zinky-dtnrg-erasure-coding-objects-00
This document defines the Basic Data Objects formats for the Erasure Coding Extension [ErasureCoding] to the Delay and Disruption Tolerant Network (DTN) Bundle Protocol [RFC5050]. The File Data Object format is used to store a binary file and includes metadata for the file name and path name. The Bundle Data Object format is used to store a large DTN Bundle and to map its implicit Transfer Specification to the headers of the Encoding Bundles.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http:/⁠/⁠datatracker.ietf.org/⁠drafts/⁠current/⁠.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on February 22, 2013.
Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http:/⁠/⁠trustee.ietf.org/⁠license-⁠info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Data Object formats define how an Application Layer data structure will be stored as an array of octets that will be transmitted using the Erasure Coding Extension to the Bundle protocol. The octet array will be divided into equal length Chunks that are the input and output of the Coding Layer. The Coding Layer does not offer any fields for storing the Data Object Length in its headers. Data Object formats have the responsibility for storing the Data Object Length, the Data Object itself, associated metadata, and padding within the octet array. The Coding Layer offers a service that MAY deliver Chunks as they are decoded instead of waiting for all chunks to be decoded. But both Data Object types defined in this document can not make use this feature and MUST have every Chunk delivered all together.
The Data Object Format MAY put requirements and constraints into the Data Object Layer's Transfer Specification. The File Data Object format does not define any restrictions. The Bundle Data Object format defines an actionable Transfer Specification that is based on the implicit transfer specification in the original Bundle Header.
This document defines two Data Object formats; a File Data Object format and a Bundle Data Object format. The File Data Object format is used to transfer a binary file between two applications. The Bundle Data Object format is used by DTN Bundle Protocol Agents (BPAs) to divide large Bundles into Chunks to take advantage of Forward Error Correction services. Each format is described in its own section. Future documents could define, additional Data Object formats, such as mime [RFC2045], zip, or video. This document ends with discussions on Security and IANA considerations.
The terminology used in this document follows the terminology of the Erasure Coding Extension to the Bundle Protocol [ErasureCoding]. Only terms specific to the Basic Data Objects are described in this section.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
The File Data Object format stores a binary data file and the associated metadata about its name and intended storage path at the destination. The file format contains three sections, the file header, the file data, and the padding. The First Chunk MUST contain the whole file header, which constrains the minimum Chunk Length to be at least as long as the file header. Note that the file header is variable length, thus this constraint is specific to the Data Object. Only the last Chunk MAY contain padding, all other Chunks MUST NOT contain Padding. Except for the constraint above, the File Data Object Format does not restrict the Transfer Specification, that is Application Layer is responsibility for creating the Transfer Specification. The encoding and decoding process follows the procedures in the Erasure Coding Extension [ErasureCoding].
The octet array has the following format:
Field | Type | Description |
---|---|---|
Type | 4 Octets | 0xECECECEC: File Data Object Format Type constant. A magic number used to check that the decode process was successful. |
Version | 4 Octets | 0x00000001: Version number of header which increments with newer versions. |
Format: | 4 Octets | 0x00000001: Format of the File Data Object content. A value of one (1) specifies the 8-bit binary format. Other formats could be defined in the future, such as compressed or radix-64. |
File UUID | 128 bits | Must match Data Object UUID in Erasure Coding Extension Block. |
File Data Length | 8 Octets | Length of file in octets. |
File Name | String | Name and extension of the File Data. |
4 Octets | File Name Length, not including null terminator. | |
Octets | Array of Octets for File Name, whose length is File Name Length. | |
Octet | x00: Null Terminator. | |
Path Name | String | Path For the File Data. |
4 Octets | Path Name Length, not including null terminator. | |
Octets | Array of Octets for Path Name, whose length is Path Name Length. | |
Octet | x00: Null Terminator. | |
File Data | Octets | Octet array for the File Data, whose length is File Data Length. |
Padding | Octets | Extra Octets needed to pad the last Chunk to be the full Chunk Length. The sender MUST pad with x00. The receiver MUST ignored padding octets. |
The Bundle Data Object Format is used to divide a large Bundle into many smaller Chunks and to transfer those Chunks as Encoding Bundles using the Forward Error Correcting (FEC) services of the Erasure Coding Extension. The bundle format contains only two sections, the binary format of the bundle and padding. The Bundle is stored into the octet array using its over-the-wire representation. This allows for easy capture and reinsertion into the DTN. The octet array has the following format.
Field | Type | Description |
---|---|---|
Bundle Data | Octets | Octet array that is the over-the-wire binary format for the large Bundle. The destination MUST parse the large Bundle itself to obtain the Data Object Length of the large Bundle. |
Padding | Octets | Extra Octets needed to pad the last Chunk to be the full Chunk Length. The sender MUST pad with x00. The receiver MUST ignored these octets. |
The Source Encoder in the Sending BPA performs the following steps to encode a large Bundle.
The following steps are performed by the Destination Decoder to decode a group of Encoding Bundles back into the original large Bundle.
The Transfer Specification is derived from the header of the large Bundle. Fields are extracted from the bundle header and are copied into the primary block and extension blocks of the Encoding Bundles. The following fields in the large Bundle are used in the Transfer Specification:
No additional security considerations have been identified beyond those described in [ErasureCoding]
The Basic Data Object Formats define two types. The assigned IDs should be less than 128 in order to fit into one octet using SDNV values. The reference implementation uses the following Data Object Format Types:
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. |
[RFC5050] | Scott, K. and S. Burleigh, "Bundle Protocol Specification", RFC 5050, November 2007. |
[RFC6256] | Eddy, W. and E. Davies, "Using Self-Delimiting Numeric Values in Protocols", RFC 6256, May 2011. |
[ErasureCoding] | Zinky, J., Caro, A. and G. Stein, "Bundle Protocol Erasure Coding Extension", Internet-Draft draft-zinky-dtnrg-erasure-coding-extension-00, Aug 2012. |
[RFC2045] | Freed, N. and N.S. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. |