diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc5651.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc5651.txt')
-rw-r--r-- | doc/rfc/rfc5651.txt | 1907 |
1 files changed, 1907 insertions, 0 deletions
diff --git a/doc/rfc/rfc5651.txt b/doc/rfc/rfc5651.txt new file mode 100644 index 0000000..2e871d7 --- /dev/null +++ b/doc/rfc/rfc5651.txt @@ -0,0 +1,1907 @@ + + + + + + +Network Working Group M. Luby +Request for Comments: 5651 M. Watson +Obsoletes: 3451 L. Vicisano +Category: Standards Track Qualcomm, Inc. + October 2009 + + + Layered Coding Transport (LCT) Building Block + +Abstract + + The Layered Coding Transport (LCT) Building Block provides transport + level support for reliable content delivery and stream delivery + protocols. LCT is specifically designed to support protocols using + IP multicast, but it also provides support to protocols that use + unicast. LCT is compatible with congestion control that provides + multiple rate delivery to receivers and is also compatible with + coding techniques that provide reliable delivery of content. This + document obsoletes RFC 3451. + +Status of This Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (c) 2009 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 BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + modifications of such material outside the IETF Standards Process. + + + +Luby, et al. Standards Track [Page 1] + +RFC 5651 LCT Building Block October 2009 + + + Without obtaining an adequate license from the person(s) controlling + the copyright in such materials, this document may not be modified + outside the IETF Standards Process, and derivative works of it may + not be created outside the IETF Standards Process, except to format + it for publication as an RFC or to translate it into languages other + than English. + +Table of Contents + + 1. Introduction ....................................................3 + 2. Rationale .......................................................3 + 3. Functionality ...................................................4 + 4. Applicability ...................................................7 + 4.1. Environmental Requirements and Considerations ..............9 + 4.2. Delivery Service Models ...................................10 + 4.3. Congestion Control ........................................13 + 5. Packet Header Fields ...........................................13 + 5.1. LCT Header Format .........................................13 + 5.2. Header-Extension Fields ...................................18 + 5.2.1. General ............................................18 + 5.2.2. EXT_TIME Header Extension ..........................20 + 6. Operations .....................................................23 + 6.1. Sender Operation ..........................................23 + 6.2. Receiver Operation ........................................25 + 7. Requirements from Other Building Blocks ........................26 + 8. Security Considerations ........................................28 + 8.1. Session and Object Multiplexing and Termination ...........28 + 8.2. Time Synchronization ......................................29 + 8.3. Data Transport ............................................29 + 9. IANA Considerations ............................................29 + 9.1. Namespace Declaration for LCT Header Extension Types ......29 + 9.2. LCT Header Extension Type Registration ....................30 + 10. Acknowledgments ...............................................30 + 11. Changes from RFC 3451 .........................................31 + 12. References ....................................................31 + 12.1. Normative References .....................................31 + 12.2. Informative References ...................................32 + + + + + + + + + + + + + + +Luby, et al. Standards Track [Page 2] + +RFC 5651 LCT Building Block October 2009 + + +1. Introduction + + Layered Coding Transport (LCT) provides transport level support for + reliable content delivery and stream delivery protocols. Layered + Coding Transport is specifically designed to support protocols using + IP multicast, but it also provides support to protocols that use + unicast. Layered Coding Transport is compatible with congestion + control that provides multiple rate delivery to receivers and is also + compatible with coding techniques that provide reliable delivery of + content. + + This document describes a building block as defined in [RFC3048]. + This document is a product of the IETF RMT WG and follows the general + guidelines provided in [RFC3269]. + + [RFC3451], which was published in the "Experimental" category and + which is obsoleted by this document, contained a previous version of + the protocol. + + This Proposed Standard specification is thus based on and backwards + compatible with the protocol defined in [RFC3451] updated according + to accumulated experience and growing protocol maturity since its + original publication. Said experience applies both to this + specification itself and to congestion control strategies related to + the use of this specification. + + 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]. + +2. Rationale + + LCT provides transport level support for massively scalable protocols + using the IP multicast network service. The support that LCT + provides is common to a variety of very important applications, + including reliable content delivery and streaming applications. + + An LCT session comprises multiple channels originating at a single + sender that are used for some period of time to carry packets + pertaining to the transmission of one or more objects that can be of + interest to receivers. The logic behind defining a session as + originating from a single sender is that this is the right + granularity to regulate packet traffic via congestion control. One + rationale for using multiple channels within the same session is that + there are massively scalable congestion control protocols that use + multiple channels per session. These congestion control protocols + are considered to be layered because a receiver joins and leaves + channels in a layered order during its participation in the session. + + + +Luby, et al. Standards Track [Page 3] + +RFC 5651 LCT Building Block October 2009 + + + The use of layered channels is also useful for streaming + applications. + + There are coding techniques that provide massively scalable + reliability and asynchronous delivery that are compatible with both + layered congestion control and with LCT. When all are combined, the + result is a massively scalable reliable asynchronous content delivery + protocol that is network friendly. LCT also provides functionality + that can be used for other applications as well, e.g., layered + streaming applications. + + LCT avoids providing functionality that is not massively scalable. + For example, LCT does not provide any mechanisms for sending + information from receivers to senders, although this does not rule + out protocols that both use LCT and do require sending information + from receivers to senders. + + LCT includes general support for congestion control that must be + used. It does not, however, specify which congestion control should + be used. The rationale for this is that congestion control must be + provided by any protocol that is network friendly, and yet the + different applications that can use LCT will not have the same + requirements for congestion control. For example, a content delivery + protocol may strive to use all available bandwidth between receivers + and the sender. It must, therefore, drastically back off its rate + when there is competing traffic. On the other hand, a streaming + delivery protocol may strive to maintain a constant rate instead of + trying to use all available bandwidth, and it may not back off its + rate as fast when there is competing traffic. + + Beyond support for congestion control, LCT provides a number of + fields and supports functionality commonly required by many + protocols. For example, LCT provides a Transmission Session ID that + can be used to identify to which session each received packet + belongs. This is important because a receiver may be joined to many + sessions concurrently, and thus it is very useful to be able to + demultiplex packets as they arrive according to the session to which + they belong. As another example, there are optional fields within + the LCT packet header for identifying the object about which + information is carried in the packet payload. + +3. Functionality + + An LCT session consists of a set of logically grouped LCT channels + associated with a single sender carrying packets with LCT headers for + one or more objects. An LCT channel is defined by the combination of + a sender and an address associated with the channel by the sender. A + + + + +Luby, et al. Standards Track [Page 4] + +RFC 5651 LCT Building Block October 2009 + + + receiver joins a channel to start receiving the data packets sent to + the channel by the sender, and a receiver leaves a channel to stop + receiving data packets from the channel. + + LCT is meant to be combined with other building blocks so that the + resulting overall protocol is massively scalable. Scalability refers + to the behavior of the protocol in relation to the number of + receivers and network paths, their heterogeneity, and the ability to + accommodate dynamically variable sets of receivers. Scalability + limitations can come from memory or processing requirements, or from + the amount of feedback control and redundant data packet traffic + generated by the protocol. In turn, such limitations may be a + consequence of the features that a complete reliable content delivery + or stream delivery protocol is expected to provide. + + The LCT header provides a number of fields that are useful for + conveying in-band session information to receivers. One of the + required fields is the Transmission Session ID (TSI), which allows + the receiver of a session to uniquely identify received packets as + part of the session. Another required field is the Congestion + Control Information (CCI), which allows the receiver to perform the + required congestion control on the packets received within the + session. Other LCT fields provide optional but often very useful + additional information for the session. For example, the Transport + Object Identifier (TOI) identifies for which object the packet + contains data and flags are included for indicating the close of the + session and the close of sending packets for an object. Header + extensions can carry additional fields that, for example, can be used + for packet authentication or to convey various kinds of timing + information: the Sender Current Time (SCT) conveys the time when the + packet was sent from the sender to the receiver, the Expected + Residual Time (ERT) conveys the amount of time the session or + transmission object will be continued for, and Session Last Change + (SLC) conveys the time when objects have been added, modified, or + removed from the session. + + LCT provides support for congestion control. Congestion control MUST + be used that conforms to [RFC2357] between receivers and the sender + for each LCT session. Congestion control refers to the ability to + adapt throughput to the available bandwidth on the path from the + sender to a receiver, and to share bandwidth fairly with competing + flows such as TCP. Thus, the total flow of packets flowing to each + receiver participating in an LCT session MUST NOT compete unfairly + with existing flow-adaptive protocols such as TCP. + + A multiple rate or a single rate congestion control protocol can be + used with LCT. For multiple rate protocols, a session typically + consists of more than one channel, and the sender sends packets to + + + +Luby, et al. Standards Track [Page 5] + +RFC 5651 LCT Building Block October 2009 + + + the channels in the session at rates that do not depend on the + receivers. Each receiver adjusts its reception rate during its + participation in the session by joining and leaving channels + dynamically depending on the available bandwidth to the sender + independent of all other receivers. Thus, for multiple rate + protocols, the reception rate of each receiver may vary dynamically + independent of the other receivers. + + For single rate protocols, a session typically consists of one + channel and the sender sends packets to the channel at variable rates + over time depending on feedback from receivers. Each receiver + remains joined to the channel during its participation in the + session. Thus, for single rate protocols, the reception rate of each + receiver may vary dynamically but in coordination with all receivers. + + Generally, a multiple rate protocol is preferable to a single rate + protocol in a heterogeneous receiver environment, since generally it + more easily achieves scalability to many receivers and provides + higher throughput to each individual receiver. Use of the multiple + rate congestion control scheme defined in [RFC3738] is RECOMMENDED. + Alternative multiple rate congestion control protocols are described + in [VIC1998] and [BYE2000]. A possible single rate congestion + control protocol is described in [RIZ2000]. + + Layered coding refers to the ability to produce a coded stream of + packets that can be partitioned into an ordered set of layers. The + coding is meant to provide some form of reliability, and the layering + is meant to allow the receiver experience (in terms of quality of + playout, or overall transfer speed) to vary in a predictable way + depending on how many consecutive layers of packets the receiver is + receiving. + + The concept of layered coding was first introduced with reference to + audio and video streams. For example, the information associated + with a TV broadcast could be partitioned into three layers, + corresponding to black and white, color, and HDTV quality. Receivers + can experience different quality without the need for the sender to + replicate information in the different layers. + + The concept of layered coding can be naturally extended to reliable + content delivery protocols when Forward Error Correction (FEC) + techniques are used for coding the data stream. Descriptions of this + can be found in [RIZ1997a], [RIZ1997b], [GEM2000], [VIC1998], and + [BYE1998]. By using FEC, the data stream is transformed in such a + way that reconstruction of a data object does not depend on the + reception of specific data packets, but only on the number of + different packets received. As a result, by increasing the number of + layers from which a receiver is receiving, the receiver can reduce + + + +Luby, et al. Standards Track [Page 6] + +RFC 5651 LCT Building Block October 2009 + + + the transfer time accordingly. Using FEC to provide reliability can + increase scalability dramatically in comparison to other methods for + providing reliability. More details on the use of FEC for reliable + content delivery can be found in [RFC3453]. + + Reliable protocols aim at giving guarantees on the reliable delivery + of data from the sender to the intended recipients. Guarantees vary + from simple packet data integrity to reliable delivery of a precise + copy of an object to all intended recipients. Several reliable + content delivery protocols have been built on top of IP multicast + using methods other than FEC, but scalability was not the primary + design goal for many of them. + + Two of the key difficulties in scaling reliable content delivery + using IP multicast are dealing with the amount of data that flows + from receivers back to the sender and the associated response + (generally data retransmissions) from the sender. Protocols that + avoid any such feedback, and minimize the amount of retransmissions, + can be massively scalable. LCT can be used in conjunction with FEC + codes or a layered codec to achieve reliability with little or no + feedback. + + Protocol instantiations (PIs) MAY be built by combining the LCT + framework with other components. A complete protocol instantiation + that uses LCT MUST include a congestion control protocol that is + compatible with LCT and that conforms to [RFC2357]. A complete + protocol instantiation that uses LCT MAY include a scalable + reliability protocol that is compatible with LCT, it MAY include a + session control protocol that is compatible with LCT, and it MAY + include other protocols such as security protocols. + +4. Applicability + + An LCT session comprises a logically related set of one or more LCT + channels originating at a single sender. The channels are used for + some period of time to carry packets containing LCT headers, and + these headers pertain to the transmission of one or more objects that + can be of interest to receivers. + + LCT is most applicable for delivery of objects or streams in a + session of substantial length, i.e., objects or streams that range in + aggregate length from hundreds of kilobytes to many gigabytes, and + where the duration of the session is on the order of tens of seconds + or more. + + As an example, an LCT session could be used to deliver a TV program + using three LCT channels. Receiving packets from the first LCT + channel could allow black and white reception. Receiving the first + + + +Luby, et al. Standards Track [Page 7] + +RFC 5651 LCT Building Block October 2009 + + + two LCT channels could also permit color reception. Receiving all + three channels could allow HDTV quality reception. Objects in this + example could correspond to individual TV programs being transmitted. + + As another example, a reliable LCT session could be used to reliably + deliver hourly updated weather maps (objects) using ten LCT channels + at different rates, using FEC coding. A receiver may join and + concurrently receive packets from subsets of these channels, until it + has enough packets in total to recover the object, then leave the + session (or remain connected listening for session description + information only) until it is time to receive the next object. In + this case, the quality metric is the time required to receive each + object. + + Before joining a session, the receivers must obtain enough of the + session description to start the session. This includes the relevant + session parameters needed by a receiver to participate in the + session, including all information relevant to congestion control. + The session description is determined by the sender, and is typically + communicated to the receivers out-of-band. In some cases, as + described later, parts of the session description that are not + required to initiate a session MAY be included in the LCT header or + communicated to a receiver out-of-band after the receiver has joined + the session. + + An encoder MAY be used to generate the data that is placed in the + packet payload in order to provide reliability. A suitable decoder + is used to reproduce the original information from the packet + payload. There MAY be a reliability header that follows the LCT + header if such an encoder and decoder is used. The reliability + header helps to describe the encoding data carried in the payload of + the packet. The format of the reliability header depends on the + coding used, and this is negotiated out-of-band. As an example, one + of the FEC headers described in [RFC5052] could be used. + + For LCT, when multiple rate congestion control is used, congestion + control is achieved by sending packets associated with a given + session to several LCT channels. Individual receivers dynamically + join one or more of these channels, according to the network + congestion as seen by the receiver. LCT headers include an opaque + field that MUST be used to convey congestion control information to + the receivers. The actual congestion control scheme to use with LCT + is negotiated out-of-band. Some examples of congestion control + protocols that may be suitable for content delivery are described in + [VIC1998], [BYE2000], and [RFC3738]. Other congestion controls may + be suitable when LCT is used for a streaming application. + + + + + +Luby, et al. Standards Track [Page 8] + +RFC 5651 LCT Building Block October 2009 + + + This document does not specify and restrict the type of exchanges + between LCT (or any protocol instantiation built on top of LCT) and + an upper application. Some upper APIs may use an object-oriented + approach, where the only possible unit of data exchanged between LCT + (or any protocol instantiation built on top of LCT) and an + application, either at a source or at a receiver, is an object. + Other APIs may enable a sending or receiving application to exchange + a subset of an object with LCT (or any PI built on top of LCT), or + may even follow a streaming model. These considerations are outside + the scope of this document. + +4.1. Environmental Requirements and Considerations + + LCT is intended for congestion controlled delivery of objects and + streams (both reliable content delivery and streaming of multimedia + information). + + LCT can be used with both multicast and unicast delivery. LCT + requires connectivity between a sender and receivers, but it does not + require connectivity from receivers to a sender. LCT inherently + works with all types of networks, including LANs, WANs, Intranets, + the Internet, asymmetric networks, wireless networks, and satellite + networks. Thus, the inherent raw scalability of LCT is unlimited. + However, when other specific applications are built on top of LCT, + then these applications, by their very nature, may limit scalability. + For example, if an application requires receivers to retrieve out-of- + band information in order to join a session, or an application allows + receivers to send requests back to the sender to report reception + statistics, then the scalability of the application is limited by the + ability to send, receive, and process this additional data. + + LCT requires receivers to be able to uniquely identify and + demultiplex packets associated with an LCT session. In particular, + there MUST be a Transport Session Identifier (TSI) associated with + each LCT session. The TSI is scoped by the IP address of the sender, + and the IP address of the sender together with the TSI MUST uniquely + identify the session. If the underlying transport is UDP, as + described in [RFC0768], then the 16-bit UDP source port number MAY + serve as the TSI for the session. The TSI value MUST be the same in + all places it occurs within a packet. If there is no underlying TSI + provided by the network, transport, or any other layer, then the TSI + MUST be included in the LCT header. + + LCT is presumed to be used with an underlying network or transport + service that is a "best effort" service that does not guarantee + packet reception or packet reception order, and that does not have + any support for flow or congestion control. For example, the Any- + Source Multicast (ASM) model of IP multicast as defined in [RFC1112] + + + +Luby, et al. Standards Track [Page 9] + +RFC 5651 LCT Building Block October 2009 + + + is such a "best effort" network service. While the basic service + provided by [RFC1112] is largely scalable, providing congestion + control or reliability should be done carefully to avoid severe + scalability limitations, especially in the presence of heterogeneous + sets of receivers. + + There are currently two models of multicast delivery, the Any-Source + Multicast (ASM) model as defined in [RFC1112] and the Source-Specific + Multicast (SSM) model as defined in [RFC4607]. LCT works with both + multicast models, but in a slightly different way with somewhat + different environmental concerns. When using ASM, a sender S sends + packets to a multicast group G, and the LCT channel address consists + of the pair (S,G), where S is the IP address of the sender and G is a + multicast group address. When using SSM, a sender S sends packets to + an SSM channel (S,G), and the LCT channel address coincides with the + SSM channel address. + + A sender can locally allocate unique SSM channel addresses, and this + makes allocation of LCT channel addresses easy with SSM. To allocate + LCT channel addresses using ASM, the sender must uniquely chose the + ASM multicast group address across the scope of the group, and this + makes allocation of LCT channel addresses more difficult with ASM. + + LCT channels and SSM channels coincide, and thus the receiver will + only receive packets sent to the requested LCT channel. With ASM, + the receiver joins an LCT channel by joining a multicast group G, and + all packets sent to G, regardless of the sender, may be received by + the receiver. Thus, SSM has compelling security advantages over ASM + for prevention of denial-of-service (DoS) attacks. In either case, + receivers SHOULD use packet authentication mechanisms to mitigate + such attacks (see Sections 6.2 and 7). + + Some networks are not amenable to some congestion control protocols + that could be used with LCT. In particular, for a satellite or + wireless network, there may be no mechanism for receivers to + effectively reduce their reception rate since there may be a fixed + transmission rate allocated to the session. + + LCT is compatible with both IPv4 and IPv6 as no part of the packet is + IP version specific. + +4.2. Delivery Service Models + + LCT can support several different delivery service models. Two + examples are briefly described here. + + + + + + +Luby, et al. Standards Track [Page 10] + +RFC 5651 LCT Building Block October 2009 + + + Push service model + + One way a push service model can be used for reliable content + delivery is to deliver a series of objects. For example, a + receiver could join the session and dynamically adapt the number + of LCT channels the receiver is joined to until enough packets + have been received to reconstruct an object. After reconstructing + the object, the receiver may stay in the session and wait for the + transmission of the next object. + + The push model is particularly attractive in satellite networks + and wireless networks. In these cases, a session may consist of + one fixed rate LCT channel. + + A push service model can be used, for example, for reliable + delivery of a large object such as a 100 GB file. The sender + could send a Session Description announcement to a control channel + and receivers could monitor this channel and join a session + whenever a Session Description of interest arrives. Upon receipt + of the Session Description, each receiver could join the session + to receive packets until enough packets have arrived to + reconstruct the object, at which point the receiver could report + back to the sender that its reception was completed successfully. + The sender could decide to continue sending packets for the object + to the session until all receivers have reported successful + reconstruction or until some other condition has been satisfied. + + There are several features Asynchronous Layered Coding (ALC) + provides to support the push model. For example, the sender can + optionally include an Expected Residual Time (ERT) in the packet + header extension that indicates the expected remaining time of + packet transmission for either the single object carried in the + session or for the object identified by the Transmission Object + Identifier (TOI) if there are multiple objects carried in the + session. This can be used by receivers to determine if there is + enough time remaining in the session to successfully receive + enough additional packets to recover the object. If, for example, + there is not enough time, then the push application may have + receivers report back to the sender to extend the transmission of + packets for the object for enough time to allow the receivers to + obtain enough packets to reconstruct the object. The sender could + then include an ERT based on the extended object transmission time + in each subsequent packet header for the object. As other + examples, the LCT header optionally can contain a Close Session + flag that indicates when the sender is about to stop sending + packets to the session and a Close Object flag that indicates when + the sender is about to stop sending packets to the session for the + object identified by the Transmission Object ID. However, these + + + +Luby, et al. Standards Track [Page 11] + +RFC 5651 LCT Building Block October 2009 + + + flags are not a completely reliable mechanism and thus the Close + Session flag should only be used as a hint of when the session is + about to close, and the Close Object flag should only be used as a + hint of when transmission of packets for the object is about to + end. + + On-demand content delivery model + + For an on-demand content delivery service model, senders typically + transmit for some given time period selected to be long enough to + allow all the intended receivers to join the session and recover + the object. For example, a popular software update might be + transmitted using LCT for several days, even though a receiver may + be able to complete the download in one hour total of connection + time, perhaps spread over several intervals of time. In this + case, the receivers join the session at any point in time when it + is active. Receivers leave the session when they have received + enough packets to recover the object. The receivers, for example, + obtain a Session Description by contacting a web server. + + In this case, the receivers join the session, and dynamically + adapt the number of LCT channels to which they subscribe according + to the available bandwidth. Receivers then drop from the session + when they have received enough packets to recover the object. + + As an example, assume that an object is 50 MB. The sender could + send 1 KB packets to the first LCT channel at 50 packets per + second, so that receivers using just this LCT channel could + complete reception of the object in 1,000 seconds in absence of + loss, and would be able to complete reception even in presence of + some substantial amount of losses with the use of coding for + reliability. Furthermore, the sender could use a number of LCT + channels such that the aggregate rate of 1 KB packets to all LCT + channels is 1,000 packets per second, so that a receiver could be + able to complete reception of the object in as little 50 seconds + (assuming no loss and that the congestion control mechanism + immediately converges to the use of all LCT channels). + + Other service models + + There are many other delivery service models for which LCT can be + used that are not covered above. As examples, a live streaming or + an on-demand archival content streaming service model. A + description of the many potential applications, the appropriate + delivery service model, and the additional mechanisms to support + such functionalities when combined with LCT is beyond the scope of + + + + + +Luby, et al. Standards Track [Page 12] + +RFC 5651 LCT Building Block October 2009 + + + this document. This document only attempts to describe the + minimal common scalable elements to these diverse applications + using LCT as the delivery transport. + +4.3. Congestion Control + + The specific congestion control protocol to be used for LCT sessions + depends on the type of content to be delivered. While the general + behavior of the congestion control protocol is to reduce the + throughput in presence of congestion and gradually increase it in the + absence of congestion, the actual dynamic behavior (e.g., response to + single losses) can vary. + + It is RECOMMENDED that the congestion control mechanism specified in + [RFC3738] be used. Some alternative possible congestion control + protocols for reliable content delivery using LCT are described in + [VIC1998] and [BYE2000]. Different delivery service models might + require different congestion control protocols. + +5. Packet Header Fields + + Packets sent to an LCT session MUST include an "LCT header". The LCT + header format is described below. + + Other building blocks MAY describe some of the same fields as + described for the LCT header. It is RECOMMENDED that protocol + instantiations using multiple building blocks include shared fields + at most once in each packet. Thus, for example, if another building + block is used with LCT that includes the optional Expected Residual + Time field, then the Expected Residual Time field SHOULD be carried + in each packet at most once. + + The position of the LCT header within a packet MUST be specified by + any protocol instantiation that uses LCT. + +5.1. LCT Header Format + + The LCT header is of variable size, which is specified by a length + field in the third byte of the header. In the LCT header, all + integer fields are carried in "big-endian" or "network order" format, + that is, most significant byte (octet) first. Bits designated as + "padding" or "reserved" (r) MUST by set to 0 by senders and ignored + by receivers in this version of the specification. Unless otherwise + noted, numeric constants in this specification are in decimal form + (base 10). + + The format of the default LCT header is depicted in Figure 1. + + + + +Luby, et al. Standards Track [Page 13] + +RFC 5651 LCT Building Block October 2009 + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | V | C |PSI|S| O |H|Res|A|B| HDR_LEN | Codepoint (CP)| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Congestion Control Information (CCI, length = 32*(C+1) bits) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Transport Session Identifier (TSI, length = 32*S+16*H bits) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Transport Object Identifier (TOI, length = 32*O+16*H bits) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Header Extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 1: Default LCT Header Format + + The function and length of each field in the default LCT header is + the following. + + LCT version number (V): 4 bits + + Indicates the LCT version number. The LCT version number for this + specification is 1. + + Congestion control flag (C): 2 bits + + C=0 indicates the Congestion Control Information (CCI) field is 32 + bits in length. C=1 indicates the CCI field is 64 bits in length. + C=2 indicates the CCI field is 96 bits in length. C=3 indicates + the CCI field is 128 bits in length. + + Protocol-Specific Indication (PSI): 2 bits + + The usage of these bits, if any, is specific to each protocol + instantiation that uses the LCT building block. If no protocol- + instantiation-specific usage of these bits is defined, then a + sender MUST set them to zero and a receiver MUST ignore these + bits. + + + + + + + + + +Luby, et al. Standards Track [Page 14] + +RFC 5651 LCT Building Block October 2009 + + + Transport Session Identifier flag (S): 1 bit + + This is the number of full 32-bit words in the TSI field. The TSI + field is 32*S + 16*H bits in length, i.e., the length is either 0 + bits, 16 bits, 32 bits, or 48 bits. + + Transport Object Identifier flag (O): 2 bits + + This is the number of full 32-bit words in the TOI field. The TOI + field is 32*O + 16*H bits in length, i.e., the length is either 0 + bits, 16 bits, 32 bits, 48 bits, 64 bits, 80 bits, 96 bits, or 112 + bits. + + Half-word flag (H): 1 bit + + The TSI and the TOI fields are both multiples of 32 bits plus 16*H + bits in length. This allows the TSI and TOI field lengths to be + multiples of a half-word (16 bits), while ensuring that the + aggregate length of the TSI and TOI fields is a multiple of 32 + bits. + + Reserved (Res): 2 bits + + These bits are reserved. In this version of the specification, + they MUST be set to zero by senders and MUST be ignored by + receivers. + + Close Session flag (A): 1 bit + + Normally, A is set to 0. The sender MAY set A to 1 when + termination of transmission of packets for the session is + imminent. A MAY be set to 1 in just the last packet transmitted + for the session, or A MAY be set to 1 in the last few seconds of + packets transmitted for the session. Once the sender sets A to 1 + in one packet, the sender SHOULD set A to 1 in all subsequent + packets until termination of transmission of packets for the + session. A received packet with A set to 1 indicates to a + receiver that the sender will immediately stop sending packets for + the session. When a receiver receives a packet with A set to 1, + the receiver SHOULD assume that no more packets will be sent to + the session. + + Close Object flag (B): 1 bit + + Normally, B is set to 0. The sender MAY set B to 1 when + termination of transmission of packets for an object is imminent. + If the TOI field is in use and B is set to 1, then termination of + transmission for the object identified by the TOI field is + + + +Luby, et al. Standards Track [Page 15] + +RFC 5651 LCT Building Block October 2009 + + + imminent. If the TOI field is not in use and B is set to 1, then + termination of transmission for the one object in the session + identified by out-of-band information is imminent. B MAY be set + to 1 in just the last packet transmitted for the object, or B MAY + be set to 1 in the last few seconds that packets are transmitted + for the object. Once the sender sets B to 1 in one packet for a + particular object, the sender SHOULD set B to 1 in all subsequent + packets for the object until termination of transmission of + packets for the object. A received packet with B set to 1 + indicates to a receiver that the sender will immediately stop + sending packets for the object. When a receiver receives a packet + with B set to 1, then it SHOULD assume that no more packets will + be sent for the object to the session. + + LCT header length (HDR_LEN): 8 bits + + Total length of the LCT header in units of 32-bit words. The + length of the LCT header MUST be a multiple of 32 bits. This + field can be used to directly access the portion of the packet + beyond the LCT header, i.e., to the first other header if it + exists, or to the packet payload if it exists and there is no + other header, or to the end of the packet if there are no other + headers or packet payload. + + Codepoint (CP): 8 bits + + An opaque identifier that is passed to the packet payload decoder + to convey information on the codec being used for the packet + payload. The mapping between the codepoint and the actual codec + is defined on a per session basis and communicated out-of-band as + part of the session description information. The use of the CP + field is similar to the Payload Type (PT) field in RTP headers as + described in [RFC3550]. + + Congestion Control Information (CCI): 32, 64, 96, or 128 bits + + Used to carry congestion control information. For example, the + congestion control information could include layer numbers, + logical channel numbers, and sequence numbers. This field is + opaque for the purpose of this specification. + + This field MUST be 32 bits if C=0. + + This field MUST be 64 bits if C=1. + + This field MUST be 96 bits if C=2. + + + + + +Luby, et al. Standards Track [Page 16] + +RFC 5651 LCT Building Block October 2009 + + + This field MUST be 128 bits if C=3. + + Transport Session Identifier (TSI): 0, 16, 32, or 48 bits + + The TSI uniquely identifies a session among all sessions from a + particular sender. The TSI is scoped by the IP address of the + sender, and thus the IP address of the sender and the TSI together + uniquely identify the session. Although a TSI in conjunction with + the IP address of the sender always uniquely identifies a session, + whether or not the TSI is included in the LCT header depends on + what is used as the TSI value. If the underlying transport is + UDP, then the 16-bit UDP source port number MAY serve as the TSI + for the session. If the TSI value appears multiple times in a + packet, then all occurrences MUST be the same value. If there is + no underlying TSI provided by the network, transport or any other + layer, then the TSI MUST be included in the LCT header. + + The TSI MUST be unique among all sessions served by the sender + during the period when the session is active, and for a large + period of time preceding and following when the session is active. + A primary purpose of the TSI is to prevent receivers from + inadvertently accepting packets from a sender that belong to + sessions other than the sessions to which receivers are + subscribed. For example, suppose a session is deactivated and + then another session is activated by a sender and the two sessions + use an overlapping set of channels. A receiver that connects and + remains connected to the first session during this sender activity + could possibly accept packets from the second session as belonging + to the first session if the TSI for the two sessions were + identical. The mapping of TSI field values to sessions is outside + the scope of this document and is to be done out-of-band. + + The length of the TSI field is 32*S + 16*H bits. Note that the + aggregate lengths of the TSI field plus the TOI field is a + multiple of 32 bits. + + Transport Object Identifier (TOI): 0, 16, 32, 48, 64, 80, 96, or 112 + bits. + + This field indicates to which object within the session this + packet pertains. For example, a sender might send a number of + files in the same session, using TOI=0 for the first file, TOI=1 + for the second one, etc. As another example, the TOI may be a + unique global identifier of the object that is being transmitted + from several senders concurrently, and the TOI value may be the + output of a hash function applied to the object. The mapping of + TOI field values to objects is outside the scope of this document + and is to be done out-of-band. The TOI field MUST be used in all + + + +Luby, et al. Standards Track [Page 17] + +RFC 5651 LCT Building Block October 2009 + + + packets if more than one object is to be transmitted in a session, + i.e., the TOI field is either present in all the packets of a + session or is never present. + + The length of the TOI field is 32*O + 16*H bits. Note that the + aggregate length of the TSI field plus the TOI field is a multiple + of 32 bits. + +5.2. Header-Extension Fields + +5.2.1. General + + Header Extensions are used in LCT to accommodate optional header + fields that are not always used or have variable size. Examples of + the use of Header Extensions include: + + o Extended-size versions of already existing header fields. + + o Sender and receiver authentication information. + + o Transmission of timing information. + + The presence of Header Extensions can be inferred by the LCT header + length (HDR_LEN). If HDR_LEN is larger than the length of the + standard header, then the remaining header space is taken by Header + Extension fields. + + If present, Header Extensions MUST be processed to ensure that they + are recognized before performing any congestion control procedure or + otherwise accepting a packet. The default action for unrecognized + Header Extensions is to ignore them. This allows the future + introduction of backward-compatible enhancements to LCT without + changing the LCT version number. Non-backward-compatible Header + Extensions CANNOT be introduced without changing the LCT version + number. + + There are two formats for Header Extension fields, as depicted in + Figure 2. The first format is used for variable-length extensions, + with Header Extension Type (HET) values between 0 and 127. The + second format is used for fixed-length (one 32-bit word) extensions, + using HET values from 127 to 255. + + + + + + + + + + +Luby, et al. Standards Track [Page 18] + +RFC 5651 LCT Building Block October 2009 + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | HET (<=127) | HEL | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + . . + . Header Extension Content (HEC) . + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | HET (>=128) | Header Extension Content (HEC) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 2: Format of Additional Headers + + The explanation of each sub-field is the following: + + Header Extension Type (HET): 8 bits + + The type of the Header Extension. This document defines a number + of possible types. Additional types may be defined in future + versions of this specification. HET values from 0 to 127 are used + for variable-length Header Extensions. HET values from 128 to 255 + are used for fixed-length 32-bit Header Extensions. + + Header Extension Length (HEL): 8 bits + + The length of the whole Header Extension field, expressed in + multiples of 32-bit words. This field MUST be present for + variable-length extensions (HETs between 0 and 127) and MUST NOT + be present for fixed-length extensions (HETs between 128 and 255). + + Header Extension Content (HEC): variable length + + The content of the Header Extension. The format of this sub- + field depends on the Header Extension Type. For fixed-length + Header Extensions, the HEC is 24 bits. For variable-length Header + Extensions, the HEC field has variable size, as specified by the + HEL field. Note that the length of each Header Extension field + MUST be a multiple of 32 bits. Also note that the total size of + the LCT header, including all Header Extensions and all optional + header fields, cannot exceed 255 32-bit words. + + + + + + + +Luby, et al. Standards Track [Page 19] + +RFC 5651 LCT Building Block October 2009 + + + The following LCT Header Extensions are defined by this + specification: + + EXT_NOP, HET=0 No-Operation extension. The information present in + this extension field MUST be ignored by receivers. + + EXT_AUTH, HET=1 Packet authentication extension. Information used to + authenticate the sender of the packet. The format of + this Header Extension and its processing is outside + the scope of this document and is to be communicated + out-of-band as part of the session description. + + It is RECOMMENDED that senders provide some form of packet + authentication. If EXT_AUTH is present, whatever + packet authentication checks that can be performed + immediately upon reception of the packet SHOULD be + performed before accepting the packet and performing + any congestion-control-related action on it. + + Some packet authentication schemes impose a delay of several seconds + between when a packet is received and when the packet + is fully authenticated. Any congestion control + related action that is appropriate SHOULD NOT be + postponed by any such full packet authentication. + + EXT_TIME, HET=2 Time Extension. This extension is used to carry + several types of timing information. It includes + general purpose timing information, namely the Sender + Current Time (SCT), Expected Residual Time (ERT), and + Sender Last Change (SLC) time extensions described in + the present document. It can also be used for timing + information with narrower applicability (e.g., + defined for a single protocol instantiation); in this + case, it will be described in a separate document. + + All senders and receivers implementing LCT MUST support the EXT_NOP + Header Extension and MUST recognize EXT_AUTH and EXT_TIME, but are + not required to be able to parse their content. + +5.2.2. EXT_TIME Header Extension + + This section defines the timing Header Extensions with general + applicability. The time values carried in this Header Extension are + related to the server's wall clock. The server MUST maintain + consistent relative time during a session (i.e., insignificant clock + drift). For some applications, system or even global synchronization + of server wall clock may be desirable, such as using the Network Time + + + + +Luby, et al. Standards Track [Page 20] + +RFC 5651 LCT Building Block October 2009 + + + Protocol (NTP) [RFC1305] to ensure actual time relative to 00:00 + hours GMT, January 1st 1900. Such session-external synchronization + is outside the scope of this document. + + The EXT_TIME Header Extension uses the format depicted in Figure 3. + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | HET = 2 | HEL >= 1 | Use (bit field) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | first time value | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... (other time values (optional) ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 3: EXT_TIME Header Extension Format + + The "Use" bit field indicates the semantic of the following 32-bit + time value(s). + + It is divided into two parts: + + o 8 bits are reserved for general purpose timing information. This + information is applicable to any protocol that makes use of LCT. + + o 8 bits are reserved for PI-specific timing information. This + information is out of the scope of this document. + + The format of the "Use" bit field is depicted in Figure 4. + + 2 3 + 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + |SCT|SCT|ERT|SLC| reserved | PI-specific | + |Hi |Low| | | by LCT | use | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + Figure 4: "Use" Bit Field Format + + Several "time value" fields MAY be present in a given EXT_TIME Header + Extension, as specified in the "Use-field". When several "time + value" fields are present, they MUST appear in the order specified by + the associated flag position in the "Use-field": first SCT-High (if + + + + + + + +Luby, et al. Standards Track [Page 21] + +RFC 5651 LCT Building Block October 2009 + + + present), then SCT-Low (if present), then ERT (if present), then SLC + (if present). Receivers SHOULD ignore additional fields within the + EXT_TIME Header Extension that they do not support. + + + The fields for the general purpose EXT_TIME timing information are: + + Sender Current Time (SCT): SCT-High flag, SCT-Low flag, corresponding + time value (one or two 32-bit words). + + This timing information represents the current time at the sender + at the time this packet was transmitted. + + When the SCT-High flag is set, the associated 32-bit time value + provides an unsigned integer representing the time in seconds of + the sender's wall clock. In the particular case where NTP is + used, these 32 bits provide an unsigned integer representing the + time in seconds relative to 00:00 hours GMT, January 1st 1900, + (i.e., the most significant 32 bits of a full 64-bit NTP time + value). In that case, handling of wraparound of the 32-bit time + is outside the scope of NTP and LCT. + + When the SCT-Low flag is set, the associated 32-bit time value + provides an unsigned integer representing a multiple of 1/2^^32 of + a second, in order to allow sub-second precision. When the SCT- + Low flag is set, the SCT-High flag MUST be set, too. In the + particular case where NTP is used, these 32 bits provide the 32 + least significant bits of a 64-bit NTP timestamp. + + Expected Residual Time (ERT): ERT flag, corresponding 32-bit time + value. + + This timing information represents the sender expected residual + transmission time for the transmission of the current object. If + the packet containing the ERT timing information also contains the + TOI field, then ERT refers to the object corresponding to the TOI + field; otherwise, it refers to the only object in the session. + + When the ERT flag is set, it is expressed as a number of seconds. + The 32 bits provide an unsigned integer representing this number + of seconds. + + Session Last Changed (SLC): SLC flag, corresponding 32-bit time + value. + + The Session Last Changed time value is the server wall clock time, + in seconds, at which the last change to session data occurred. + That is, it expresses the time at which the last (most recent) + + + +Luby, et al. Standards Track [Page 22] + +RFC 5651 LCT Building Block October 2009 + + + Transport Object addition, modification, or removal was made for + the delivery session. In the case of modifications and additions, + it indicates that new data will be transported that was not + transported prior to this time. In the case of removals, SLC + indicates that some prior data will no longer be transported. + + When the SLC flag is set, the associated 32-bit time value + provides an unsigned integer representing a time in seconds. In + the particular case where NTP is used, these 32 bits provide an + unsigned integer representing the time in seconds relative to + 00:00 hours GMT, January 1st 1900, (i.e., the most significant 32 + bits of a full 64-bit NTP time value). In that case, handling of + wraparound of the 32-bit time is outside the scope of NTP and LCT. + + In some cases, it may be appropriate that a packet containing an + EXT_TIME Header Extension with SLC information also contain an + SCT-High information. + + Reserved by LCT for future use (4 bits): + + In this version of the specification, these bits MUST be set to + zero by senders and MUST be ignored by receivers. + + PI-specific use (8 bits): + + These bits are out of the scope of this document. The bits that + are not specified by the PI built on top of LCT SHOULD be set to + zero. + + The total EXT_TIME length is carried in the HEL, since this Header + Extension is of variable length. It also enables clients to skip + this Header Extension altogether if not supported (but recognized). + +6. Operations + +6.1. Sender Operation + + Before joining an LCT session, a receiver MUST obtain a session + description. The session description MUST include: + + o The sender IP address; + + o The number of LCT channels; + + o The addresses and port numbers used for each LCT channel; + + o The Transport Session ID (TSI) to be used for the session; + + + + +Luby, et al. Standards Track [Page 23] + +RFC 5651 LCT Building Block October 2009 + + + o Enough information to determine the congestion control protocol + being used; + + o Enough information to determine the packet authentication scheme + being used (if one is being used). + + The session description could also include, but is not limited to: + + o The data rates used for each LCT channel; + + o The length of the packet payload; + + o The mapping of TOI value(s) to objects for the session; + + o Any information that is relevant to each object being transported, + such as when it will be available within the session, for how + long, and the length of the object; + + Protocol instantiations using LCT MAY place additional requirements + on what must be included in the session description. For example, a + protocol instantiation might require that the data rates for each + channel, or the mapping of TOI value(s) to objects for the session, + or other information related to other headers that might be required + be included in the session description. + + The session description could be in a form such as SDP as defined in + [RFC4566], or another format appropriate to a particular application. + It might be carried in a session announcement protocol such as SAP as + defined in [RFC2974], obtained using a proprietary session control + protocol, located on a Web page with scheduling information, or + conveyed via email or other out-of-band methods. Discussion of + session description format, and distribution of session descriptions + is beyond the scope of this document. + + Within an LCT session, a sender using LCT transmits a sequence of + packets, each in the format defined above. Packets are sent from a + sender using one or more LCT channels, which together constitute a + session. Transmission rates may be different in different channels + and may vary over time. The specification of the other building + block headers and the packet payload used by a complete protocol + instantiation using LCT is beyond the scope of this document. This + document does not specify the order in which packets are transmitted, + nor the organization of a session into multiple channels. Although + these issues affect the efficiency of the protocol, they do not + affect the correctness nor the inter-operability of LCT between + senders and receivers. + + + + + +Luby, et al. Standards Track [Page 24] + +RFC 5651 LCT Building Block October 2009 + + + Several objects can be carried within the same LCT session. In this + case, each object MUST be identified by a unique TOI. Objects MAY be + transmitted sequentially, or they MAY be transmitted concurrently. + It is good practice to only send objects concurrently in the same + session if the receivers that participate in that portion of the + session have interest in receiving all the objects. The reason for + this is that it wastes bandwidth and networking resources to have + receivers receive data for objects in which they have no interest. + + Typically, the sender(s) continues to send packets in a session until + the transmission is considered complete. The transmission may be + considered complete when some time has expired, a certain number of + packets have been sent, or some out-of-band signal (possibly from a + higher level protocol) has indicated completion by a sufficient + number of receivers. + + For the reasons mentioned above, this document does not pose any + restriction on packet sizes. However, network efficiency + considerations recommend that the sender uses an as large as possible + packet payload size, but in such a way that packets do not exceed the + network's maximum transmission unit size (MTU), or when fragmentation + coupled with packet loss might introduce severe inefficiency in the + transmission. + + It is recommended that all packets have the same or very similar + sizes, as this can have a severe impact on the effectiveness of + congestion control schemes such as the ones described in [VIC1998], + [BYE2000], and [RFC3738]. A sender of packets using LCT MUST + implement the sender-side part of one of the congestion control + schemes that is in accordance with [RFC2357] using the Congestion + Control Information field provided in the LCT header, and the + corresponding receiver congestion control scheme is to be + communicated out-of-band and MUST be implemented by any receivers + participating in the session. + +6.2. Receiver Operation + + Receivers can operate differently depending on the delivery service + model. For example, for an on-demand service model, receivers may + join a session, obtain the necessary packets to reproduce the object, + and then leave the session. As another example, for a streaming + service model, a receiver may be continuously joined to a set of LCT + channels to download all objects in a session. + + To be able to participate in a session, a receiver MUST obtain the + relevant session description information as listed in Section 6.1. + + + + + +Luby, et al. Standards Track [Page 25] + +RFC 5651 LCT Building Block October 2009 + + + If packet authentication information is present in an LCT header, it + SHOULD be used as specified in Section 5.2. To be able to be a + receiver in a session, the receiver MUST be able to process the LCT + header. The receiver MUST be able to discard, forward, store, or + process the other headers and the packet payload. If a receiver is + not able to process an LCT header, it MUST drop from the session. + + To be able to participate in a session, a receiver MUST implement the + congestion control protocol specified in the session description + using the Congestion Control Information field provided in the LCT + header. If a receiver is not able to implement the congestion + control protocol used in the session, it MUST NOT join the session. + When the session is transmitted on multiple LCT channels, receivers + MUST initially join channels according to the specified startup + behavior of the congestion control protocol. For a multiple rate + congestion control protocol that uses multiple channels, this + typically means that a receiver will initially join only a minimal + set of LCT channels, possibly a single one, that in aggregate are + carrying packets at a low rate. This rule has the purpose of + preventing receivers from starting at high data rates. + + Several objects can be carried either sequentially or concurrently + within the same LCT session. In this case, each object is identified + by a unique TOI. Note that even if a server stops sending packets + for an old object before starting to transmit packets for a new + object, both the network and the underlying protocol layers can cause + some reordering of packets, especially when sent over different LCT + channels, and thus receivers SHOULD NOT assume that the reception of + a packet for a new object means that there are no more packets in + transit for the previous one, at least for some amount of time. + + A receiver MAY be concurrently joined to multiple LCT sessions from + one or more senders. The receiver MUST perform congestion control on + each such LCT session. If the congestion control protocol allows the + receiver some flexibility in terms of its actions within a session, + then the receiver MAY make choices to optimize the packet flow + performance across the multiple LCT sessions, as long as the receiver + still adheres to the congestion control rules for each LCT session + individually. + +7. Requirements from Other Building Blocks + + As described in [RFC3048], LCT is a building block that is intended + to be used, in conjunction with other building blocks, to help + specify a protocol instantiation. A congestion control building + block that uses the Congestion Control information field within the + + + + + +Luby, et al. Standards Track [Page 26] + +RFC 5651 LCT Building Block October 2009 + + + LCT header MUST be used by any protocol instantiation that uses LCT; + other building blocks MAY also be used, such as a reliability + building block. + + The congestion control MUST be applied to the LCT session as an + entity, i.e., over the aggregate of the traffic carried by all of the + LCT channels associated with the LCT session. The Congestion Control + Information field in the LCT header is an opaque field that is + reserved to carry information related to congestion control. There + MAY also be congestion control Header Extension fields that carry + additional information related to congestion control. + + The particular layered encoder and congestion control protocols used + with LCT have an impact on the performance and applicability of LCT. + For example, some layered encoders used for video and audio streams + can produce a very limited number of layers, thus providing a very + coarse control in the reception rate of packets by receivers in a + session. When LCT is used for reliable data transfer, some FEC + codecs are inherently limited in the size of the object they can + encode, and for objects larger than this size the reception overhead + on the receivers can grow substantially. + + A more in-depth description of the use of FEC in Reliable Multicast + Transport (RMT) protocols is given in [RFC3453]. Some of the FEC + codecs that MAY be used in conjunction with LCT for reliable content + delivery are specified in [RFC5052]. The Codepoint field in the LCT + header is an opaque field that can be used to carry information + related to the encoding of the packet payload. + + LCT also requires receivers to obtain a session description, as + described in Section 6.1. The session description could be in a form + such as SDP as defined in [RFC4566], or another format appropriate to + a particular application and may be distributed with SAP as defined + in [RFC2974], using HTTP, or in other ways. It is RECOMMENDED that + an authentication protocol be used to deliver the session description + to receivers to ensure the correct session description arrives. + + It is RECOMMENDED that LCT implementors use some packet + authentication scheme to protect the protocol from attacks. An + example of a possibly suitable scheme is described in [Perrig2001]. + + Some protocol instantiations that use LCT MAY use building blocks + that require the generation of feedback from the receivers to the + sender. However, the mechanism for doing this is outside the scope + of LCT. + + + + + + +Luby, et al. Standards Track [Page 27] + +RFC 5651 LCT Building Block October 2009 + + +8. Security Considerations + + LCT is a building block as defined in [RFC3048] and as such does not + define a complete protocol. Protocol instantiations that use the LCT + building block MUST address the potential vulnerabilities described + in the following sections. For an example, see [ALC-PI]. + + Protocol instantiations could address the vulnerabilities described + below by taking measures to prevent receivers from accepting + incorrect packets, for example, by using a source authentication and + content integrity mechanism. See also Sections 6.2 and 7 for + discussion of packet authentication requirements. + + Note that for correct operation, LCT assumes availability of session + description information (see Sections 4 and 7). Incorrect or + maliciously modified session description information may result in + receivers being unable to correctly receive the session content, or + that receivers inadvertently try to receive at a much higher rate + than they are capable of, thereby disrupting traffic in portions of + the network. Protocol instantiations MUST address this potential + vulnerability, for example, by providing source authentication and + integrity mechanisms for the session description. Additionally, + these mechanisms MUST allow the receivers to securely verify the + correspondence between session description and LCT data packets. + + The following sections consider further each of the services provided + by LCT. + +8.1. Session and Object Multiplexing and Termination + + The Transport Session Identifier and the Transport Object Identifier + in the LCT header provide for multiplexing of sessions and objects. + Modification of these fields by an attacker could have the effect of + depriving a session or object of data and potentially directing + incorrect data to another session or object, in both cases effecting + a denial-of-service attack. + + Additionally, injection of forged packets with fake TSI or TOI values + may cause receivers to allocate resources for additional sessions or + objects, again potentially effecting a DoS attack. + + The Close Object and Close Session bits in the LCT header provide for + signaling of the end of a session or object. Modification of these + fields by an attacker could cause receivers to incorrectly behave as + if the session or object had ended, resulting in a denial-of-service + attack, or conversely to continue to unnecessarily utilize resources + after the session or object has ended (although resource utilization + in this case is largely an implementation issue). + + + +Luby, et al. Standards Track [Page 28] + +RFC 5651 LCT Building Block October 2009 + + + As a result of the above vulnerabilities, these fields MUST be + protected by protocol instantiation security mechanisms (for example, + source authentication and data integrity mechanisms). + +8.2. Time Synchronization + + The SCT and ERT mechanisms provide rudimentary time synchronization + features which can both be subject to attacks. Indeed an attacker + can easily de-synchronize clients, sending erroneous SCT information, + or mount a DoS attack by informing all clients that the session + (respectively, a particular object) is about to be closed. + + As a result of the above vulnerabilities, these fields MUST be + protected by protocol instantiation security mechanisms (for example, + source authentication and data integrity mechanisms). + +8.3. Data Transport + + The LCT protocol provides for transport of information for other + building blocks, specifically the PSI field for the protocol + instantiation, the Congestion Control field for the Congestion + Control building block, the Codepoint field for the FEC building + block, the EXT-AUTH Header Extension (used by the protocol + instantiation) and the packet payload itself. + + Modification of any of these fields by an attacker may result in a + denial-of-service attack. In particular, modification of the + Codepoint or packet payload may prevent successful reconstruction or + cause inaccurate reconstruction of large portions of an object by + receivers. Modification of the Congestion Control field may cause + receivers to attempt to receive at an incorrect rate, potentially + worsening or causing a congestion situation and thereby effecting a + DoS attack. + + As a result of the above vulnerabilities, these fields MUST be + protected by protocol instantiation security mechanisms (for example, + source authentication and data integrity mechanisms). + +9. IANA Considerations + +9.1. Namespace Declaration for LCT Header Extension Types + + This document defines a new namespace for "LCT Header Extension + Types". Values in this namespace are integers between 0 and 255 + (inclusive). + + + + + + +Luby, et al. Standards Track [Page 29] + +RFC 5651 LCT Building Block October 2009 + + + Values in the range 0 to 63 (inclusive) are reserved for use for + variable-length LCT Header Extensions and assignments shall be made + through "IETF Review" as defined in [RFC5226]. + + Values in the range 64 to 127 (inclusive) are reserved for variable- + length LCT Header Extensions and assignments shall be made on the + "Specification Required" basis as defined in [RFC5226]. + + Values in the range 128 to 191 (inclusive) are reserved for use for + fixed-length LCT Header Extensions and assignments shall be made + through "IETF Review" as defined in [RFC5226]. + + Values in the range 192 to 255 (inclusive) are reserved for fixed- + length LCT Header Extensions and assignments shall be made on the + "Specification Required" basis as defined in [RFC5226]. + + Initial values for the LCT Header Extension Type registry are defined + in Section 9.2. + + Note that the previous Experimental version of this specification + reserved values in the ranges [64, 127] and [192, 255] for PI- + specific LCT Header Extensions. In the interest of simplification + and since there were no overlapping allocations of these LCT Header + Extension Type values by PIs, this document specifies a single flat + space for LCT Header Extension Types. + +9.2. LCT Header Extension Type Registration + + This document registers three values in the LCT Header Extension Type + namespace as follows: + + +-------+----------+--------------------+ + | Value | Name | Reference | + +-------+----------+--------------------+ + | 0 | EXT_NOP | This specification | + | | | | + | 1 | EXT_AUTH | This specification | + | | | | + | 2 | EXT_TIME | This specification | + +-------+----------+--------------------+ + +10. Acknowledgments + + This specification is substantially based on RFC 3451 [RFC3451] and + thus credit for the authorship of this document is primarily due to + the authors of RFC 3451: Mike Luby, Jim Gemmel, Lorenzo Vicisano, + Luigi Rizzo, Mark Handley, and Jon Crowcroft. Bruce Lueckenhoff, + + + + +Luby, et al. Standards Track [Page 30] + +RFC 5651 LCT Building Block October 2009 + + + Hayder Radha, and Justin Chapweske also contributed to RFC 3451. + Additional thanks are due to Vincent Roca, Rod Walsh, and Toni Paila + for contributions to this update to Proposed Standard. + +11. Changes from RFC 3451 + + This section summarizes the changes that were made from the + Experimental version of this specification published as RFC 3451 + [RFC3451]: + + o Removed the 'Statement of Intent' from the introduction. (The + statement of intent was meant to clarify the "Experimental" status + of RFC 3451.) + + o Inclusion of material from ALC that is applicable in the more + general LCT context. + + o Creation of an IANA registry for LCT Header Extensions. + + o Allocation of the 2 'reserved' bits in the LCT header as + "Protocol-Specific Indication" - usage to be defined by protocol + instantiations. + + o Removal of the Sender Current Time and Expected Residual Time LCT + header fields. + + o Inclusion of a new Header Extension, EXT_TIME, to replace the SCT + and ERT and provide for future extension of timing capabilities. + +12. References + +12.1. Normative References + + [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, + August 1980. + + [RFC1112] Deering, S., "Host extensions for IP multicasting", + STD 5, RFC 1112, August 1989. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward Error + Correction (FEC) Building Block", RFC 5052, + August 2007. + + + + + + +Luby, et al. Standards Track [Page 31] + +RFC 5651 LCT Building Block October 2009 + + + [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing + an IANA Considerations Section in RFCs", BCP 26, + RFC 5226, May 2008. + +12.2. Informative References + + [ALC-PI] Luby, M., Watson, M., and L. Vicisano, "Asynchronous + Layered Coding (ALC) Protocol Instantiation", Work + in Progress, September 2009. + + [BYE1998] Byers, J., Luby, M., Mitzenmacher, M., and A. Rege, + "Fountain Approach to Reliable Distribution of Bulk + Data", Proceedings ACM SIGCOMM'98, Vancouver, Canada, + September 1998. + + [BYE2000] Byers, J., Frumin, M., Horn, G., Luby, M., + Mitzenmacher, M., Rotter, A., and W. Shaver, "FLID-DL: + Congestion Control for Layered Multicast", Proceedings + of Second International Workshop on Networked Group + Communications (NGC 2000), Palo Alto, CA, + November 2000. + + [GEM2000] Gemmell, J., Schooler, E., and J. Gray, "Fcast + Multicast File Distribution", IEEE Network, Vol. 14, + No. 1, pp. 58-68, January 2000. + + [Perrig2001] Perrig, A., Canetti, R., Song, D., and J. Tyger, + "Efficient and Secure Source Authentication for + Multicast", Network and Distributed System Security + Symposium, NDSS 2001, pp. 35-46, February 2001. + + [RFC1305] Mills, D., "Network Time Protocol (Version 3) + Specification, Implementation", RFC 1305, March 1992. + + [RFC2357] Mankin, A., Romanov, A., Bradner, S., and V. Paxson, + "IETF Criteria for Evaluating Reliable Multicast + Transport and Application Protocols", RFC 2357, + June 1998. + + [RFC2974] Handley, M., Perkins, C., and E. Whelan, "Session + Announcement Protocol", RFC 2974, October 2000. + + [RFC3048] Whetten, B., Vicisano, L., Kermode, R., Handley, M., + Floyd, S., and M. Luby, "Reliable Multicast Transport + Building Blocks for One-to-Many Bulk-Data Transfer", + RFC 3048, January 2001. + + + + + +Luby, et al. Standards Track [Page 32] + +RFC 5651 LCT Building Block October 2009 + + + [RFC3269] Kermode, R. and L. Vicisano, "Author Guidelines for + Reliable Multicast Transport (RMT) Building Blocks and + Protocol Instantiation documents", RFC 3269, + April 2002. + + [RFC3451] Luby, M., Gemmell, J., Vicisano, L., Rizzo, L., + Handley, M., and J. Crowcroft, "Layered Coding + Transport (LCT) Building Block", RFC 3451, + December 2002. + + [RFC3453] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., + Handley, M., and J. Crowcroft, "The Use of Forward + Error Correction (FEC) in Reliable Multicast", + RFC 3453, December 2002. + + [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. + Jacobson, "RTP: A Transport Protocol for Real-Time + Applications", STD 64, RFC 3550, July 2003. + + [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate + Control (WEBRC) Building Block", RFC 3738, April 2004. + + [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: + Session Description Protocol", RFC 4566, July 2006. + + [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast + for IP", RFC 4607, August 2006. + + [RIZ1997a] Rizzo, L., "Effective Erasure Codes for Reliable + Computer Communication Protocols", ACM SIGCOMM Computer + Communication Review, Vol.27, No.2, pp.24-36, + April 1997. + + [RIZ1997b] Rizzo, L. and L. Vicisano, "Reliable Multicast Data + Distribution protocol based on software FEC + techniques", Proceedings of the Fourth IEEE Workshop on + the Architecture and Implementation of High Performance + Communication Systems, HPCS'97, Chalkidiki Greece, + June 1997. + + [RIZ2000] Rizzo, L., "PGMCC: A TCP-friendly single-rate multicast + congestion control scheme", Proceedings of SIGCOMM + 2000, Stockholm Sweden, August 2000. + + [VIC1998] Vicisano, L., Rizzo, L., and J. Crowcroft, "TCP-like + Congestion Control for Layered Multicast Data + Transfer", IEEE Infocom'98, San Francisco, CA, + March 1998. + + + +Luby, et al. Standards Track [Page 33] + +RFC 5651 LCT Building Block October 2009 + + +Authors' Addresses + + Michael Luby + Qualcomm, Inc. + 3165 Kifer Rd. + Santa Clara, CA 95051 + US + + EMail: luby@qualcomm.com + + + Mark Watson + Qualcomm, Inc. + 3165 Kifer Rd. + Santa Clara, CA 95051 + US + + EMail: watson@qualcomm.com + + + Lorenzo Vicisano + Qualcomm, Inc. + 3165 Kifer Rd. + Santa Clara, CA 95051 + US + + EMail: vicisano@qualcomm.com + + + + + + + + + + + + + + + + + + + + + + + + +Luby, et al. Standards Track [Page 34] + |