| < draft-irtf-dtnrg-sdnv-07.txt | draft-irtf-dtnrg-sdnv-08.txt > | |||
|---|---|---|---|---|
| Network Working Group W. Eddy | Network Working Group W. Eddy | |||
| Internet-Draft MTI Systems | Internet-Draft MTI Systems | |||
| Intended status: Informational E. Davies | Intended status: Informational E. Davies | |||
| Expires: April 14, 2011 Folly Consulting | Expires: July 30, 2011 Folly Consulting | |||
| October 11, 2010 | January 26, 2011 | |||
| Using Self-Delimiting Numeric Values in Protocols | Using Self-Delimiting Numeric Values in Protocols | |||
| draft-irtf-dtnrg-sdnv-07 | draft-irtf-dtnrg-sdnv-08 | |||
| Abstract | Abstract | |||
| Self-Delimiting Numeric Values (SDNVs) have recently been introduced | Self-Delimiting Numeric Values (SDNVs) have recently been introduced | |||
| as a field type in proposed Delay-Tolerant Networking protocols. | as a field type in proposed Delay-Tolerant Networking protocols. | |||
| SDNVs encode an arbitrary-length non-negative integer or arbitrary- | SDNVs encode an arbitrary-length non-negative integer or arbitrary- | |||
| length bit-string with minimum overhead. They are intended to | length bit-string with minimum overhead. They are intended to | |||
| provide protocol flexibility without sacrificing economy, and to | provide protocol flexibility without sacrificing economy, and to | |||
| assist in future-proofing protocols under development. This document | assist in future-proofing protocols under development. This document | |||
| describes formats and algorithms for SDNV encoding and decoding, | describes formats and algorithms for SDNV encoding and decoding, | |||
| skipping to change at page 1, line 41 ¶ | skipping to change at page 1, line 41 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on April 14, 2011. | This Internet-Draft will expire on July 30, 2011. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 4, line 19 ¶ | skipping to change at page 4, line 19 ¶ | |||
| through the use of the Window Scale option [RFC1323], which provides | through the use of the Window Scale option [RFC1323], which provides | |||
| a multiplier for the advertised window field. However, the Window | a multiplier for the advertised window field. However, the Window | |||
| Scale multiplier is fixed for the duration of the connection, | Scale multiplier is fixed for the duration of the connection, | |||
| requires support from each end of a TCP connection, and limits the | requires support from each end of a TCP connection, and limits the | |||
| precision of the advertised receive window, so this is certainly a | precision of the advertised receive window, so this is certainly a | |||
| less-than-ideal solution. Because of the field width limit in the | less-than-ideal solution. Because of the field width limit in the | |||
| original design however, the Window Scale is necessary for TCP to | original design however, the Window Scale is necessary for TCP to | |||
| reach high sending rates. | reach high sending rates. | |||
| An IPv4 address is fixed at 32 bits [RFC0791] (as a historical note, | An IPv4 address is fixed at 32 bits [RFC0791] (as a historical note, | |||
| an early version 0 IP header format specification in [IEN21] used | an early version of the IP header format specification in [IEN21] | |||
| variable-length addresses in multiples of 8-bits up to 120-bits). | used variable-length addresses in multiples of 8-bits up to 120- | |||
| Due to the way that subnetting and assignment of address blocks was | bits). Due to the way that subnetting and assignment of address | |||
| performed, the number of IPv4 addresses has been seen as a limit to | blocks was performed, the number of IPv4 addresses has been seen as a | |||
| the growth of the Internet [Hain05]. Two divergent paths to solve | limit to the growth of the Internet [Hain05]. Two divergent paths to | |||
| this problem have been the use of Network Address Translators (NATs) | solve this problem have been the use of Network Address Translators | |||
| and the development of IPv6. NATs have caused a number of other | (NATs) and the development of IPv6. NATs have caused a number of | |||
| issues and problems [RFC2993], leading to increased complexity and | other issues and problems [RFC2993], leading to increased complexity | |||
| fragility, as well as forcing work-arounds to be engineered for many | and fragility, as well as forcing workarounds to be engineered for | |||
| other protocols to function within a NATed environment. The IPv6 | many other protocols to function within a NATed environment. The | |||
| solution's transitional work has been underway for several years, but | IPv6 solution's transitional work has been underway for several | |||
| has still only just begun to have visible impact on the global | years, but has still only just begun to have visible impact on the | |||
| Internet. | global Internet. | |||
| Of course, in both the case of the TCP receive window and IPv4 | Of course, in both the case of the TCP receive window and IPv4 | |||
| address length, the field size chosen by the designers seemed like a | address length, the field size chosen by the designers seemed like a | |||
| good idea at the time. The fields were more than big enough for the | good idea at the time. The fields were more than big enough for the | |||
| originally perceived usage of the protocols, and yet were small | originally perceived usage of the protocols, and yet were small | |||
| enough to allow the headers to remain compact and relatively easy and | enough to allow the headers to remain compact and relatively easy and | |||
| efficient to parse on machines of the time. The fixed sizes that | efficient to parse on machines of the time. The fixed sizes that | |||
| were defined represented a tradeoff between the scalability of the | were defined represented a trade off between the scalability of the | |||
| protocol versus the overhead and efficiency of processing. In both | protocol versus the overhead and efficiency of processing. In both | |||
| cases, these engineering decisions turned out to be painfully | cases, these engineering decisions turned out to be painfully | |||
| restrictive in the longer term. | restrictive in the longer term. | |||
| 1.2. SDNVs for DTN Protocols | 1.2. SDNVs for DTN Protocols | |||
| In specifications for the DTN Bundle Protocol (BP) [RFC5050] and | In specifications for the DTN Bundle Protocol (BP) [RFC5050] and | |||
| Licklider Transmission Protocol (LTP) [RFC5326], SDNVs have been used | Licklider Transmission Protocol (LTP) [RFC5326], SDNVs have been used | |||
| for several fields including identifiers, payload/header lengths, and | for several fields including identifiers, payload/header lengths, and | |||
| serial (sequence) numbers. SDNVs were developed for use in these | serial (sequence) numbers. SDNVs were developed for use in these | |||
| skipping to change at page 5, line 40 ¶ | skipping to change at page 5, line 40 ¶ | |||
| o Sequence numbers as in TCP or SCTP, | o Sequence numbers as in TCP or SCTP, | |||
| o Values used in cryptographic algorithms such as RSA keys, Diffie- | o Values used in cryptographic algorithms such as RSA keys, Diffie- | |||
| Hellman key-agreement, or coordinates of points on elliptic | Hellman key-agreement, or coordinates of points on elliptic | |||
| curves. | curves. | |||
| o Message lengths as used in file transfer protocols. | o Message lengths as used in file transfer protocols. | |||
| o Nonces and cookies. | o Nonces and cookies. | |||
| o Etc. | ||||
| As any bit-field can be interpreted as an unsigned integer, SDNVs can | As any bit-field can be interpreted as an unsigned integer, SDNVs can | |||
| also encode arbitrary-length bit-fields, including bit-fields | also encode arbitrary-length bit-fields, including bit-fields | |||
| representing signed integers or other data types; however, this | representing signed integers or other data types; however, this | |||
| document assumes SDNV encoding and decoding in terms of unsigned | document assumes SDNV encoding and decoding in terms of unsigned | |||
| integers. Implementations may differ in the interface that they | integers. Implementations may differ in the interface that they | |||
| provide to SDNV encoding and decoding functions, in terms of whether | provide to SDNV encoding and decoding functions, in terms of whether | |||
| the values are numeric, bit-fields, etc.; this detail does not alter | the values are numeric, bit-fields, etc.; this detail does not alter | |||
| the representation or algorithms described in this document. | the representation or algorithms described in this document. | |||
| The use of SDNVs rather than fixed length fields gives protocol | The use of SDNVs rather than fixed length fields gives protocol | |||
| designers the ability to ameliorate the consequences of making | designers the ability to ameliorate the consequences of making | |||
| difficult-to-reverse field-sizing decisions, as the SDNV format grows | difficult-to-reverse field-sizing decisions, as the SDNV format grows | |||
| and shrinks depending on the particular value encoded. SDNVs do not | and shrinks depending on the particular value encoded. SDNVs do not | |||
| necessarily provide optimal encodings for values of any particular | necessarily provide optimal encodings for values of any particular | |||
| length, however they allow protocol designers to avoid potential | length, however they allow protocol designers to avoid potential | |||
| blunders in assigning fixed lengths, and remove the complexity | blunders in assigning fixed lengths, and remove the complexity | |||
| involved with either negotiating field lengths or constructing | involved with either negotiating field lengths or constructing | |||
| protocol extensions. | protocol extensions. However, if SDNVs are used to encode bit- | |||
| fields, it is essential that the sender and receiver have a | ||||
| consistent interpretation of the decoded value. This is discussed | ||||
| further in Section 2. | ||||
| To our knowledge, at this time, no IETF transport or network-layer | To our knowledge, at this time, no IETF transport or network-layer | |||
| protocol designed for use outside of the DTN domain has proposed to | protocol designed for use outside of the DTN domain has proposed to | |||
| use SDNVs; however there is no inherent reason not to use SDNVs more | use SDNVs; however there is no inherent reason not to use SDNVs more | |||
| broadly in the future. The two examples cited here, of fields that | broadly in the future. The two examples cited here, of fields that | |||
| have proven too small in general Internet protocols, are only a small | have proven too small in general Internet protocols, are only a small | |||
| sampling of the much larger set of similar instances that the authors | sampling of the much larger set of similar instances that the authors | |||
| can think of. Outside the Internet protocols, within ASN.1 and | can think of. Outside the Internet protocols, within ASN.1 and | |||
| previous ITU protocols, constructs very similar to SDNVs have been | previous ITU protocols, constructs very similar to SDNVs have been | |||
| used for many years due to engineering concerns very similar to those | used for many years due to engineering concerns very similar to those | |||
| skipping to change at page 7, line 10 ¶ | skipping to change at page 7, line 10 ¶ | |||
| Length field of a TLV structure to be an SDNV whose value is the | Length field of a TLV structure to be an SDNV whose value is the | |||
| length of the TLV's Value field. In this way, one can avoid forcing | length of the TLV's Value field. In this way, one can avoid forcing | |||
| large numbers from being directly encoded as an SDNV, yet retain the | large numbers from being directly encoded as an SDNV, yet retain the | |||
| extensibility that using SDNVs grants. | extensibility that using SDNVs grants. | |||
| 2. Definition of SDNVs | 2. Definition of SDNVs | |||
| Early in the work of the DTNRG, it was agreed that the properties of | Early in the work of the DTNRG, it was agreed that the properties of | |||
| an SDNV were useful for DTN protocols. The exact SDNV format used by | an SDNV were useful for DTN protocols. The exact SDNV format used by | |||
| the DTNRG evolved somewhat over time before the publication of the | the DTNRG evolved somewhat over time before the publication of the | |||
| initial RFCs on LTP and the BP. An ealier version bore resemblance | initial RFCs on LTP and the BP. An earlier version bore resemblance | |||
| to the ASN.1 [ASN1] Basic Encoding Rules (BER) [ASN1-BER] for lengths | to the ASN.1 [ASN1] Basic Encoding Rules (BER) [ASN1-BER] for lengths | |||
| (Section 8.1.3 of X.690). The current SDNV format is the one used by | (Section 8.1.3 of X.690). The current SDNV format is the one used by | |||
| ASN.1 BER for encoding tag identifiers greater than or equal to 31 | ASN.1 BER for encoding tag identifiers greater than or equal to 31 | |||
| (Section 8.1.2.4.2 of X.690). A comparison between the current SDNV | (Section 8.1.2.4.2 of X.690). A comparison between the current SDNV | |||
| format and the early SDNV format is made in Section 4. | format and the early SDNV format is made in Section 4. | |||
| The format currently used is very simple. Before encoding, an | The format currently used is very simple. Before encoding, an | |||
| integer is represented as a left-to-right bitstring beginning with | integer is represented as a left-to-right bitstring beginning with | |||
| its most significant bit, and ending with its least signifcant bit. | its most significant bit, and ending with its least significant bit. | |||
| If the bitstring's length is not a multiple of 7, then the string is | If the bitstring's length is not a multiple of 7, then the string is | |||
| left-padded with zeros. When transmitted, the bits are encoded into | left-padded with zeros. When transmitted, the bits are encoded into | |||
| a series of bytes. The low-order 7 bits of each byte in the encoded | a series of bytes. The low-order 7 bits of each byte in the encoded | |||
| format are taken left-to-right from the integer's bitstring | format are taken left-to-right from the integer's bitstring | |||
| representation. The most significant bit of each byte specifies | representation. The most significant bit of each byte specifies | |||
| whether it is the final byte of the encoded value (when it holds a | whether it is the final byte of the encoded value (when it holds a | |||
| 0), or not (when it holds a 1). | 0), or not (when it holds a 1). | |||
| For example: | For example: | |||
| skipping to change at page 8, line 4 ¶ | skipping to change at page 8, line 4 ¶ | |||
| discarded by the SDNV encoder. Protocols that use SDNVs should not | discarded by the SDNV encoder. Protocols that use SDNVs should not | |||
| rely on leading-zeros being retained after encoding and decoding | rely on leading-zeros being retained after encoding and decoding | |||
| operations. (2) When decoding SDNVs, the relevant number of leading | operations. (2) When decoding SDNVs, the relevant number of leading | |||
| zeros required to pad up to a machine word or other natural data unit | zeros required to pad up to a machine word or other natural data unit | |||
| might be added. These are put in the most-significant positions in | might be added. These are put in the most-significant positions in | |||
| order to not change the value of the number. Protocols using SDNVs | order to not change the value of the number. Protocols using SDNVs | |||
| should consider situations where lost zero-padding may be | should consider situations where lost zero-padding may be | |||
| problematic. | problematic. | |||
| The issues of zero-padding are particularly relevant where an SDNV is | The issues of zero-padding are particularly relevant where an SDNV is | |||
| being used to represent a bit field to be transmitted by a protocol. | being used to represent a bit-field to be transmitted by a protocol. | |||
| The specification of the protocol and any associated IANA registry | The specification of the protocol and any associated IANA registry | |||
| should specify the allocation and usage of bit positions within the | should specify the allocation and usage of bit positions within the | |||
| unencoded field. Both sender and receiver will know of this | unencoded field. Unassigned and reserved bits in the unencoded field | |||
| allocation so that they are implicitly aware of the width of the bit | will be treated as zeros by the SDNV encoding prior to transmission. | |||
| field. Unassigned and reserved bits in the unencoded field will be | ||||
| treated as zeroes by the SDNV encoding prior to transmission. | ||||
| Assuming the bit positions are numbered starting from 0 at the least | Assuming the bit positions are numbered starting from 0 at the least | |||
| significant bit position in the integer representation, then if | significant bit position in the integer representation, then if | |||
| higher numbered positions in the field contain all zeroes, the | higher numbered positions in the field contain all zeros, the | |||
| encoding process may not transmit these bits explicitly (e.g., if all | encoding process may not transmit these bits explicitly (e.g., if all | |||
| the bit positions numbered 7 or higher are zeroes then the | the bit positions numbered 7 or higher are zeros then the transmitted | |||
| transmitted SDNV can consist of just one octet). On reception the | SDNV can consist of just one octet). On reception the decoding | |||
| decoding process will treat any untransmitted higher numbered bits as | process will treat any untransmitted higher numbered bits as zeros. | |||
| zeroes. | To ensure correct operation of the protocol, the sender and receiver | |||
| must have a consistent interpretation of the width of the bit-field. | ||||
| This can be achieved in various ways: | ||||
| o the bit-field width is implicitly defined by the version of the | ||||
| protocol in use in the sender and receiver, | ||||
| o sending the width of the bit-field explicitly in a separate item, | ||||
| o the higher numbered bits can be safely ignored by the receiver | ||||
| (e.g., because they represent optimizations), or | ||||
| o marking the highest numbered bit by prepending a 1 bit to the bit- | ||||
| field. | ||||
| The protocol specification must record how the consistent | ||||
| interpretation is achieved. | ||||
| The SDNV encoding technique is also known as Variable Byte Encoding | ||||
| (see Section 5.3.1 of [Manning09]) and is equivalent to Base-128 | ||||
| Elias Gamma Encoding (see Section 5.3.2 of [Manning09] and Section | ||||
| 3.5 of [Sayood02]). However the primary motivation for SDNVs is to | ||||
| provide an extensible protocol framework rather than optimal data | ||||
| compression which is the motivation behind the other uses of the | ||||
| technique. [Manning09] points out that the key feature of this | ||||
| encoding is that it is 'prefix free' meaning that no code is a prefix | ||||
| of any other, which an alternative way of expressing the self- | ||||
| delimiting property | ||||
| 3. Basic Algorithms | 3. Basic Algorithms | |||
| This section describes some simple algorithms for creating and | This section describes some simple algorithms for creating and | |||
| parsing SDNV fields. These may not be the most efficient algorithms | parsing SDNV fields. These may not be the most efficient algorithms | |||
| possible, however, they are easy to read, understand, and implement. | possible, however, they are easy to read, understand, and implement. | |||
| Appendix A contains Python source code implementing the routines | Appendix A contains Python source code implementing the routines | |||
| described here. | described here. The algorithms presented here are convenient for | |||
| converting between an internal data block and serialized data stream | ||||
| associated with a transmission device. Other approaches are possible | ||||
| with different efficiencies and trade-offs. | ||||
| 3.1. Encoding Algorithm | 3.1. Encoding Algorithm | |||
| There is a very simple algorithm for the encoding operation that | There is a very simple algorithm for the encoding operation that | |||
| converts a non-negative integer (value n, of length 1+floor(log n) | converts a non-negative integer (value n, of length 1+floor(log n) | |||
| bits) into an SDNV. This algorithm takes n as its only argument and | bits) into an SDNV. This algorithm takes n as its only argument and | |||
| returns a string of bytes: | returns a string of bytes: | |||
| o (Initial Step) Set a variable X to a byte sharing the least | o (Initial Step) Set a variable X to a byte sharing the least | |||
| significant 7 bits of n, and with 0 in the most significant bit, | significant 7 bits of n, and with 0 in the most significant bit, | |||
| skipping to change at page 9, line 44 ¶ | skipping to change at page 9, line 47 ¶ | |||
| the expected length of the result and fill that buffer one byte at a | the expected length of the result and fill that buffer one byte at a | |||
| time from the right end. | time from the right end. | |||
| If, for some reason, an implementation requires an encoded SDNV to be | If, for some reason, an implementation requires an encoded SDNV to be | |||
| some specific length (possibly related to a machine word), any | some specific length (possibly related to a machine word), any | |||
| leftmost zero-padding included needs to properly set the high-order | leftmost zero-padding included needs to properly set the high-order | |||
| bit in each byte of padding. | bit in each byte of padding. | |||
| 3.2. Decoding Algorithm | 3.2. Decoding Algorithm | |||
| Decoding SNDVs is a more difficult operation than encoding them, due | Decoding SDNVs is a more difficult operation than encoding them, due | |||
| to the fact that no bound on the resulting value is known until the | to the fact that no bound on the resulting value is known until the | |||
| SDNV is parsed, at which point the value itself is already known. | SDNV is parsed, at which point the value itself is already known. | |||
| This means that if space is allocated for decoding the value of an | This means that if space is allocated for decoding the value of an | |||
| SDNV into, it is never known whether this space will be overflowed | SDNV into, it is never known whether this space will be overflowed | |||
| until it is 7 bits away from happening. | until it is 7 bits away from happening. | |||
| (Initial Step) Set the result to 0. Set an index to the first byte | (Initial Step) Set the result to 0. Set an index to the first byte | |||
| of the encoded SDNV. | of the encoded SDNV. | |||
| (Recursion Step) Shift the result left 7 bits. Add the low-order 7 | (Recursion Step) Shift the result left 7 bits. Add the low-order 7 | |||
| skipping to change at page 13, line 49 ¶ | skipping to change at page 13, line 49 ¶ | |||
| | | | | | | | | | | | | | | |||
| | 130 | N/A | 2^910 - 1 | N/A | 130 | | | 130 | N/A | 2^910 - 1 | N/A | 130 | | |||
| | | | | | | | | | | | | | | |||
| | 256 | N/A | 2^1792 - 1 | N/A | 256 | | | 256 | N/A | 2^1792 - 1 | N/A | 256 | | |||
| +-------+---------------+-------------+---------------+-------------+ | +-------+---------------+-------------+---------------+-------------+ | |||
| Table 1 | Table 1 | |||
| In general, it seems like the most promising use of SDNVs may be to | In general, it seems like the most promising use of SDNVs may be to | |||
| define the Length field of a TLV structure to be an SDNV whose value | define the Length field of a TLV structure to be an SDNV whose value | |||
| is the length of the TLV's Value field. This leverages the strengths | is the length of the TLV's Value field. As previously discussed, | |||
| of the SDNV format and limits the effects of its weaknesses. | this leverages the strengths of the SDNV format and limits the | |||
| effects of its weaknesses. | ||||
| Another aspect of comparison between SDNVs and alternatives using | Another aspect of comparison between SDNVs and alternatives using | |||
| fixed-length fields is the result of errors in transmission. Bit- | fixed-length fields is the result of errors in transmission. Bit- | |||
| errors in an SDNV can result in either errors in the decoded value, | errors in an SDNV can result in either errors in the decoded value, | |||
| or parsing errors in subsequent fields of the protocol. In fixed- | or parsing errors in subsequent fields of the protocol. In fixed- | |||
| length fields, bit errors always result in errors to the decoded | length fields, bit errors always result in errors to the decoded | |||
| value rather than parsing errors in subsequent fields. If the | value rather than parsing errors in subsequent fields. If the | |||
| decoded values from either type of field encoding (SDNV or fixed- | decoded values from either type of field encoding (SDNV or fixed- | |||
| length) are used as indexes, offsets, or lengths of further fields in | length) are used as indexes, offsets, or lengths of further fields in | |||
| the protocol, similar failures result. | the protocol, similar failures result. | |||
| skipping to change at page 17, line 16 ¶ | skipping to change at page 17, line 16 ¶ | |||
| Scott Burleigh, Manikantan Ramadas, Michael Demmer, Stephen Farrell, | Scott Burleigh, Manikantan Ramadas, Michael Demmer, Stephen Farrell, | |||
| and other members of the IRTF DTN Research Group contributed to the | and other members of the IRTF DTN Research Group contributed to the | |||
| development and usage of SDNVs in DTN protocols. George Jones and | development and usage of SDNVs in DTN protocols. George Jones and | |||
| Keith Scott from Mitre, Lloyd Wood, Gerardo Izquierdo, Joel Halpern, | Keith Scott from Mitre, Lloyd Wood, Gerardo Izquierdo, Joel Halpern, | |||
| Peter TB Brett, Kevin Fall, and Elwyn Davies also contributed useful | Peter TB Brett, Kevin Fall, and Elwyn Davies also contributed useful | |||
| comments on and criticisms of this document. DTNRG last call | comments on and criticisms of this document. DTNRG last call | |||
| comments on the draft were sent to the mailing list by Lloyd Wood, | comments on the draft were sent to the mailing list by Lloyd Wood, | |||
| Will Ivancic, Jim Wyllie, William Edwards, Hans Kruse, Janico | Will Ivancic, Jim Wyllie, William Edwards, Hans Kruse, Janico | |||
| Greifenberg, Teemu Karkkainen, Stephen Farrell, and Scott Burleigh. | Greifenberg, Teemu Karkkainen, Stephen Farrell, and Scott Burleigh. | |||
| Further constructive comments were incorporated from Dave Crocker. | Further constructive comments were incorporated from Dave Crocker, | |||
| Lachlan Andrew and Michael Welzl. | ||||
| Work on this document was performed at NASA's Glenn Research Center, | Work on this document was performed at NASA's Glenn Research Center, | |||
| in support of the NASA Space Communications Architecture Working | in support of the NASA Space Communications Architecture Working | |||
| Group (SCAWG), NASA's Earth Science Technology Office (ESTO), and the | Group (SCAWG), NASA's Earth Science Technology Office (ESTO), and the | |||
| FAA/Eurocontrol Future Communications Study (FCS) in the 2005-2007 | FAA/Eurocontrol Future Communications Study (FCS) in the 2005-2007 | |||
| timeframe, while the editor was an employee of Verizon Federal | time frame, while the editor was an employee of Verizon Federal | |||
| Network Systems. | Network Systems. | |||
| 8. Informative References | 8. Informative References | |||
| [ASN1] ITU-T Rec. X.680, "Abstract Syntax Notation One (ASN.1). | [ASN1] ITU-T Rec. X.680, "Abstract Syntax Notation One (ASN.1). | |||
| Specification of Basic Notation", ISO/IEC 8824-1:2002, | Specification of Basic Notation", ISO/IEC 8824-1:2002, | |||
| 2002. | 2002. | |||
| [ASN1-BER] | [ASN1-BER] | |||
| ITU-T Rec. X.690, "Abstract Syntax Notation One (ASN.1). | ITU-T Rec. X.690, "Abstract Syntax Notation One (ASN.1). | |||
| skipping to change at page 18, line 34 ¶ | skipping to change at page 18, line 34 ¶ | |||
| [I-D.hixie-thewebsocketprotocol] | [I-D.hixie-thewebsocketprotocol] | |||
| Hickson, I., "The WebSocket protocol", | Hickson, I., "The WebSocket protocol", | |||
| draft-hixie-thewebsocketprotocol-76 (work in progress), | draft-hixie-thewebsocketprotocol-76 (work in progress), | |||
| May 2010. | May 2010. | |||
| [IEN21] Cerf, V. and J. Postel, "Specification of Internetwork | [IEN21] Cerf, V. and J. Postel, "Specification of Internetwork | |||
| Transmission Control Program: TCP Version 3", Internet | Transmission Control Program: TCP Version 3", Internet | |||
| Experimental Note 21, January 1978. | Experimental Note 21, January 1978. | |||
| [Manning09] | ||||
| Manning, c., Raghavan, P., and H. Schuetze, "Introduction | ||||
| to Information Retrieval", Cambridge University | ||||
| Press ISBN-13: 978-0521865715, 2009, | ||||
| <http://informationretrieval.org/>. | ||||
| [RFC0713] Haverty, J., "MSDTP-Message Services Data Transmission | [RFC0713] Haverty, J., "MSDTP-Message Services Data Transmission | |||
| Protocol", RFC 713, April 1976. | Protocol", RFC 713, April 1976. | |||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
| September 1981. | September 1981. | |||
| [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
| RFC 793, September 1981. | RFC 793, September 1981. | |||
| [RFC1323] Jacobson, V., Braden, B., and D. Borman, "TCP Extensions | [RFC1323] Jacobson, V., Braden, B., and D. Borman, "TCP Extensions | |||
| skipping to change at page 20, line 5 ¶ | skipping to change at page 19, line 24 ¶ | |||
| Specification", RFC 5050, November 2007. | Specification", RFC 5050, November 2007. | |||
| [RFC5325] Burleigh, S., Ramadas, M., and S. Farrell, "Licklider | [RFC5325] Burleigh, S., Ramadas, M., and S. Farrell, "Licklider | |||
| Transmission Protocol - Motivation", RFC 5325, | Transmission Protocol - Motivation", RFC 5325, | |||
| September 2008. | September 2008. | |||
| [RFC5326] Ramadas, M., Burleigh, S., and S. Farrell, "Licklider | [RFC5326] Ramadas, M., Burleigh, S., and S. Farrell, "Licklider | |||
| Transmission Protocol - Specification", RFC 5326, | Transmission Protocol - Specification", RFC 5326, | |||
| September 2008. | September 2008. | |||
| [Sayood02] | ||||
| Sayood, K., "Lossless Data Compression", Academic | ||||
| Press ISBN-13: 978-0126208610, December 2002, | ||||
| <http://books.google.co.uk/books?id=LjQiGwyabVwC>. | ||||
| Appendix A. SNDV Python Source Code | Appendix A. SNDV Python Source Code | |||
| # sdnv_decode() takes a string argument (s), which is assumed to be | # sdnv_decode() takes a string argument (s), which is assumed to be | |||
| # an SDNV, and optionally a number (slen) for the maximum number of | # an SDNV, and optionally a number (slen) for the maximum number of | |||
| # bytes to parse from the string. The function returns a pair of | # bytes to parse from the string. The function returns a pair of | |||
| # the non-negative integer n that is the numeric value encoded in | # the non-negative integer n that is the numeric value encoded in | |||
| # the SDNV, and integer that is the distance parsed into the input | # the SDNV, and integer that is the distance parsed into the input | |||
| # string. If the slen argument is not given (or is not a non-zero | # string. If the slen argument is not given (or is not a non-zero | |||
| # number) then, s is parsed up to the first byte whose high-order | # number) then, s is parsed up to the first byte whose high-order | |||
| # bit is 0 -- the length of the SDNV portion of s does not have to | # bit is 0 -- the length of the SDNV portion of s does not have to | |||
| End of changes. 21 change blocks. | ||||
| 40 lines changed or deleted | 82 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||