diff options
Diffstat (limited to 'doc/rfc/rfc5740.txt')
-rw-r--r-- | doc/rfc/rfc5740.txt | 5265 |
1 files changed, 5265 insertions, 0 deletions
diff --git a/doc/rfc/rfc5740.txt b/doc/rfc/rfc5740.txt new file mode 100644 index 0000000..a598f60 --- /dev/null +++ b/doc/rfc/rfc5740.txt @@ -0,0 +1,5265 @@ + + + +Network Working Group B. Adamson +Request for Comments: 5740 Naval Research Laboratory +Obsoletes: 3940 C. Bormann +Category: Standards Track Universitaet Bremen TZI + M. Handley + University College London + J. Macker + Naval Research Laboratory + November 2009 + + + NACK-Oriented Reliable Multicast (NORM) Transport Protocol + +Abstract + + This document describes the messages and procedures of the Negative- + ACKnowledgment (NACK) Oriented Reliable Multicast (NORM) protocol. + This protocol can provide end-to-end reliable transport of bulk data + objects or streams over generic IP multicast routing and forwarding + services. NORM uses a selective, negative acknowledgment mechanism + for transport reliability and offers additional protocol mechanisms + to allow for operation with minimal a priori coordination among + senders and receivers. A congestion control scheme is specified to + allow the NORM protocol to fairly share available network bandwidth + with other transport protocols such as Transmission Control Protocol + (TCP). It is capable of operating with both reciprocal multicast + routing among senders and receivers and with asymmetric connectivity + (possibly a unicast return path) between the senders and receivers. + The protocol offers a number of features to allow different types of + applications or possibly other higher-level transport protocols to + utilize its service in different ways. The protocol leverages the + use of FEC-based (forward error correction) repair and other IETF + Reliable Multicast Transport (RMT) building blocks in its design. + This document obsoletes RFC 3940. + +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. + + + + +Adamson, et al. Standards Track [Page 1] + +RFC 5740 NORM Protocol November 2009 + + + 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. + 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 and Applicability . . . . . . . . . . . . . . . . 4 + 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 + 1.2. NORM Data Delivery Service Model . . . . . . . . . . . . . 5 + 1.3. NORM Scalability . . . . . . . . . . . . . . . . . . . . . 7 + 1.4. Environmental Requirements and Considerations . . . . . . 8 + 2. Architecture Definition . . . . . . . . . . . . . . . . . . . 8 + 2.1. Protocol Operation Overview . . . . . . . . . . . . . . . 10 + 2.2. Protocol Building Blocks . . . . . . . . . . . . . . . . . 12 + 2.3. Design Trade-Offs . . . . . . . . . . . . . . . . . . . . 12 + 3. Conformance Statement . . . . . . . . . . . . . . . . . . . . 13 + 4. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 15 + 4.1. NORM Common Message Header and Extensions . . . . . . . . 15 + 4.2. Sender Messages . . . . . . . . . . . . . . . . . . . . . 18 + 4.2.1. NORM_DATA Message . . . . . . . . . . . . . . . . . . 18 + 4.2.2. NORM_INFO Message . . . . . . . . . . . . . . . . . . 28 + 4.2.3. NORM_CMD Messages . . . . . . . . . . . . . . . . . . 29 + 4.3. Receiver Messages . . . . . . . . . . . . . . . . . . . . 47 + 4.3.1. NORM_NACK Message . . . . . . . . . . . . . . . . . . 47 + 4.3.2. NORM_ACK Message . . . . . . . . . . . . . . . . . . . 53 + 4.4. General Purpose Messages . . . . . . . . . . . . . . . . . 55 + 4.4.1. NORM_REPORT Message . . . . . . . . . . . . . . . . . 55 + 5. Detailed Protocol Operation . . . . . . . . . . . . . . . . . 55 + 5.1. Sender Initialization and Transmission . . . . . . . . . . 57 + 5.1.1. Object Segmentation Algorithm . . . . . . . . . . . . 58 + + + +Adamson, et al. Standards Track [Page 2] + +RFC 5740 NORM Protocol November 2009 + + + 5.2. Receiver Initialization and Reception . . . . . . . . . . 59 + 5.3. Receiver NACK Procedure . . . . . . . . . . . . . . . . . 59 + 5.4. Sender NACK Processing and Response . . . . . . . . . . . 62 + 5.4.1. Sender Repair State Aggregation . . . . . . . . . . . 62 + 5.4.2. Sender FEC Repair Transmission Strategy . . . . . . . 63 + 5.4.3. Sender NORM_CMD(SQUELCH) Generation . . . . . . . . . 64 + 5.4.4. Sender NORM_CMD(REPAIR_ADV) Generation . . . . . . . . 65 + 5.5. Additional Protocol Mechanisms . . . . . . . . . . . . . . 65 + 5.5.1. Group Round-Trip Time (GRTT) Collection . . . . . . . 65 + 5.5.2. NORM Congestion Control Operation . . . . . . . . . . 67 + 5.5.3. NORM Positive Acknowledgment Procedure . . . . . . . . 75 + 5.5.4. Group Size Estimate . . . . . . . . . . . . . . . . . 77 + 6. Configurable Elements . . . . . . . . . . . . . . . . . . . . 77 + 7. Security Considerations . . . . . . . . . . . . . . . . . . . 80 + 7.1. Baseline Secure NORM Operation . . . . . . . . . . . . . . 82 + 7.1.1. IPsec Approach . . . . . . . . . . . . . . . . . . . . 83 + 7.1.2. IPsec Requirements . . . . . . . . . . . . . . . . . . 85 + 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 86 + 8.1. Explicit IANA Assignment Guidelines . . . . . . . . . . . 87 + 8.1.1. NORM Header Extension Types . . . . . . . . . . . . . 87 + 8.1.2. NORM Stream Control Codes . . . . . . . . . . . . . . 88 + 8.1.3. NORM_CMD Message Sub-Types . . . . . . . . . . . . . . 88 + 9. Suggested Use . . . . . . . . . . . . . . . . . . . . . . . . 89 + 10. Changes from RFC 3940 . . . . . . . . . . . . . . . . . . . . 90 + 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 91 + 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 91 + 12.1. Normative References . . . . . . . . . . . . . . . . . . . 91 + 12.2. Informative References . . . . . . . . . . . . . . . . . . 92 + + + + + + + + + + + + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 3] + +RFC 5740 NORM Protocol November 2009 + + +1. Introduction and Applicability + + The Negative-ACKnowledgment (NACK) Oriented Reliable Multicast (NORM) + protocol can provide reliable transport of data from one or more + senders to a group of receivers over an IP multicast network. The + primary design goals of NORM are to provide efficient, scalable, and + robust bulk data (e.g., computer files, transmission of persistent + data) transfer across possibly heterogeneous IP networks and + topologies. The NORM protocol design provides support for + distributed multicast session participation with minimal coordination + among senders and receivers. NORM allows senders and receivers to + dynamically join and leave multicast sessions at will with minimal + overhead for control information and timing synchronization among + participants. To accommodate this capability, NORM protocol message + headers contain some common information allowing receivers to easily + synchronize to senders throughout the lifetime of a reliable + multicast session. NORM is self-adapting to a wide range of dynamic + network conditions with little or no pre-configuration. The protocol + is tolerant of inaccurate timing estimations or lossy conditions that + can occur in many networks including mobile and wireless. The + protocol can also converge and maintain efficient operation even in + situations of heavy packet loss and large queuing or transmission + delays. This document obsoletes the Experimental RFC 3940 + specification. + + This document is a product of the IETF RMT working group and follows + the guidelines provided in the Author Guidelines for Reliable + Multicast Transport (RMT) Building Blocks and Protocol Instantiation + documents [RFC3269]. + + Statement of Intent + + This memo contains the definitions necessary to fully specify a + Reliable Multicast Transport protocol in accordance with the criteria + of IETF Criteria for Evaluating Reliable Multicast Transport and + Application Protocols [RFC2357]. The NORM specification described in + this document was previously published in the Experimental Category + [RFC3940]. It was the stated intent of the RMT working group to re- + submit this specifications as an IETF Proposed Standard in due + course. This Proposed Standard specification is thus based on RFC + 3940 and has been updated according to accumulated experience and + growing protocol maturity since the publication of RFC 3940. Said + experience applies both to this specification itself and to + congestion control strategies related to the use of this + specification. The differences between RFC 3940 and this document + are listed in Section 10. + + + + + +Adamson, et al. Standards Track [Page 4] + +RFC 5740 NORM Protocol November 2009 + + +1.1. Requirements Language + + 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 RFC 2119 [RFC2119]. + +1.2. NORM Data Delivery Service Model + + A NORM protocol instance (NormSession) is defined within the context + of participants communicating connectionless (e.g., Internet Protocol + (IP) or User Datagram Protocol (UDP)) packets over a network using + pre-determined addresses and host port numbers. Generally, the + participants exchange packets using an IP multicast group address, + but unicast transport MAY also be established or applied as an + adjunct to multicast delivery. In the case of multicast, the + participating NormNodes will communicate using a common IP multicast + group address and port number chosen via means outside the context of + the given NormSession. Other existing IETF data format and protocol + standards MAY be applied to describe and convey the necessary a + priori information for a specific NormSession (e.g., Session + Description Protocol (SDP) [RFC4566], Session Announcement Protocol + (SAP) [RFC2974], etc.). + + The NORM protocol design is principally driven by the assumption of a + single sender transmitting bulk data content to a group of receivers. + However, the protocol MAY operate with multiple senders within the + context of a single NormSession. In initial implementations of this + protocol, it is anticipated that multiple senders will transmit + independently of one another and receivers will maintain state as + necessary for each sender. In future versions of NORM, it is + possible some aspects of protocol operation (e.g., round-trip time + collection) will provide for alternate modes allowing more efficient + performance for applications requiring multiple senders. + + NORM provides for three types of bulk data content objects + (NormObjects) to be reliably transported. These types include: + + 1. static computer memory data content (NORM_OBJECT_DATA type), + + 2. computer storage files (NORM_OBJECT_FILE type), and + + 3. non-finite streams of continuous data content (NORM_OBJECT_STREAM + type). + + The distinction between NORM_OBJECT_DATA and NORM_OBJECT_FILE is + simply to provide a hint to receivers in NormSessions serving + multiple types of content as to what type of storage to allocate for + received content (i.e., memory or file storage). Other than that + + + +Adamson, et al. Standards Track [Page 5] + +RFC 5740 NORM Protocol November 2009 + + + distinction, the two are identical, providing for reliable transport + of finite (but potentially very large) units of content. These + static data and file services are anticipated to be useful for + multicast-based cache applications with the ability to reliably + provide transmission of large quantities of static data. Other types + of static data/file delivery services might make use of these + transport object types, too. The use of the NORM_OBJECT_STREAM type + is at the application's discretion and could be used to carry static + data or file content also. The NORM reliable stream service opens up + additional possibilities such as serialized reliable messaging or + other unbounded, perhaps dynamically produced content. The + NORM_OBJECT_STREAM provides for reliable transport analogous to that + of the Transmission Control Protocol (TCP), although NORM receivers + will be able to begin receiving stream content at any point in time. + The applicability of this feature will depend upon the application. + + The NORM protocol also allows for a small amount of out-of-band data + (sent as NORM_INFO messages) to be attached to the data content + objects transmitted by the sender. This readily available out-of- + band data allows multicast receivers to quickly and efficiently + determine the nature of the corresponding data, file, or stream bulk + content being transmitted. This allows application-level control of + the receiver node's participation in the current transport activity. + This also allows the protocol to be flexible with minimal pre- + coordination among senders and receivers. The NORM_INFO content is + atomic in that its size MUST fit into the payload portion of a single + NORM message. + + NORM does NOT provide for global or application-level identification + of data content within its message headers. Note the NORM_INFO out- + of-band data mechanism can be leveraged by the application for this + purpose if desired, or identification can alternatively be embedded + within the data content. NORM does identify transmitted content + (NormObjects) with transport identifiers that are applicable only + while the sender is transmitting and/or repairing the given object. + These transport data content identifiers (NormTransportIds) are + assigned in a monotonically increasing fashion by each NORM sender + during the course of a NormSession. Participants, including senders, + in NORM protocol sessions are also identified with unique identifiers + (NormNodeIds). Each sender maintains its NormTransportId assignments + independently and thus individual NormObjects can be uniquely + identified during transport by concatenation of the session-unique + sender identifier (NormNodeId) and the assigned NormTransportId. The + NormTransportIds are assigned from a large, but fixed, numeric space + in increasing order and will be reassigned during long-lived + sessions. The NORM protocol provides mechanisms so the sender + application can terminate transmission of data content and inform the + group of this in an efficient manner. Other similar protocol control + + + +Adamson, et al. Standards Track [Page 6] + +RFC 5740 NORM Protocol November 2009 + + + mechanisms (e.g., session termination, receiver synchronization, + etc.) are specified so reliable multicast application variants can + realize different, complete bulk transfer communication models to + meet their goals. + + To summarize, the NORM protocol provides reliable transport of + different types of data content (including potentially mixed types). + The senders enqueue and transmit bulk content in the form of static + data or files and/or non-finite, ongoing stream types. NORM senders + provide for repair transmission of data and/or FEC content in + response to NACK messages received from the receiver group. + Mechanisms for out-of-band information and other transport control + mechanisms are specified for use by applications to form complete + reliable multicast solutions for different purposes. + +1.3. NORM Scalability + + Group communication scalability requirements lead to adaptation of + NACK-based protocol schemes when feedback for reliability is needed + [RmComparison]. NORM is a protocol centered around the use of + selective NACKs to request repairs of missing data. NORM provides + for the use of packet-level forward error correction (FEC) techniques + for efficient multicast repair and OPTIONAL proactive transmission + robustness [RFC3453]. FEC-based repair can be used to greatly reduce + the quantity of reliable multicast repair requests and repair + transmissions [MdpToolkit] in a NACK-oriented protocol. The + principal factor in NORM scalability is the volume of feedback + traffic generated by the receiver set to facilitate reliability and + congestion control. NORM uses probabilistic suppression of redundant + feedback based on exponentially distributed random backoff timers. + The performance of this type of suppression relative to other + techniques is described in [McastFeedback]. NORM dynamically + measures the group's round-trip timing status to set its suppression + and other protocol timers. This allows NORM to scale well while + maintaining reliable data delivery transport with low latency + relative to the network topology over which it is operating. + + Feedback messages can be either multicast to the group at large or + sent via unicast routing to the sender. In the case of unicast + feedback, the sender relays the feedback state to the group to + facilitate feedback suppression. In typical Internet environments, + the NORM protocol will readily scale to group sizes on the order of + tens of thousands of receivers. A study of the quantity of feedback + for this type of protocol is described in [NormFeedback]. NORM is + able to operate with a smaller amount of feedback than a single TCP + connection, even with relatively large numbers of receivers. Thus, + depending upon the network topology, it is possible for NORM to scale + to larger group sizes. With respect to computer resource usage, the + + + +Adamson, et al. Standards Track [Page 7] + +RFC 5740 NORM Protocol November 2009 + + + NORM protocol does not need state to be kept on all receivers in the + group. NORM senders maintain state only for receivers providing + explicit congestion control feedback. However, NORM receivers need + to maintain state for each active sender. This can constrain the + number of simultaneous senders in some uses of NORM. + +1.4. Environmental Requirements and Considerations + + All of the environmental requirements and considerations that apply + to the "Multicast Negative-Acknowledgment (NACK) Building Blocks" + [RFC5401], "Forward Error Correction (FEC) Building Block" [RFC5052], + and "TCP-Friendly Multicast Congestion Control (TFMCC) Protocol + Specification" [RFC4654] also apply to the NORM protocol. + + The NORM protocol SHALL be capable of operating in an end-to-end + fashion with no assistance from intermediate systems beyond basic IP + multicast group management, routing, and forwarding services. While + the techniques utilized in NORM are principally applicable to flat, + end-to-end IP multicast topologies, they could also be applied in the + sub-levels of hierarchical (e.g., tree-based) multicast distribution + if so desired. NORM can make use of reciprocal (among senders and + receivers) multicast communication under the Any-Source Multicast + (ASM) model defined in "Host Extensions for IP Multicasting" + [RFC1112], but it SHALL also be capable of scalable operation in + asymmetric topologies such as Source-Specific Multicast (SSM) + [RFC4607] where only unicast routing service is available from the + receivers to the sender(s). + + NORM is compatible with IPv4 and IPv6. Additionally, NORM can be + used with networks employing Network Address Translation (NAT) + provided that the NAT device supports IP multicast and/or can cache + UDP traffic source port numbers for remapping feedback traffic from + receivers to the sender(s). + +2. Architecture Definition + + A NormSession is comprised of participants (NormNodes) acting as + senders and/or receivers. NORM senders transmit data content in the + form of NormObjects to the session destination address, and the NORM + receivers attempt to reliably receive the transmitted content using + negative acknowledgments to request repair. Each NormNode within a + NormSession is assumed to have a preselected unique 32-bit identifier + (NormNodeId). NormNodes MUST have uniquely assigned identifiers + within a single NormSession to distinguish between multiple possible + senders and to distinguish feedback information from different + receivers. There are two reserved NormNodeId values. A value of + 0x00000000 is considered an invalid NormNodeId (NORM_NODE_NONE), and + a value of 0xffffffff is a "wild card" NormNodeId (NORM_NODE_ANY). + + + +Adamson, et al. Standards Track [Page 8] + +RFC 5740 NORM Protocol November 2009 + + + While the protocol does not preclude multiple sender nodes + concurrently transmitting within the context of a single NORM session + (i.e., many-to-many operation), any type of interactive coordination + among NORM senders is assumed to be controlled by the application- or + higher-protocol layer. There are some OPTIONAL mechanisms specified + in this document that can be leveraged for such application-layer + coordination. + + As previously noted, NORM allows for reliable transmission of three + different basic types of data content. The first type is + NORM_OBJECT_DATA, which is used for static, persistent blocks of data + content maintained in the sender's application memory storage. The + second type is NORM_OBJECT_FILE, which corresponds to data stored in + the sender's non-volatile file system. The NORM_OBJECT_DATA and + NORM_OBJECT_FILE types both represent NormObjects of finite but + potentially very large size. The third type of data content is + NORM_OBJECT_STREAM, which corresponds to an ongoing transmission of + undefined length. This is analogous to the reliable stream service + provided by TCP for unicast data transport. The format of the stream + content is application-defined and can be "byte" or "message" + oriented. The NORM protocol provides for "flushing" of the stream to + expedite delivery or possibly enforce application message boundaries. + NORM protocol implementations MAY offer either (or both) in-order + delivery of the stream data to the receive application or out-of- + order (more immediate) delivery of received segments of the stream to + the receiver application. In either case, NORM sender and receiver + implementations provide buffering to facilitate repair of the stream + as it is transported. + + All NormObjects are logically segmented into FEC coding blocks and + symbols for transmission by the sender. In NORM, a FEC encoding + symbol directly corresponds to the payload of NORM_DATA messages or + "segment". Note that when systematic FEC codes are used, the payload + of NORM_DATA messages sent for the first portion of a FEC encoding + block are source symbols (actual segments of original user data), + while the remaining symbols for the block consist of parity symbols + generated by FEC encoding. These parity symbols are generally sent + in response to repair requests, but some number MAY be sent + proactively at the end of each encoding block to increase the + robustness of transmission. When non-systematic FEC codes are used, + all symbols sent consist of FEC encoding parity content. In this + case, the receiver needs to receive a sufficient number of symbols to + reconstruct (via FEC decoding) the original user data for the given + block. + + Transmitted NormObjects are temporarily, yet uniquely, identified + within the NormSession context using the given sender's NormNodeId, + NormInstanceId, and a temporary NormTransportId. Depending upon the + + + +Adamson, et al. Standards Track [Page 9] + +RFC 5740 NORM Protocol November 2009 + + + implementation, individual NORM senders can manage their + NormInstanceIds independently, or a common NormInstanceId could be + agreed upon for all participating nodes within a session, if needed, + as a session identifier. NORM NormTransportId data content + identifiers are sender-assigned and applicable and valid only during + a NormObject's actual transport (i.e., for as long as the sender is + transmitting and providing repair of the indicated NormObject). For + a long-lived session, the NormTransportId field can wrap and + previously used identifiers will be re-used. Note that globally + unique identification of transported data content is not provided by + NORM and, if necessary, is expected to be managed by the NORM + application. The individual segments or symbols of the NormObject + are further identified with FEC payload identifiers that include + coding block and symbol identifiers. These are discussed in detail + later in this document. + +2.1. Protocol Operation Overview + + A NORM sender primarily generates messages of type NORM_DATA. These + messages carry original data segments or FEC symbols and repair + segments/symbols for the bulk data/file or stream NormObjects being + transferred. By default, redundant FEC symbols are sent only in + response to receiver repair requests (NACKs) and thus normally little + or no additional transmission overhead is imposed due to FEC + encoding. However, the NORM implementation MAY be configured to + proactively transmit some amount of redundant FEC symbols along with + the original content to potentially enhance performance (e.g., + improved delay) at the cost of additional transmission overhead. + This configuration is sensible for certain network conditions and can + allow for robust, asymmetric multicast (e.g., unidirectional routing, + satellite, cable) [FecHybrid] with reduced receiver feedback, or, in + some cases, no feedback. + + A sender message of type NORM_INFO is also defined and is used to + carry OPTIONAL out-of-band context information for a given transport + object. A single NORM_INFO message can be associated with a + NormObject. Because of its atomic nature, missing NORM_INFO messages + can be NACKed and repaired with a slightly lower delay process than + NORM's general FEC-encoded data content. The NORM_INFO message can + serve special purposes for some bulk transfer, reliable multicast + applications where receivers join the group mid-stream and need to + ascertain contextual information on the current content being + transmitted. The NACK process for NORM_INFO will be described later. + When the NORM_INFO message type is used, its transmission SHOULD + precede transmission of any NORM_DATA message for the associated + NormObject. + + The sender also generates messages of type NORM_CMD to assist in + + + +Adamson, et al. Standards Track [Page 10] + +RFC 5740 NORM Protocol November 2009 + + + certain protocol operations such as congestion control, end-of- + transmission flushing, group round-trip time (GRTT) estimation, + receiver synchronization, and OPTIONAL positive acknowledgment + requests or application-defined commands. The transmission of + NORM_CMD messages from the sender is accomplished by one of three + different procedures: single, best-effort unreliable transmission of + the command; repeated redundant transmissions of the command; and + positively acknowledged commands. The transmission technique used + for a given command depends upon the function of the command. + Several core commands are defined for basic protocol operation. + Additionally, implementations MAY wish to consider providing the + OPTIONAL application-defined commands that can take advantage of the + transmission methodologies available for commands. This allows for + application-level session management mechanisms that can make use of + information available to the underlying NORM protocol engine (e.g., + round-trip timing, transmission rate, etc.). A notable distinction + between NORM_DATA message and some NORM_CMD message transmissions is + that typically a receiver will need to allocate resources to manage + reliable reception when NORM_DATA messages are received. However, + some NORM_CMD messages are completely atomic and no specific + reliability (buffering) state needs to be kept. Thus, for session + management or other purposes, it is possible that even participants + acting principally as data receivers MAY transmit NORM_CMD messages. + However, it is RECOMMENDED that this is not done within the context + of the NORM multicast session unless congestion control is addressed. + For example, many receiver nodes transmitting NORM_CMD messages + simultaneously can cause congestion for the destination(s). + + All sender transmissions are subject to rate control governed by a + peak transmission rate set for each participant by the application. + This can be used to limit the quantity of multicast data transmitted + by the group. When NORM's congestion control algorithm is enabled, + the rate for senders is automatically adjusted. In some networks, it + is desirable to establish minimum and maximum bounds for the rate + adjustment depending upon the application even when dynamic + congestion control is enabled. However, in the case of the general + Internet, congestion control policy SHALL be observed that is + compatible with coexistent TCP flows. + + NORM receivers generate messages of type NORM_NACK or NORM_ACK in + response to transmissions of data and commands from a sender. The + NORM_NACK messages are generated to request repair of detected data + transmission losses. Receivers generally detect losses by tracking + the sequence of transmission from a sender. Sequencing information + is embedded in the transmitted data packets and end-of-transmission + commands from the sender. NORM_ACK messages are generated in + response to certain commands transmitted by the sender. In the + general (and most scalable) protocol mode, NORM_ACK messages are sent + + + +Adamson, et al. Standards Track [Page 11] + +RFC 5740 NORM Protocol November 2009 + + + only in response to congestion control commands from the sender. The + feedback volume of these congestion control NORM_ACK messages is + controlled using the same timer-based probabilistic suppression + techniques as for NORM_NACK messages to avoid feedback implosion. In + order to meet potential application requirements for positive + acknowledgment from receivers, other NORM_ACK messages are defined + and are available for use. + +2.2. Protocol Building Blocks + + The operation of the NORM protocol is based primarily upon the + concepts presented in the Multicast NACK Building Block [RFC5401] + document. This includes the basic NORM architecture and the data + transmission, repair, and feedback strategies discussed in that + document. The reliable multicast building block approach, as + described in "Reliable Multicast Transport Building Blocks for One- + to-Many Bulk-Data Transfer" [RFC3048], is applied in creating the + full NORM protocol instantiation. NORM also makes use of the parity- + based encoding techniques for repair messaging and added transmission + robustness as described in "The Use of Forward Error Correction (FEC) + in Reliable Multicast" [RFC3453]. NORM uses the FEC Payload ID as + specified by the FEC Building Block document [RFC5052]. + Additionally, for congestion control, this document fully specifies a + baseline congestion control mechanism (NORM-CC) based on the TCP- + Friendly Multicast Congestion Control (TFMCC) scheme [TfmccPaper], + [RFC4654]. + +2.3. Design Trade-Offs + + While the various features of NORM provide some measure of general + purpose utility, it is important to emphasize the understanding that + "no one size fits all" in the reliable multicast transport arena. + There are numerous engineering trade-offs involved in reliable + multicast transport design and this necessitates an increased + awareness of application and network architecture considerations. + Performance requirements affecting design can include: group size, + heterogeneity (e.g., capacity and/or delay), asymmetric delivery, + data ordering, delivery delay, group dynamics, mobility, congestion + control, and transport across low-capacity connections. NORM + contains various parameters to accommodate many of these differing + requirements. The NORM protocol and its mechanisms MAY be applied in + multicast applications outside of bulk data transfer, but there is an + assumed model of bulk transfer transport service that drives the + trade-offs that determine the scalability and performance described + in this document. + + The ability of NORM to provide reliable data delivery is also + governed by any buffer constraints of the sender and receiver + + + +Adamson, et al. Standards Track [Page 12] + +RFC 5740 NORM Protocol November 2009 + + + applications. NORM protocol implementations SHOULD operate with the + greatest efficiency and robustness possible within application- + defined buffer constraints. Buffer requirements for reliability, as + always, are a function of the delay-bandwidth product of the network + topology. NORM performs best when allowed more buffering resources + than typical point-to-point transport protocols. This is because + NORM feedback suppression is based upon randomly delayed + transmissions from the receiver set, rather than immediately + transmitted feedback. There are definitive trade-offs between buffer + utilization, group size scalability, and efficiency of performance. + Large buffer sizes allow the NORM protocol to perform most + efficiently in large delay-bandwidth topologies and allow for longer + feedback suppression backoff timeouts. This yields improved group + size scalability. NORM can operate with reduced buffering but at a + cost of decreased efficiency (lower relative goodput) and reduced + group size scalability. + +3. Conformance Statement + + This RMT Protocol Instantiation document, in conjunction with the + "Multicast Negative-Acknowledgment (NACK) Building Blocks" [RFC5401] + and "Forward Error Correction (FEC) Building Block" [RFC5052] + Building Blocks, completely specifies a working reliable multicast + transport protocol that conforms to the requirements described in RFC + 2357. + + This document specifies the following message types and mechanisms + that are REQUIRED in complying NORM protocol implementations: + + +----------------------+--------------------------------------------+ + | Message Type | Purpose | + +----------------------+--------------------------------------------+ + | NORM_DATA | Sender message for application data | + | | transmission. Implementations MUST | + | | support at least one of the | + | | NORM_OBJECT_DATA, NORM_OBJECT_FILE, or | + | | NORM_OBJECT_STREAM delivery services. The | + | | use of the NORM FEC Object Transmission | + | | Information header extension is OPTIONAL | + | | with NORM_DATA messages. | + | NORM_CMD(FLUSH) | Sender command to excite receivers for | + | | repair requests in lieu of ongoing | + | | NORM_DATA transmissions. Note the use of | + | | the NORM_CMD(FLUSH) for positive | + | | acknowledgment of data receipt is | + | | OPTIONAL. | + + + + + +Adamson, et al. Standards Track [Page 13] + +RFC 5740 NORM Protocol November 2009 + + + | NORM_CMD(SQUELCH) | Sender command to advertise its current | + | | valid repair window in response to invalid | + | | requests for repair. | + | NORM_CMD(REPAIR_ADV) | Sender command to advertise current repair | + | | (and congestion control state) to group | + | | when unicast feedback messages are | + | | detected. Used to control/suppress | + | | excessive receiver feedback in asymmetric | + | | multicast topologies. | + | NORM_CMD(CC) | Sender command used in collection of | + | | round-trip timing and congestion control | + | | status from group (this is OPTIONAL if | + | | alternative congestion control mechanism | + | | and round-trip timing collection is used). | + | NORM_NACK | Receiver message used to request repair of | + | | missing transmitted content. | + | NORM_ACK | Receiver message used to proactively | + | | provide feedback for congestion control | + | | purposes. Also used with the OPTIONAL | + | | NORM Positive Acknowledgment Process. | + +----------------------+--------------------------------------------+ + + This document also describes the following message types and + associated mechanisms that are OPTIONAL for complying NORM protocol + implementations: + + +-----------------------+-------------------------------------------+ + | Message Type | Purpose | + +-----------------------+-------------------------------------------+ + | NORM_INFO | Sender message for providing ancillary | + | | context information associated with NORM | + | | transport objects. The use of the NORM | + | | FEC Object Transmission Information | + | | header extension is OPTIONAL with | + | | NORM_INFO messages. | + | NORM_CMD(EOT) | Sender command to indicate it has reached | + | | end-of-transmission and will no longer | + | | respond to repair requests. | + | NORM_CMD(ACK_REQ) | Sender command to support | + | | application-defined, positively | + | | acknowledged commands sent outside of the | + | | context of the bulk data content being | + | | transmitted. The NORM Positive | + | | Acknowledgment Procedure associated with | + | | this message type is OPTIONAL. | + + + + + + +Adamson, et al. Standards Track [Page 14] + +RFC 5740 NORM Protocol November 2009 + + + | NORM_CMD(APPLICATION) | Sender command containing | + | | application-defined commands sent outside | + | | of the context of the bulk data content | + | | being transmitted. | + | NORM_REPORT | Optional message type reserved for | + | | experimental implementations of the NORM | + | | protocol. | + +-----------------------+-------------------------------------------+ + +4. Message Formats + + There are two primary classes of NORM messages (see Section 2.1): + sender messages and receiver messages. NORM_CMD, NORM_INFO, and + NORM_DATA message types are generated by senders of data content, and + NORM_NACK and NORM_ACK messages generated by receivers within a + NormSession. Sender messages SHALL be governed by congestion control + for Internet use. For session management or other purposes, + receivers can also employ NORM_CMD message transmissions. The + principal rationale for distinguishing sender and receiver messages + is that receivers will typically need to allocate resources to + support reliable reception from sender(s) and NORM sender messages + are subject to congestion control. NORM receivers MAY employ the + NORM_CMD message type for application-defined purposes, but it is + RECOMMENDED that congestion control and feedback implosion issues be + addressed. Additionally, an auxiliary message type of NORM_REPORT is + also provided for experimental purposes. This section describes the + message formats used by the NORM protocol. These messages and their + fields are referenced in the detailed functional description of the + NORM protocol given in Section 5. Individual NORM messages are + compatible with the Maximum Transmission Unit (MTU) limitations of + encapsulating Internet protocols including IPv4, IPv6, and UDP. The + current NORM protocol specification assumes UDP encapsulation and + leverages the transport features of UDP. The NORM messages are + independent of network addresses and can be used in IPv4 and IPv6 + networks. + +4.1. NORM Common Message Header and Extensions + + There are some common message fields contained in all NORM message + types. Additionally, a header extension mechanism is defined to + expand the functionality of the NORM protocol without revision to + this document. All NORM protocol messages begin with a common header + with information fields as follows: + + + + + + + + +Adamson, et al. Standards Track [Page 15] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type | hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 1: NORM Common Message Header Format + + The "version" field is a 4-bit value indicating the protocol version + number. NORM implementations SHOULD ignore received messages with + version numbers different from their own. This number is intended to + indicate and distinguish upgrades of the protocol that are non- + interoperable. The NORM version number for this specification is 1. + + The message "type" field is a 4-bit value indicating the NORM + protocol message type. These types are defined as follows: + + +------------------+------------------+ + | Message | Value | + +------------------+------------------+ + | NORM_INFO | 1 | + | NORM_DATA | 2 | + | NORM_CMD | 3 | + | NORM_NACK | 4 | + | NORM_ACK | 5 | + | NORM_REPORT | 6 | + +------------------+------------------+ + + The 8-bit "hdr_len" field indicates the number of 32-bit words that + comprise the given message's header portion. This is used to + facilitate the addition of header extensions. The presence of header + extensions is implied when the "hdr_len" value is greater than the + base value for the given message "type". + + The "sequence" field is a 16-bit value that is set by the message + originator. The "sequence" field serves two separate purposes, + depending upon the message type: + + 1. NORM senders MUST set the "sequence" field of sender messages + (NORM_INFO, NORM_DATA, and NORM_CMD) so that receivers can + monitor the "sequence" value to maintain an estimate of packet + loss that can be used for congestion control purposes (see + Section 5.5.2 for a detailed description of NORM Congestion + Control operation). A monotonically increasing sequence number + space MUST be maintained to mark NORM sender messages in this + way. Note that this "sequence" number is explicitly NOT used in + + + +Adamson, et al. Standards Track [Page 16] + +RFC 5740 NORM Protocol November 2009 + + + NORM as part of its reliability procedures. The NORM object and + FEC payload identifiers are used to detect missing content for + reliable transfer purposes. + + 2. NORM receivers SHOULD set the "sequence" field to support + protection from message replay attacks of NORM_NACK or NORM_NACK + messages. Note that, depending upon configuration, NORM feedback + messages are sent to the session multicast address or the unicast + address(es) of the active NORM sender(s). Thus, a separate, + monotonically increasing sequence number space MUST be maintained + for each destination address to which the NORM receiver is + transmitting feedback messages. + + Note that these two separate purposes necessitate the maintenance of + separate sequence spaces to support the functions described here. + And, in the case of NORM receivers, additional sequence spaces are + needed when feedback messages are sent to the sender unicast + address(es) instead of the session address. + + The "source_id" field is a 32-bit value that uniquely identifies the + node that sent the message within the context of a single + NormSession. This value is termed the NORM node identifier + (NormNodeId) and unique NormNodeIds MUST be assigned within a single + NormSession. In some cases, use of the host IPv4 address or a hash + of an address can suffice, but alternative methodologies for + assignment and potential collision resolution of node identifiers + within a multicast session SHOULD be considered. For example, the + techniques for managing the 32-bit "synchronization source" (SSRC) + identifiers defined in the Real-Time Protocol (RTP) specification + [RFC3550] are applicable for use with NORM node identifiers when an + ASM traffic model is observed. In most deployments of the NORM + protocol to date, the NormNodeId assignments are administratively + configured, and this form of NormNodeId assignment is RECOMMENDED for + most purposes. NORM sender NormNodeId values MUST be unique within + an ASM session so that NORM receiver feedback can be properly + demultiplexed by senders, and NORM receiver NormNodeId values MUST + also be unique for congestion control operation or when the OPTIONAL + positive acknowledgment mechanism is used. + + NORM Header Extensions + + When header extensions are applied, they follow the message type's + base header and precede any payload portion. There are two formats + for header extensions, both of which begin with an 8-bit "het" + (header extension type) field. One format is provided for variable- + length extensions with "het" values in the range from 0 through 127. + The other format is for fixed-length (one 32-bit word) extensions + with "het" values in the range from 128 through 255. + + + +Adamson, et al. Standards Track [Page 17] + +RFC 5740 NORM Protocol November 2009 + + + For variable-length extensions, the value of the "hel" (header + extension length) field is the length of the entire header extension, + expressed in multiples of 32-bit words. The "hel" field MUST be + present for variable-length extensions ("het" between 0 and 127) and + MUST NOT be present for fixed-length extensions ("het" between 128 + and 255). + + The formats of the variable-length and fixed-length header extensions + are given, respectively, here: + 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 | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 2: NORM Variable-Length Header Extension Format + + 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 | reserved | Header Extension Content | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 3: NORM Fixed-Length (32-bit) Header Extension Format + + The "Header Extension Content" portion of the header extension is + defined for each extension type. Some header extensions are defined + within this document for NORM baseline FEC and congestion control + operations. + +4.2. Sender Messages + + NORM sender messages include the NORM_DATA type, the NORM_INFO type, + and the NORM_CMD type. NORM_DATA and NORM_INFO messages contain + application data content while NORM_CMD messages are used for various + protocol control functions. + +4.2.1. NORM_DATA Message + + The NORM_DATA message is generally the predominant type transmitted + by NORM senders. These messages are used to encapsulate segmented + data content for objects of type NORM_OBJECT_DATA, NORM_OBJECT_FILE, + and NORM_OBJECT_STREAM. NORM_DATA messages contain original or FEC- + encoded application data content. + + + + +Adamson, et al. Standards Track [Page 18] + +RFC 5740 NORM Protocol November 2009 + + + The format of NORM_DATA messages is comprised of three logical + portions: 1) a fixed-format NORM_DATA header portion, 2) a FEC + Payload ID portion with a format dependent upon the FEC encoding + used, and 3) a payload portion containing source or encoded + application data content. Note for objects of type + NORM_OBJECT_STREAM, the payload portion contains additional fields + used to appropriately recover stream content. NORM implementations + MAY also extend the NORM_DATA header to include a FEC Object + Transmission Information (EXT_FTI) header extension. This allows + NORM receivers to automatically allocate resources and properly + perform FEC decoding without the need for pre-configuration or out- + of-band information. + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=2| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | flags | fec_id | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_payload_id | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header_extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | payload_len* | payload_msg_start* | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | payload_offset* | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | payload_data* | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 4: NORM_DATA Message Format + + *IMPORTANT NOTE: The "payload_len", "payload_msg_start" and + "payload_offset" fields are present only for objects of type + NORM_OBJECT_STREAM. These fields, as with the entire payload, are + subject to any FEC encoding used. Thus, when systematic FEC codes + are used, these values can be directly interpreted only for packets + containing source symbols while packets containing FEC parity content + need decoding before these fields can be interpreted. + + The "version", "type", "hdr_len", "sequence", and "source_id" fields + + + +Adamson, et al. Standards Track [Page 19] + +RFC 5740 NORM Protocol November 2009 + + + form the NORM common message header as described in Section 4.1. The + value of the NORM_DATA "type" field is 2. The NORM_DATA base + "hdr_len" value is 4 (i.e., four 32-bit words) plus the size of the + "fec_payload_id" field. The "fec_payload_id" field size depends upon + the FEC encoding type referenced by the "fec_id" field. For example, + when small block, systematic codes are used, a "fec_id" value of 129 + is indicated, and the size of the "fec_payload_id" is two 32-bit + words. In this case the NORM_DATA base "hdr_len" value is 6. The + cumulative size of any header extensions applied is added into the + "hdr_len" field. + + The "instance_id" field contains a value generated by the sender to + uniquely identify its current instance of participation in the + NormSession. This allows receivers to detect when senders have + perhaps left and rejoined a session in progress. When a sender + (identified by its "source_id") is detected to have a new + "instance_id", the NORM receivers SHOULD drop their previous state on + the sender and begin reception anew, or at least treat this + "instance" as a new, separate sender. + + The "grtt" field contains a non-linear quantized representation of + the sender's current estimate of group round-trip time (GRTT_sender) + (this is also referred to as R_max in [TfmccPaper]). This value is + used to control timing of the NACK repair process and other aspects + of protocol operation as described in this document. Normally, the + advertised "grtt" value will correspond to what the sender has + measured based on feedback from the group, but, at low transmission + rates, the advertised "grtt" SHALL be set to MAX(grttMeasured, + NormSegmentSize/senderRate) where the NormSegmentSize is the sender's + segment size in bytes and the senderRate is the sender's current + transmission rate in bytes per second. The algorithm for encoding + and decoding this field is described in the Multicast NACK Building + Block [RFC5401] document. + + The "backoff" field value is used by receivers to determine the + maximum backoff timer value used in the timer-based NORM NACK + feedback suppression. This 4-bit field supports values from 0-15 + that are multiplied by GRTT_sender to determine the maximum backoff + timeout. The "backoff" field informs the receivers of the sender's + backoff factor parameter (K_sender). Recommended values and their + uses are described in the NORM receiver NACK procedure description in + Section 5.3. + + The "gsize" field contains a representation of the sender's current + estimate of group size (GSIZE_sender). This 4-bit field can roughly + represent values from ten to 500 million where the most significant + bit value of 0 or 1 represents a mantissa of 1 or 5, respectively, + and the three least significant bits incremented by one represent a + + + +Adamson, et al. Standards Track [Page 20] + +RFC 5740 NORM Protocol November 2009 + + + base-10 exponent (order of magnitude). For example, a field value of + "0x0" represents 1.0e+01 (10), a value of "0x8" represents 5.0e+01 + (50), a value of "0x1" represents 1.0e+02 (100), and a value of "0xf" + represents 5.0e+08. For NORM feedback suppression purposes, the + group size does not need to be represented with a high degree of + precision. The group size MAY even be estimated somewhat + conservatively (i.e., overestimated) to maintain low levels of + feedback traffic. A default group size estimate of 10,000 ("gsize" = + 0x3) is RECOMMENDED for general purpose reliable multicast + applications using the NORM protocol. + + The "flags" field contains a number of different binary flags + providing information and hints for the receiver to appropriately + handle the identified object. Defined flags in this field include: + + +----------------------+-------+------------------------------------+ + | Flag | Value | Purpose | + +----------------------+-------+------------------------------------+ + | NORM_FLAG_REPAIR | 0x01 | Indicates message is a repair | + | | | transmission | + | NORM_FLAG_EXPLICIT | 0x02 | Indicates a repair segment | + | | | intended to meet a specific | + | | | receiver erasure, as compared to | + | | | parity segments provided by the | + | | | sender for general purpose (with | + | | | respect to a FEC coding block) | + | | | erasure filling. | + | NORM_FLAG_INFO | 0x04 | Indicates availability of | + | | | NORM_INFO for object. | + | NORM_FLAG_UNRELIABLE | 0x08 | Indicates that repair | + | | | transmissions for the specified | + | | | object will be unavailable | + | | | (one-shot, best-effort | + | | | transmission). | + | NORM_FLAG_FILE | 0x10 | Indicates object is file-based | + | | | data (hint to use disk storage for | + | | | reception). | + | NORM_FLAG_STREAM | 0x20 | Indicates object is of type | + | | | NORM_OBJECT_STREAM. | + +----------------------+-------+------------------------------------+ + + NORM_FLAG_REPAIR is set when the associated message is a repair + transmission. This information can be used by receivers to help + observe a join policy where it is desired that newly joining + receivers only begin participating in the NACK process upon receipt + of new (non-repair) data content. NORM_FLAG_EXPLICIT is used to mark + repair messages sent when the data sender has exhausted its ability + to provide "fresh" (not previously transmitted) parity segments as + + + +Adamson, et al. Standards Track [Page 21] + +RFC 5740 NORM Protocol November 2009 + + + repair. This flag could possibly be used by intermediate systems + implementing functionality to control sub-casting of repair content + to different legs of a reliable multicast topology with disparate + repair needs. NORM_FLAG_INFO is set only when OPTIONAL NORM_INFO + content is actually available for the associated object. Thus, + receivers will NACK for retransmission of NORM_INFO only when it is + available for a given object. NORM_FLAG_UNRELIABLE is set when the + sender wishes to transmit an object with only "best effort" delivery + and will not supply repair transmissions for the object. NORM + receivers SHOULD NOT execute repair requests for objects marked with + the NORM_FLAG_UNRELIABLE flag. There are cases where receivers can + inadvertently request repair of such objects when all segments (or + info content) for those objects are not received (i.e., a gap in the + "object_transport_id" sequence is noted). In this case, the sender + SHALL invoke the NORM_CMD(SQUELCH) process as described in + Section 4.2.3. + + NORM_FLAG_FILE can be set as a hint from the sender that the + associated object SHOULD be stored in non-volatile storage. + NORM_FLAG_STREAM is set when the identified object is of type + NORM_OBJECT_STREAM. The presence of NORM_FLAG_STREAM overrides that + of NORM_FLAG_FILE with respect to interpretation of object size and + the format of NORM_DATA messages. + + The "fec_id" field corresponds to the FEC Encoding Identifier + described in the FEC Building Block document [RFC5052]. The "fec_id" + value implies the format of the "fec_payload_id" field and, coupled + with FEC Object Transmission Information, the procedures to decode + FEC-encoded content. Small block, systematic codes ("fec_id" = 129) + are expected to be used for most NORM purposes and systematic FEC + codes are RECOMMENDED for the most efficient performance of + NORM_OBJECT_STREAM transport. + + The "object_transport_id" field is a monotonically and incrementally + increasing value assigned by the sender to NormObjects being + transmitted. Transmissions and repair requests related to that + object use the same "object_transport_id" value. For sessions of + very long or indefinite duration, the "object_transport_id" field + will wrap and be repeated, but it is presumed that the 16-bit field + size provides a sufficient sequence space to avoid object confusion + amongst receivers and sources (i.e., receivers SHOULD re-synchronize + with a server when receiving object sequence identifiers sufficiently + out-of-range with the current state kept for a given source). During + the course of its transmission within a NORM session, an object is + uniquely identified by the concatenation of the sender "source_id" + and the given "object_transport_id". Note that NORM_INFO messages + associated with the identified object carry the same + "object_transport_id" value. + + + +Adamson, et al. Standards Track [Page 22] + +RFC 5740 NORM Protocol November 2009 + + + The "fec_payload_id" identifies the attached NORM_DATA "payload" + content. The size and format of the "fec_payload_id" field depends + upon the FEC type indicated by the "fec_id" field. These formats are + given in the descriptions of specific FEC schemes such as those + described in the FEC Basic Schemes [RFC5445] specification or in + other FEC Schemes. As an example, the format of the "fec_payload_id" + format for Small Block, Systematic codes ("fec_id" = 129) from the + FEC Basic Schemes [RFC5445] specification is given here: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_len | encoding_symbol_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 5: Example: FEC Payload Id Format for 'fec_id' = 129 + + In this example, FEC payload identifier, the "source_block_number", + "source_block_len", and "encoding_symbol_id" fields correspond to the + "Source Block Number", "Source Block Length", and "Encoding Symbol + ID" fields of the FEC Payload ID format for Small Block Systematic + FEC Schemes identified by a "fec_id" value of 129 as specified by the + FEC Basic Schemes [RFC5445] specification. The "source_block_number" + identifies the coding block's relative position with a NormObject. + Note that, for NormObjects of type NORM_OBJECT_STREAM, the + "source_block_number" will wrap for very long-lived sessions. The + "source_block_len" indicates the number of user data segments in the + identified coding block. Given the "source_block_len" information of + how many symbols of application data are contained in the block, the + receiver can determine whether the attached segment is data or parity + content and treat it appropriately. Applications MAY dynamically + "shorten" code blocks when the pending information content is not + predictable (e.g., real-time message streams). In that case, the + "source_block_len" value given for an "encoding_symbol_id" that + contains FEC parity content SHALL take precedence over the + "source_block_len" value provided for any packets containing source + symbols. Also, the "source_block_len" value given for an ordinally + higher "encoding_symbol_id" SHALL take precedence over the + "source_block_len" given for prior encoding symbols. The reason for + this is that the sender will only know the maximum source block + length at the time it is transmitting source symbols, but then + subsequently "shorten" the code and then provide that last source + symbol and/or encoding symbols with FEC parity content. The + "encoding_symbol_id" identifies which specific symbol (segment) + within the coding block the attached payload conveys. Depending upon + the value of the "encoding_symbol_id" and the associated + "source_block_len" parameters for the block, the symbol (segment) + + + +Adamson, et al. Standards Track [Page 23] + +RFC 5740 NORM Protocol November 2009 + + + referenced will be a user data or a FEC parity segment. For + systematic codes, encoding symbols numbered less than the + source_block_len contain original application data while segments + greater than or equal to source_block_len contain parity symbols + calculated for the block. The concatenation of object_transport_id:: + fec_payload_id can be viewed as a unique transport protocol data unit + identifier for the attached segment with respect to the NORM sender's + instance within a session. + + Additional FEC Object Transmission Information (FTI) (as described in + the FEC Building Block [RFC5052]) document is needed to properly + receive and decode NORM transport objects. This information MAY be + provided as out-of-band session information. In some cases, it will + be useful for the sender to include this information "in-band" to + facilitate receiver operation with minimal pre-configuration. For + this purpose, the NORM FEC Object Transmission Information Header + Extension (EXT_FTI) is defined. This header extension MAY be applied + to NORM_DATA and NORM_INFO messages to provide this necessary + information. The format of the EXT_FTI consists of two parts, a + general part that contains the size of the associated transport + object and a portion that depends upon the FEC scheme being used. + The "fec_id" field in NORM_DATA and NORM_INFO messages identifies the + FEC scheme. The format of the EXT_FTI general part is given here. + + 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 = 64 | hel = 4 | object_size (msb) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | object_size (lsb) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | FEC scheme-specific content ... | + + Figure 6: EXT_FTI Header Extension General Portion Format + + The header extension type "het" field value for the EXT_FTI header + extension is 64. The header extension length "hel" value depends + upon the format of the FTI for encoding type identified by the + "fec_id" field. + + The 48-bit "object_size" field indicates the total length of the + object (in bytes) for the static object types of NORM_OBJECT_FILE and + NORM_OBJECT_DATA. This information is used by receivers to determine + storage requirements and/or allocate storage for the received object. + Receivers with insufficient storage capability might wish to forego + reliable reception (i.e., not NACK for) of the indicated object. In + the case of objects of type NORM_OBJECT_STREAM, the "object_size" + field is used by the sender to advertise the size of its stream + + + +Adamson, et al. Standards Track [Page 24] + +RFC 5740 NORM Protocol November 2009 + + + buffer to the receiver group. In turn, the receivers SHOULD use this + information to allocate a stream buffer for reception of + corresponding size. + + As noted, the format of the extension depends upon the FEC code in + use, but in general, it contains any necessary details on the code in + use (e.g., FEC Instance ID, etc.). As an example, the format of the + EXT_FTI for small block systematic codes ("fec_id" = 129) is given + here: + 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 = 64 | hel = 4 | object_size (msb) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | object_size (lsb) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_instance_id | segment_size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_max_block_len | fec_num_parity | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 7: Example: EXT_FTI Header Extension Format for 'fec_id' = 129 + + In this example (for "fec_id" = 129), the "hel" field value is 4. + The size of the EXT_FTI header extension will possibly be different + for other FEC schemes. + + The 48-bit "object_size" serves the purpose described previously. + + The "fec_instance_id" corresponds to the "FEC Instance ID" described + in the FEC Building Block [RFC5052] document. In this case, the + "fec_instance_id" is a value corresponding to the particular type of + Small Block Systematic Code being used (e.g., Reed-Solomon GF(2^8), + Reed-Solomon GF(2^16), etc). The standardized assignment of FEC + Instance ID values is described in RFC 5052. + + The "segment_size" field indicates the sender's current setting for + maximum message payload content (in bytes). This allows receivers to + allocate appropriate buffering resources and to determine other + information in order to properly process received data messaging. + Typically, FEC parity symbol segments will be of this size. + + The "fec_max_block_len" indicates the current maximum number of user + data segments per FEC coding block to be used by the sender during + the session. This allows receivers to allocate appropriate buffer + space for buffering blocks transmitted by the sender. + + The "fec_num_parity" corresponds to the "maximum number of encoding + + + +Adamson, et al. Standards Track [Page 25] + +RFC 5740 NORM Protocol November 2009 + + + symbols that can be generated for any source block" as described in + FEC Object Transmission Information for Small Block Systematic Codes + as described in the FEC Building Block [RFC5052] document. For + example, Reed-Solomon codes can be arbitrarily shortened to create + different code variations for a given block length. In the case of + Reed-Solomon (GF(2^8) and GF(2^16)) codes, this value indicates the + maximum number of parity segments available from the sender for the + coding blocks. This field MAY be interpreted differently for other + systematic codes as they are defined. + + The payload portion of NORM_DATA messages includes source data or + FEC-encoded application content. The content of this payload depends + upon the FEC scheme being employed, and support for streaming using + the NORM_OBJECT_STREAM type, when applicable, necessitates some + additional content in the payload. + + The "payload_len", "payload_msg_start", and "payload_offset" fields + are present only for transport objects of type NORM_OBJECT_STREAM. + These REQUIRED fields allow senders to arbitrarily vary the size of + NORM_DATA payload segments for streams. This allows applications to + flush transmitted streams as needed to meet unique streaming + requirements. For objects of types NORM_OBJECT_FILE and + NORM_OBJECT_DATA, these fields are unnecessary since the receiver can + calculate the payload length and offset information from the + "fec_payload_id" using the REQUIRED block partitioning algorithm + described in the FEC Building Block [RFC5052] document. When + systematic FEC codes (e.g., "fec_id" = 129) are used, the + "payload_len", "payload_msg_start", and "payload_offset" fields + contain actual payload_data length, message start index (or stream + control code), and byte offset values for the associated application + stream data segment (the remainder of the "payload_data" field + content) for those NORM_DATA messages containing source data symbols. + In NORM_DATA messages that contain FEC parity content, these fields + do not contain values that can be directly interpreted, but instead + are values computed from FEC encoding the "payload_len", + "payload_msg_start", and "payload_offset" fields for the source data + segments of the corresponding coding block. The actual + "payload_msg_start", "payload_len" and, "payload_offset" values of + missing data content can be determined upon decoding a FEC coding + block. Note that these fields do NOT contribute to the value of the + NORM_DATA "hdr_len" field. These fields are present only when the + "flags" portion of the NORM_DATA message indicate the transport + object is of type NORM_OBJECT_STREAM. + + The "payload_len" value, when non-zero, indicates the length (in + bytes) of the source content contained in the associated + "payload_data" field. However, when the "payload_len" value is equal + to ZERO, this indicates that the "payload_msg_start" field be + + + +Adamson, et al. Standards Track [Page 26] + +RFC 5740 NORM Protocol November 2009 + + + alternatively interpreted as a "stream_control_code". The only + "stream_control_code" value defined is NORM_STREAM_END = 0. The + NORM_STREAM_END code indicates that the sender is terminating the + transmission of stream content at the corresponding position in the + stream and the receiver MUST NOT expect content (or request repair + for any content) following that position in the stream. Additional + specifications MAY extend the functionality of the NORM stream + transport mode by defining additional stream control codes. These + control codes are delivered to the recipient application reliably, + in-order with respect to the streamed application data content. + + The "payload_msg_start" field serves one of two exclusive purposes. + When the "payload_len" value is non-zero, the "payload_msg_start" + field, when also set to a non-zero value, indicates that the + associated "payload_data" content contains an application-defined + message boundary (start-of-message). When such a message boundary is + indicated, the first byte of an application-defined message, with + respect to the "payload_data" field, will be found at an offset of + "payload_msg_start - 1" bytes. Thus, if a NORM_DATA payload for a + NORM_OBJECT_STREAM contains the start of an application message at + the first byte of the "payload_data" field, the value of the + "payload_msg_start" field will be '1'. NORM implementations SHOULD + provide sender stream applications with a capability to mark message + boundaries in this manner. Similarly, the NORM receiver + implementation SHOULD enable the application to recover such message + boundary information. This enables NORM receivers to "synchronize" + reliable reception of transmitted message stream content in a + meaningful way (i.e., meaningful to the application) at any time, + whether joining a session already in progress, or departing the + session and returning. Note that if the value of the + "payload_msg_start" field is ZERO, no message boundary is present. + The "payload_msg_start" value will always be less than or equal to + the "payload_len" value except for the special case of "payload_len = + 0", which indicates the "payload_msg_start" field be instead + interpreted as a "stream_control_code" + + The "payload_offset" field indicates the relative byte position (from + the sender stream transmission start) of the source content contained + in the "payload_data" field. Note that for long-lived streams, the + "payload_offset" field will wrap. + + The "payload_data" field contains the original application source or + parity content for the symbol identified by the "fec_payload_id". + The length of this field SHALL be limited to a maximum of the + sender's NormSegmentSize bytes as given in the FTI for the object. + Note the length of this field for messages containing parity content + will always be of length NormSegmentSize. When encoding data + segments of varying sizes, the FEC encoder SHALL assume ZERO value + + + +Adamson, et al. Standards Track [Page 27] + +RFC 5740 NORM Protocol November 2009 + + + padding for data segments with a length less than the + NormSegmentSize. It is RECOMMENDED that a sender's NormSegmentSize + generally be constant for the duration of a given sender's term of + participation in the session, but can possibly vary on a per-object + basis. The NormSegmentSize SHOULD be configurable by the sender + application prior to session participation as needed for network + topology MTU considerations. For IPv6, MTU discovery MAY be possibly + leveraged at session startup to perform this configuration. The + "payload_data" content MAY be delivered directly to the application + for source symbols (when systematic FEC encoding is used) or upon + decoding of the FEC block. For NORM_OBJECT_FILE and + NORM_OBJECT_STREAM objects, the data segment length and offset can be + calculated using the block partitioning algorithm described in the + FEC Building Block [RFC5052] document. For NORM_OBJECT_STREAM + objects, the length and offset is obtained from the segment's + corresponding embedded "payload_len" and "payload_offset" fields. + +4.2.2. NORM_INFO Message + + The NORM_INFO message is used to convey OPTIONAL, application- + defined, out-of-band context information for transmitted NormObjects. + An example NORM_INFO use for bulk file transfer is to place MIME type + information for the associated file, data, or stream object into the + NORM_INFO payload. Receivers could then use the NORM_INFO content to + make a decision as to whether to participate in reliable reception of + the associated object. Each NormObject can have an independent unit + of NORM_INFO with which it is associated. NORM_DATA messages contain + a flag to indicate the availability of NORM_INFO for a given + NormObject. NORM receivers will NACK for retransmission of NORM_INFO + when they have not received it for a given NormObject. The size of + the NORM_INFO content is limited to that of a single NormSegmentSize + for the given sender. This atomic nature allows the NORM_INFO to be + rapidly and efficiently repaired within the NORM reliable + transmission process. + + When NORM_INFO content is available for a NormObject, the + NORM_FLAG_INFO flag SHALL be set in NORM_DATA messages for the + corresponding "object_transport_id" and the NORM_INFO message SHALL + be transmitted as the first message for the NormObject. + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 28] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=1| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | flags | fec_id | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header_extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | payload_data | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 8: NORM_INFO Message Format + + The "version", "type", "hdr_len", "sequence", and "source_id" fields + form the NORM common message header as described in Section 4.1. The + value of the "hdr_len" field when no header extensions are present is + 4. + + The "instance_id", "grtt", "backoff", "gsize", "flags", "fec_id", and + "object_transport_id" fields carry the same information and serve the + same purpose as NORM_DATA messages. These values allow the receiver + to prepare appropriate buffering, etc., for further transmissions + from the sender when NORM_INFO is the first message received. + + As with NORM_DATA messages, the NORM FTI Header Extension (EXT_FTI) + MAY be optionally applied to NORM_INFO messages. To conserve + protocol overhead, NORM implementations MAY apply the EXT_FTI when + used to NORM_INFO messages only and not to NORM_DATA messages. + + The NORM_INFO "payload_data" field contains sender application- + defined content that can be used by receiver applications for various + purposes as described above. + +4.2.3. NORM_CMD Messages + + NORM_CMD messages are transmitted by senders to perform a number of + different protocol functions. This includes functions such as round- + trip timing collection, congestion control functions, synchronization + of sender/receiver repair "windows", and notification of sender + status. A core set of NORM_CMD messages is enumerated. + Additionally, a range of command types remain available for potential + + + +Adamson, et al. Standards Track [Page 29] + +RFC 5740 NORM Protocol November 2009 + + + application-specific use. Some NORM_CMD types can have dynamic + content attached. Any attached content will be limited to the + maximum length of the sender NormSegmentSize to retain the atomic + nature of the commands. All NORM_CMD messages begin with a common + set of fields, after the usual NORM message common header. The + standard NORM_CMD fields are: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type | | + +-+-+-+-+-+-+-+-+ NORM_CMD Content + + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 9: NORM_CMD Standard Fields + + The "version", "type", "hdr_len", "sequence", and "source_id" fields + form the NORM common message header as described in Section 4.1. The + value of the "hdr_len" field for NORM_CMD messages without header + extensions present depends upon the "sub-type" field. + + The "instance_id", "grtt", "backoff", and "gsize" fields provide the + same information and serve the same purpose as NORM_DATA and + NORM_INFO messages. The "sub-type" field indicates the type of + command to follow. The remainder of the NORM_CMD message is + dependent upon the command sub-type. NORM command sub-types include: + + +-----------------------+----------+--------------------------------+ + | Command | Sub-type | Purpose | + +-----------------------+----------+--------------------------------+ + | NORM_CMD(FLUSH) | 1 | Used to indicate sender | + | | | temporary end-of-transmission. | + | | | (Assists in robustly | + | | | initiating outstanding repair | + | | | requests from receivers). May | + | | | also be optionally used to | + | | | collect positive | + | | | acknowledgment of reliable | + | | | reception from a subset of | + | | | receivers. | + | NORM_CMD(EOT) | 2 | Used to indicate sender | + | | | permanent end-of-transmission. | + + + +Adamson, et al. Standards Track [Page 30] + +RFC 5740 NORM Protocol November 2009 + + + | NORM_CMD(SQUELCH) | 3 | Used to advertise sender's | + | | | current repair window in | + | | | response to out-of-range NACKs | + | | | from receivers. | + | NORM_CMD(CC) | 4 | Used for GRTT measurement and | + | | | collection of congestion | + | | | control feedback. | + | NORM_CMD(REPAIR_ADV) | 5 | Used to advertise sender's | + | | | aggregated repair/feedback | + | | | state for suppression of | + | | | unicast feedback from | + | | | receivers. | + | NORM_CMD(ACK_REQ) | 6 | Used to request | + | | | application-defined positive | + | | | acknowledgment from a list of | + | | | receivers (OPTIONAL). | + | NORM_CMD(APPLICATION) | 7 | Used for application-defined | + | | | purposes that need to | + | | | temporarily preempt or | + | | | supplement data transmission | + | | | (OPTIONAL). | + +-----------------------+----------+--------------------------------+ + +4.2.3.1. NORM_CMD(FLUSH) Message + + The NORM_CMD(FLUSH) command is sent when the sender reaches the end + of all data content and pending repairs it has queued for + transmission. This can indicate either a temporary or permanent end- + of-data transmission, but that the sender is still willing to respond + to repair requests. This command is repeated once per 2*GRTT_sender + to excite the receiver set for any outstanding repair requests up to + and including the transmission point indicated within the + NORM_CMD(FLUSH) message. The number of repeats is equal to + NORM_ROBUST_FACTOR unless a list of receivers from which explicit + positive acknowledgment is expected ("acking_node_list") is given. + In that case, the "acking_node_list" is updated as acknowledgments + are received and the NORM_CMD(FLUSH) is repeated according to the + mechanism described in Section 5.5.3. The greater the + NORM_ROBUST_FACTOR, the greater the probability that all applicable + receivers will be excited for acknowledgment or repair requests + (NACKs) AND that the corresponding NACKs are delivered to the sender. + A default value of NORM_ROBUST_FACTOR equal to 20 is RECOMMENDED. If + a NORM_NACK message interrupts the flush process, the sender SHALL + re-initiate the flush process after any resulting repair + transmissions are completed. + + Note that receivers also employ a timeout mechanism to self-initiate + NACKing (if there are outstanding repair needs) when no messages of + + + +Adamson, et al. Standards Track [Page 31] + +RFC 5740 NORM Protocol November 2009 + + + any type are received from a sender. This inactivity timeout is + related to the NORM_CMD(FLUSH) and NORM_ROBUST_FACTOR and is + specified in Section 5.3. Receivers SHALL self-initiate the NACK + repair process when the inactivity timeout has expired for a specific + sender and the receiver has pending repairs needed from that sender. + With a sufficiently large NORM_ROBUST_FACTOR value, data content is + delivered with a high assurance of reliability. The penalty of a + large NORM_ROBUST_FACTOR value is the potential transmission of + excess NORM_CMD(FLUSH) messages and a longer inactivity timeout for + receivers to self-initiate a terminal NACK process. + + For finite-sized transport objects such as NORM_OBJECT_DATA and + NORM_OBJECT_FILE, the flush process (if there are no further pending + objects) occurs at the end of these objects. Thus, FEC repair + information is always available for repairs in response to repair + requests elicited by the flush command. However, for + NORM_OBJECT_STREAM, the flush can occur at any time, including in the + middle of a FEC coding block if systematic FEC codes are employed. + In this case, the sender will not yet be able to provide FEC parity + content for the concurrent coding block and will be limited to + explicitly repairing the stream with source data content for that + block. Applications that anticipate frequent flushing of stream + content SHOULD be judicious in the selection of the FEC coding block + size (i.e., do not use a very large coding block size if frequent + flushing occurs). For example, a reliable multicast application + transmitting an ongoing series of intermittent, relatively small + messages will need to trade-off using the NORM_OBJECT_DATA paradigm + versus the NORM_OBJECT_STREAM paradigm with an appropriate FEC coding + block size. This is analogous to application trade-offs for other + transport protocols such as the selection of different TCP modes of + operation such as "no delay", etc. + + + + + + + + + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 32] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 1 | fec_id | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_payload_id | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | acking_node_list (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 10: NORM_CMD(FLUSH) Message Format + + The "version", "type", "hdr_len", "sequence", and "source_id" fields + form the NORM common message header as described in Section 4.1. In + addition to the NORM common message header and standard NORM_CMD + fields, the NORM_CMD(FLUSH) message contains fields to identify the + current status and logical transmit position of the sender. + + The "fec_id" field indicates the FEC type used for the flushing + "object_transport_id" and implies the size and format of the + "fec_payload_id" field. Note the "hdr_len" value for the + NORM_CMD(FLUSH) message is 4 plus the size of the "fec_payload_id" + field when no header extensions are present. + + The "object_transport_id" and "fec_payload_id" fields indicate the + sender's current logical "transmit position". These fields are + interpreted in the same manner as in the NORM_DATA message type. + Upon receipt of the NORM_CMD(FLUSH), receivers are expected to check + their completion state THROUGH (including) this transmission + position. If receivers have outstanding repair needs in this range, + they SHALL initiate the NORM NACK Repair Process as described in + Section 5.3. If receivers have no outstanding repair needs, no + response to the NORM_CMD(FLUSH) is generated. + + For NORM_OBJECT_STREAM objects using systematic FEC codes, receivers + MUST request "explicit-only" repair of the identified + "source_block_number" if the given "encoding_symbol_id" is less than + the "source_block_len". This condition indicates the sender has not + yet completed encoding the corresponding FEC block and parity content + is not yet available. An "explicit-only" repair request consists of + + + +Adamson, et al. Standards Track [Page 33] + +RFC 5740 NORM Protocol November 2009 + + + NACK content for the applicable "source_block_number" that does not + include any requests for parity-based repair. This allows NORM + sender applications to "flush" an ongoing stream of transmission when + needed, even if in the middle of a FEC block. Once the sender + resumes stream transmission and passes the end of the pending coding + block, subsequent NACKs from receivers SHALL request parity-based + repair as usual. Note that the use of a systematic FEC code is + assumed here. Note that a sender has the option of arbitrarily + shortening a given code block when such an application "flush" + occurs. In this case, the receiver will request explicit repair, but + the sender MAY provide FEC-based repair (parity segments) in + response. These parity segments MUST contain the corrected + "source_block_len" for the shortened block and that + "source_block_len" associated with segments containing parity content + SHALL override the previously advertised "source_block_len". + Similarly, the "source_block_len" associated with the highest ordinal + "encoding_symbol_id" SHALL take precedence over prior symbols when a + difference (e.g., due to code shortening at the sender) occurs. + Normal receiver NACK initiation and construction is discussed in + detail in Section 5.3. + + The OPTIONAL "acking_node_list" field contains a list of NormNodeIds + for receivers from which the sender is requesting explicit positive + acknowledgment of reception up through the transmission point + identified by the "object_transport_id" and "fec_payload_id" fields. + The length of the list can be inferred from the length of the + received NORM_CMD(FLUSH) message. When the "acking_node_list" is + present, the lightweight positive acknowledgment process described in + Section 5.5.3 SHALL be observed. + +4.2.3.2. NORM_CMD(EOT) Message + + The NORM_CMD(EOT) command is sent when the sender reaches permanent + end-of-transmission with respect to the NormSession and will not + respond to further repair requests. This allows receivers to + gracefully reach closure of operation with this sender (without + requiring any timeout) and free any resources that are no longer + needed. The NORM_CMD(EOT) command SHOULD be sent with the same + robust mechanism as used for NORM_CMD(FLUSH) commands to provide a + high assurance of reception by the receiver set. + + + + + + + + + + + +Adamson, et al. Standards Track [Page 34] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 2 | reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 11: NORM_CMD(EOT) Message Format + + The value of the "hdr_len" field for NORM_CMD(EOT) messages without + header extensions present is 4. The "reserved" field is reserved for + future use and MUST be set to an all ZERO value. Receivers MUST + ignore the "reserved" field. + +4.2.3.3. NORM_CMD(SQUELCH) Message + + The NORM_CMD(SQUELCH) command is transmitted in response to outdated + or invalid NORM_NACK content received by the sender. Invalid + NORM_NACK content consists of repair requests for NormObjects for + which the sender is unable or unwilling to provide repair. This + includes repair requests for outdated objects, aborted objects, or + those objects that the sender previously transmitted marked with the + NORM_FLAG_UNRELIABLE flag. This command indicates to receivers what + content is available for repair, thus serving as a description of the + sender's current "repair window". Receivers SHALL NOT generate + repair requests for content identified as invalid by a + NORM_CMD(SQUELCH). + + The NORM_CMD(SQUELCH) command is sent once per 2*GRTT_sender at the + most. The NORM_CMD(SQUELCH) advertises the current "repair window" + of the sender by identifying the earliest (lowest) transmission point + for which it will provide repair, along with an encoded list of + objects from that point forward that are no longer valid for repair. + This mechanism allows the sender application to cancel or abort + transmission and/or repair of specific previously enqueued objects. + The list also contains the identifiers for any objects within the + repair window that were sent with the NORM_FLAG_UNRELIABLE flag set. + In normal conditions, the NORM_CMD(SQUELCH) will be needed + infrequently, and generally only to provide a reference repair window + for receivers who have fallen "out-of-sync" with the sender due to + extremely poor network conditions. + + The starting point of the invalid NormObject list begins with the + + + +Adamson, et al. Standards Track [Page 35] + +RFC 5740 NORM Protocol November 2009 + + + lowest invalid NormTransportId greater than the current "repair + window" start from the invalid NACK(s) that prompted the generation + of the squelch. The length of the list is limited by the sender's + NormSegmentSize. This allows the receivers to learn the status of + the sender's applicable object repair window with minimal + transmission of NORM_CMD(SQUELCH) commands. The format of the + NORM_CMD(SQUELCH) message is: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 3 | fec_id | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_payload_id | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | invalid_object_list | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 12: NORM_CMD(SQUELCH) Message Format + + In addition to the NORM common message header and standard NORM_CMD + fields, the NORM_CMD(SQUELCH) message contains fields to identify the + earliest logical transmit position of the sender's current repair + window and an "invalid_object_list" beginning with the index of the + logically earliest invalid repair request from the offending NACK + message that initiated the NORM_CMD(SQUELCH) transmission. The value + of the "hdr_len" field when no extensions are present is 4 plus the + size of the "fec_payload_id" field that is dependent upon the FEC + scheme identified by the "fec_id" field. + + The "object_transport_id" and "fec_payload_id" fields are + concatenated to indicate the beginning of the sender's current repair + window (i.e., the logically earliest point in its transmission + history for which the sender can provide repair). The "fec_id" field + implies the size and format of the "fec_payload_id" field. This + serves as an advertisement of a "synchronization" point for receivers + to request repair. Note, that while an "encoding_symbol_id" MAY be + included in the "fec_payload_id" field, the sender's repair window + SHOULD be aligned on FEC coding block boundaries and thus the + "encoding_symbol_id" SHOULD be zero. + + + + +Adamson, et al. Standards Track [Page 36] + +RFC 5740 NORM Protocol November 2009 + + + The "invalid_object_list" is a list of 16-bit NormTransportIds that, + although they are within the range of the sender's current repair + window, are no longer available for repair from the sender. For + example, a sender application MAY dequeue an out-of-date object even + though it is still within the repair window. The total size of the + "invalid_object_list" content can be determined from the packet's + payload length and is limited to a maximum of the NormSegmentSize of + the sender. Thus, for very large repair windows, it is possible that + a single NORM_CMD(SQUELCH) message cannot include the entire set of + invalid objects in the repair window. In this case, the sender SHALL + ensure that the list begins with a NormTransportId that is greater + than or equal to the lowest ordinal invalid NormTransportId from the + NACK message(s) that prompted the NORM_CMD(SQUELCH) generation. The + NormTransportId in the "invalid_object_list" MUST be ordinally + greater than the "object_transport_id" marking the beginning of the + sender's repair window. This ensures convergence of the squelch + process, even if multiple invalid NACK/squelch iterations are + required. This explicit description of invalid content within the + sender's current window allows the sender application (most notably + for discrete object transport) to arbitrarily invalidate (i.e., + dequeue) portions of enqueued content (e.g., certain objects) for + which it no longer wishes to provide reliable transport. + +4.2.3.4. NORM_CMD(CC) Message + + The NORM_CMD(CC) message contains fields to enable sender-to-group + GRTT measurement and to excite the group for congestion control + feedback. A baseline NORM congestion control scheme (NORM-CC), based + on the TCP-Friendly Multicast Congestion Control (TFMCC) scheme of + RFC 4654 is fully specified in Section 5.5.2 of this document. The + NORM_CMD(CC) message is usually transmitted as part of NORM-CC + operation. A NORM header extension is defined below to be used with + the NORM_CMD(CC) message to support NORM-CC operation. Different + header extensions MAY be defined for the NORM_CMD(CC) (and/or other + NORM messages as needed) to support alternative congestion control + schemes in the future. If NORM is operated in a network where + resources are explicitly dedicated to the NORM session and therefore + congestion control operation is disabled, the NORM_CMD(CC) message is + then used solely for GRTT measurement and MAY be sent less frequently + than with congestion control operation. + + + + + + + + + + + +Adamson, et al. Standards Track [Page 37] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 4 | reserved | cc_sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | send_time_sec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | send_time_usec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | cc_node_list (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 13: NORM_CMD(CC) Message Format + + The NORM common message header and standard NORM_CMD fields serve + their usual purposes. The value of the "hdr_len" field when no + header extensions are present is 6. + + The "reserved" field is for potential future use and MUST be set to + ZERO in this version of the NORM protocol and its baseline NORM-CC + congestion control scheme. It is possible for alternative congestion + control schemes to use the NORM_CMD(CC) message defined here and + leverage the "reserved" field for scheme-specific purposes. + + The "cc_sequence" field is a sequence number applied by the sender. + For NORM-CC operation, it is used to provide functionality equivalent + to the "feedback round number" (fb_nr) described in RFC 4654. The + most recently received "cc_sequence" value is recorded by receivers + and can be fed back to the sender in congestion control feedback + generated by the receivers for that sender. The "cc_sequence" number + can also be used in NORM implementations to assess how recently a + receiver has received NORM_CMD(CC) probes from the sender. This can + be useful instrumentation for complex or experimental multicast + routing environments. + + The "send_time" field is a timestamp indicating the time that the + NORM_CMD(CC) message was transmitted. This consists of a 64-bit + field containing 32-bits with the time in seconds ("send_time_sec") + + + +Adamson, et al. Standards Track [Page 38] + +RFC 5740 NORM Protocol November 2009 + + + and 32-bits with the time in microseconds ("send_time_usec") since + some reference time the source maintains (usually 00:00:00, 1 January + 1970). The byte ordering of the fields is "Big Endian" network + order. Receivers use this timestamp adjusted by the amount of delay + from the time they received the NORM_CMD(CC) message to the time of + their response as the "grtt_response" portion of NORM_ACK and + NORM_NACK messages generated. This allows the sender to evaluate + round-trip times to different receivers for congestion control and + other (e.g., GRTT determination) purposes. + + To facilitate the baseline NORM-CC scheme described in Section 5.5.2, + a NORM-CC Rate header extension (EXT_RATE) is defined to inform the + group of the sender's current transmission rate. This is used along + with the loss detection "sequence" field of all NORM sender messages + and the NORM_CMD(CC) GRTT collection process to support NORM-CC + congestion control operation. The format of this header extension is + as follows: + 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 | reserved | send_rate | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The "send_rate" field indicates the sender's current transmission + rate in bytes per second. The 16-bit "send_rate" field consists of + 12 bits of mantissa in the most significant portion and 4 bits of + base 10 integer exponent (E) information in the least significant + portion. The 12-bit mantissa portion of the field is scaled such + that a base 10 mantissa (M) floating point value of 0.0 corresponds + to 0 and a value of 10.0 corresponds to 4096 in the upper 12 bits of + the 16-bit "send_rate" field. Thus: + + send_rate = (((int)(M * 4096.0 / 10.0 + 0.5)) << 4) | E; + + For example, to represent a transmission rate of 256 kbit/s (3.2e+04 + bytes per second), the lower 4 bits of the 16-bit field contain a + value of 0x04 to represent the exponent (E) while the upper 12 bits + contain a value of 0x51f (M) as determined from the equation given + above: + send_rate = (((int)((3.2 * 4096.0 / 10.0) + 0.5)) << 4) | 4; + = (0x51f << 4) | 0x4 + = 0x51f4 + + To decode the "send_rate" field, the following equation can be used: + + value = (send_rate >> 4) * (10/4096) * power(10, (send_rate & x000f)) + + Note the maximum transmission rate that can be represented by this + + + +Adamson, et al. Standards Track [Page 39] + +RFC 5740 NORM Protocol November 2009 + + + scheme is approximately 9.99e+15 bytes per second. + + When this extension is present, a "cc_node_list" might be attached as + the payload of the NORM_CMD(CC) message. The presence of this header + extension also implies that NORM receivers MUST respond according to + the procedures described in Section 5.5.2. + + The "cc_node_list" consists of a list of NormNodeIds and their + associated congestion control status. This includes the current + limiting receiver (CLR) node, any potential limiting receiver (PLR) + nodes that have been identified, and some number of receivers for + which congestion control status is being provided, most notably + including the receivers' current RTT measurement. The maximum length + of the "cc_node_list" provides for at least the CLR and one other + receiver, but can be increased for more timely feedback to the group. + The list length can be inferred from the length of the NORM_CMD(CC) + message. + + Each item in the "cc_node_list" is in the following format: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | cc_node_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | cc_flags | cc_rtt | cc_rate | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The "cc_node_id" is the NormNodeId of the receiver the item + represents. + + The "cc_flags" field contains flags indicating the congestion control + status of the indicated receiver. The following flags are defined: + + +--------------------+-------+--------------------------------------+ + | Flag | Value | Purpose | + +--------------------+-------+--------------------------------------+ + | NORM_FLAG_CC_CLR | 0x01 | Receiver is the current limiting | + | | | receiver (CLR). | + | NORM_FLAG_CC_PLR | 0x02 | Receiver is a potential limiting | + | | | receiver (PLR). | + | NORM_FLAG_CC_RTT | 0x04 | Receiver has measured RTT with | + | | | respect to sender. | + + + + + + + + + +Adamson, et al. Standards Track [Page 40] + +RFC 5740 NORM Protocol November 2009 + + + | NORM_FLAG_CC_START | 0x08 | Sender/receiver is in "slow start" | + | | | phase of congestion control | + | | | operation (i.e., the receiver has | + | | | not yet detected any packet loss and | + | | | the "cc_rate" field is the | + | | | receiver's actual measured receive | + | | | rate). | + | NORM_FLAG_CC_LEAVE | 0x10 | Receiver is imminently leaving the | + | | | session and its feedback SHOULD not | + | | | be considered in congestion control | + | | | operation. | + +--------------------+-------+--------------------------------------+ + + The "cc_rtt" contains a quantized representation of the RTT as + measured by the sender with respect to the indicated receiver. This + field is valid only if the NORM_FLAG_CC_RTT flag is set in the + "cc_flags" field. This one-byte field is a quantized representation + of the RTT using the algorithm described in the Multicast NACK + Building Block [RFC5401] document. + + The "cc_rate" field contains a representation of the receiver's + current calculated (during steady-state congestion control operation) + or twice its measured (during the slow start phase) congestion + control rate. This field is encoded and decoded using the same + technique as described for the NORM_CMD(CC) "send_rate" field. + +4.2.3.5. NORM_CMD(REPAIR_ADV) Message + + The NORM_CMD(REPAIR_ADV) message is used by the sender to "advertise" + its aggregated repair state from NORM_NACK messages accumulated + during a repair cycle and/or congestion control feedback received. + This message is sent only when the sender has received NORM_NACK + and/or NORM_ACK(CC) (when congestion control is enabled) messages via + unicast transmission instead of multicast. By relaying this + information to the receiver set, suppression of feedback can be + achieved even when receivers are unicasting that feedback instead of + multicasting it among the group [NormFeedback]. + + + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 41] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 5 | flags | reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | repair_adv_payload | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 14: NORM_CMD(REPAIR_ADV) Message Format + + The "instance_id", "grtt", "backoff", "gsize", and "sub-type" fields + serve the same purpose as in other NORM_CMD messages. The value of + the "hdr_len" field when no extensions are present is 4. + + The "flags" field provides information on the NORM_CMD(REPAIR_ADV) + content. There is currently one NORM_CMD(REPAIR_ADV) flag defined: + + NORM_REPAIR_ADV_FLAG_LIMIT = 0x01 + + This flag is set by the sender when it is unable to fit its full + current repair state into a single NormSegmentSize. If this flag is + set, receivers SHALL limit their NACK response to generating NACK + content only up through the maximum ordinal transmission position + (objectTransportId::fecPayloadId) included in the + "repair_adv_content". + + When congestion control operation is enabled, a header extension + SHOULD be applied to the NORM_CMD(REPAIR_ADV) representing the most + limiting (in terms of congestion control feedback suppression) + congestion control response. This allows the NORM_CMD(REPAIR_ADV) + message to suppress receiver congestion control responses as well as + NACK feedback messages. The field is defined as a header extension + so that alternative congestion control schemes can be used for NORM + without revision to this document. A NORM-CC Feedback Header + Extension (EXT_CC) is defined to encapsulate congestion control + feedback within NORM_NACK, NORM_ACK, and NORM_CMD(REPAIR_ADV) + messages. If another congestion control technique (e.g., Pragmatic + General Multicast Congestion Control (PGMCC) [PgmccPaper]) is used + + + +Adamson, et al. Standards Track [Page 42] + +RFC 5740 NORM Protocol November 2009 + + + within a NORM implementation, an additional header extension MAY need + to be defined to encapsulate any required feedback content. The + NORM-CC Feedback Header Extension format is: + 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 = 3 | hel = 3 | cc_sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | cc_flags | cc_rtt | cc_loss | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | cc_rate | cc_reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The "cc_sequence" field contains the current greatest "cc_sequence" + value receivers have received in NORM_CMD(CC) messages from the + sender. This information assists the sender in congestion control + operation by providing an indicator of how current ("fresh") the + receiver's round-trip measurement reference time is and whether the + receiver has been successfully receiving recent congestion control + probes. For example, if it is apparent the receiver has not been + receiving recent congestion control probes (and thus possibly other + messages from the sender), the sender SHOULD choose to take + congestion avoidance measures. For NORM_CMD(REPAIR_ADV) messages, + the sender SHALL set the "cc_sequence" field value to the value set + in the last NORM_CMD(CC) message sent. + + The "cc_flags" field contains bits representing the receiver's state + with respect to congestion control operation. The possible values + for the "cc_flags" field are those specified for the NORM_CMD(CC) + message node list item flags. These fields are used by receivers in + controlling (suppressing as necessary) their congestion control + feedback. For NORM_CMD(REPAIR_ADV) messages, the NORM_FLAG_CC_RTT + SHALL be set only when all feedback messages received by the sender + have the flag set. Similarly, the NORM_FLAG_CC_CLR or + NORM_FLAG_CC_PLR SHALL be set only when no feedback has been received + from non-CLR or non-PLR receivers. And the NORM_FLAG_CC_LEAVE SHALL + be set only when all feedback messages the sender has received have + this flag set. These heuristics for setting the flags in + NORM_CMD(REPAIR_ADV) ensure the most effective suppression of + receivers providing unicast feedback messages. + + The "cc_rtt" field SHALL be set to a default maximum value, and the + NORM_FLAG_CC_RTT flag SHALL be cleared when no receiver has yet + received RTT measurement information. When a receiver has received + RTT measurement information, it SHALL set the "cc_rtt" value + accordingly and set the NORM_FLAG_CC_RTT flag in the "cc_flags" + field. For NORM_CMD(REPAIR_ADV) messages, the sender SHALL set the + "cc_rtt" field value to the largest non-CLR/non-PLR RTT it has + + + +Adamson, et al. Standards Track [Page 43] + +RFC 5740 NORM Protocol November 2009 + + + measured from receivers for the current feedback round. + + The "cc_loss" field represents the receiver's current packet loss + fraction estimate for the indicated source. The loss fraction is a + value from 0.0 to 1.0 corresponding to a range of zero to 100 percent + packet loss. The 16-bit "cc_loss" value is calculated by the + following formula: + + "cc_loss" = floor(decimal_loss_fraction * 65535.0) + + For NORM_CMD(REPAIR_ADV) messages, the sender SHALL set the "cc_loss" + field value to the largest non-CLR/non-PLR loss estimate it has + received from receivers for the current feedback round. + + The "cc_rate" field represents the receiver's current local + congestion control rate. During "slow start", when the receiver has + detected no loss, this value is set to twice the actual rate it has + measured from the corresponding sender and the NORM_FLAG_CC_START is + set in the "cc_flags" field. Otherwise, the receiver calculates a + congestion control rate based on its loss measurement and RTT + measurement information (even if default) for the "cc_rate" field. + For NORM_CMD(REPAIR_ADV) messages, the sender SHALL set the "cc_loss" + field value to the lowest non-CLR/non-PLR "cc_rate" report it has + received from receivers for the current feedback round. + + The "cc_reserved" field is reserved for future NORM protocol use. + Currently, senders SHALL set this field to ZERO, and receivers SHALL + ignore the content of this field. + + The "repair_adv_payload" is in exactly the same form as the + "nack_content" of NORM_NACK messages and can be processed by + receivers for suppression purposes in the same manner, with the + exception of the condition when the NORM_REPAIR_ADV_FLAG_LIMIT is + set. + +4.2.3.6. NORM_CMD(ACK_REQ) Message + + The NORM_CMD(ACK_REQ) message is used by the sender to request + acknowledgment from a specified list of receivers. This message is + used in providing a lightweight positive acknowledgment mechanism + that is OPTIONAL for use by the reliable multicast application. A + range of acknowledgment request types is provided for use at the + application's discretion. Provision for application-defined, + positively acknowledged commands allows the application to + automatically take advantage of transmission and round-trip timing + information available to the NORM protocol. The details of the NORM + Positive Acknowledgment Process including transmission of the + NORM_CMD(ACK_REQ) messages and the receiver response (NORM_ACK) are + + + +Adamson, et al. Standards Track [Page 44] + +RFC 5740 NORM Protocol November 2009 + + + described in Section 5.5.3. The format of the NORM_CMD(ACK_REQ) + message is: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 6 | reserved | ack_type | ack_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | acking_node_list | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 15: NORM_CMD(ACK_REQ) Message Format + + The NORM common message header and standard NORM_CMD fields serve + their usual purposes. The value of the "hdr_len" field for + NORM_CMD(ACK_REQ) messages with no header extension present is 4. + + The "ack_type" field indicates the type of acknowledgment being + requested and thus implies rules for how the receiver will treat this + request. The following "ack_type" values are defined and are also + used in NORM_ACK messages described later: + + +-----------------------+------------+------------------------------+ + | ACK Type | Value | Purpose | + +-----------------------+------------+------------------------------+ + | NORM_ACK(CC) | 1 | Used to identify NORM_ACK | + | | | messages sent in response to | + | | | NORM_CMD(CC) messages. | + | NORM_ACK(FLUSH) | 2 | Used to identify NORM_ACK | + | | | messages sent in response to | + | | | NORM_CMD(FLUSH) messages. | + | NORM_ACK(RESERVED) | 3-15 | Reserved for possible future | + | | | NORM protocol use. | + | NORM_ACK(APPLICATION) | 16-255 | Used at application's | + | | | discretion. | + +-----------------------+------------+------------------------------+ + + The NORM_ACK(CC) value is provided for use only in NORM_ACKs + generated in response to the NORM_CMD(CC) messages used in congestion + control operation. Similarly, the NORM_ACK(FLUSH) is provided for + use only in NORM_ACKs generated in response to applicable + NORM_CMD(FLUSH) messages. NORM_CMD(ACK_REQ) messages with "ack_type" + + + +Adamson, et al. Standards Track [Page 45] + +RFC 5740 NORM Protocol November 2009 + + + of NORM_ACK(CC) or NORM_ACK(FLUSH) SHALL NOT be generated by the + sender. + + The NORM_ACK(RESERVED) range of "ack_type" values is provided for + possible future NORM protocol use. + + The NORM_ACK(APPLICATION) range of "ack_type" values is provided so + that NORM applications can implement application-defined, positively + acknowledged commands that are able to leverage internal transmission + and round-trip timing information available to the NORM protocol + implementation. + + The "ack_id" provides a sequenced identifier for the given + NORM_CMD(ACK_REQ) message. This "ack_id" is returned in NORM_ACK + messages generated by the receivers so that the sender can associate + the response with its corresponding request. + + The "reserved" field is reserved for possible future protocol use and + SHALL be set to ZERO by senders and ignored by receivers. + + The "acking_node_list" field contains the NormNodeIds of the current + NORM receivers that are desired to provide positive acknowledgment + (NORM_ACK) to this request. The packet payload length implies the + length of the "acking_node_list", and its length is limited to the + sender NormSegmentSize. The individual NormNodeId items are listed + in network (Big Endian) byte order. If a receiver's NormNodeId is + included in the "acking_node_list", it SHALL schedule transmission of + a NORM_ACK message as described in Section 5.5.3. + +4.2.3.7. NORM_CMD(APPLICATION) Message + + This command allows the NORM application to robustly transmit + application-defined commands. The command message preempts any + ongoing data transmission and is repeated up to NORM_ROBUST_FACTOR + times at a rate of once per 2*GRTT_sender. This rate of repetition + allows the application to observe any response (if that is the + application's purpose for the command) before it is repeated. + Possible responses can include initiation of data transmission, other + NORM_CMD(APPLICATION) messages, or even application-defined, + positively acknowledged commands from other NormSession participants. + The transmission of these commands will preempt data transmission + when they are scheduled and can be multiplexed with ongoing data + transmission. This type of robustly transmitted command allows NORM + applications to define a complete set of session control mechanisms + with less state than the transfer of FEC-encoded reliable content + needs while taking advantage of NORM transmission and round-trip + timing information. + + + + +Adamson, et al. Standards Track [Page 46] + +RFC 5740 NORM Protocol November 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=3| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | grtt |backoff| gsize | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-type = 7 | reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Application-Defined Content | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 16: NORM_CMD(APPLICATION) Message Format + + The NORM common message header and NORM_CMD fields are interpreted as + previously described. The value of the NORM_CMD(APPLICATION) + "hdr_len" field when no header extensions are present is 4. + + The "Application-Defined Content" area contains information in a + format at the discretion of the application. The size of this + payload SHALL be limited to a maximum of the sender's NormSegmentSize + setting. Upon reception, the NORM protocol implementation SHALL + deliver the content to the receiver application. Note that any + detection of duplicate reception of a NORM_CMD(APPLICATION) message + is the responsibility of the application. + +4.3. Receiver Messages + + The NORM message types generated by participating receivers consist + of the NORM_NACK and NORM_ACK message types. NORM_NACK messages are + sent to request repair of missing data content from sender + transmission, and NORM_ACK messages are generated in response to + certain sender commands including NORM_CMD(CC) and NORM_CMD(ACK_REQ). + +4.3.1. NORM_NACK Message + + The principal purpose of NORM_NACK messages is for receivers to + request repair of sender content via selective, negative + acknowledgment upon detection of incomplete data. NORM_NACK messages + will be transmitted according to the rules of NORM_NACK generation + and suppression described in Section 5.3. NORM_NACK messages also + contain additional fields to provide feedback to the sender(s) for + purposes of round-trip timing collection and congestion control. + + The payload of NORM_NACK messages contains one or more repair + + + +Adamson, et al. Standards Track [Page 47] + +RFC 5740 NORM Protocol November 2009 + + + requests for different objects or portions of those objects. The + NORM_NACK message format is as follows: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=4| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | server_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | reserved | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | grtt_response_sec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | grtt_response_usec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | nack_payload | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 17: NORM_NACK Message Format + + The NORM common message header fields serve their usual purposes. + The value of the "hdr_len" field for NORM_NACK messages without + header extensions present is 6. + + The "server_id" field identifies the NORM sender to which the + NORM_NACK message is destined. + + The "instance_id" field contains the current session identifier given + by the sender identified by the "server_id" field in its sender + messages. The sender SHOULD ignore feedback messages containing an + invalid "instance_id" value. + + The "grtt_response" fields contain an adjusted version of the + timestamp from the most recently received NORM_CMD(CC) message for + the indicated NORM sender. The format of the "grtt_response" is the + same as the "send_time" field of the NORM_CMD(CC). The + "grtt_response" value is relative to the "send_time" the source + provided with a corresponding NORM_CMD(CC) command. The receiver + adjusts the source's NORM_CMD(CC) "send_time" timestamp by adding the + time delta from when the receiver received the NORM_CMD(CC) to when + the NORM_NACK is transmitted in response to calculate the value in + the "grtt_response" field. This is the "receive_to_response_delta" + + + +Adamson, et al. Standards Track [Page 48] + +RFC 5740 NORM Protocol November 2009 + + + value used in the following formula: + grtt_response = NORM_CMD(CC) send_time + receive_to_response_delta + + The receiver SHALL set the "grtt_response" to a ZERO value, to + indicate it has not yet received a NORM_CMD(CC) message from the + indicated sender, and the sender MUST ignore the "grtt_response" in + this message. + + For NORM-CC operation, the NORM-CC Feedback Header Extension, as + described in the NORM_CMD(REPAIR_ADV} message description, is added + to NORM_NACK messages to provide feedback on the receiver's current + state with respect to congestion control operation. Alternative + header extensions for congestion control feedback MAY be defined for + alternative congestion control schemes for NORM use in the future. + + The "reserved" field is for potential future NORM use and SHALL be + set to ZERO for this version of the protocol. + + The "nack_payload" of the NORM_NACK message specifies the repair + needs of the receiver with respect to the NORM sender indicated by + the "server_id" field. The receiver constructs repair requests based + on the NORM_DATA and/or NORM_INFO segments it needs from the sender + to complete reliable reception up to the sender's transmission + position at the moment the receiver initiates the NACK procedure as + described in Section 5.3. A single NORM Repair Request consists of a + list of items, ranges, and/or FEC coding block erasure counts for + needed NORM_DATA and/or NORM_INFO content. Multiple repair requests + can be concatenated within the "nack_payload" field of a NORM_NACK + message. A single NORM Repair Request can possibly include multiple + "items", "ranges", or "erasure_counts". In turn, the "nack_payload" + field MAY contain multiple repair requests. A single NORM Repair + Request has the following format: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | form | flags | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | repair_request_items | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 18: NORM Repair Request Format + + The "form" field indicates the type of repair request items given in + the "repair_request_items" list. Possible values for the "form" + field include: + + + + + +Adamson, et al. Standards Track [Page 49] + +RFC 5740 NORM Protocol November 2009 + + + +--------------------+-------+ + | Form | Value | + +--------------------+-------+ + | NORM_NACK_ITEMS | 1 | + | NORM_NACK_RANGES | 2 | + | NORM_NACK_ERASURES | 3 | + +--------------------+-------+ + + A "form" value of NORM_NACK_ITEMS indicates each repair request item + in the "repair_request_items" list is to be treated as an individual + request. A value of NORM_NACK_RANGES indicates the + "repair_request_items" list consists of pairs of repair request items + corresponding to the inclusive ranges of repair needs. The + NORM_NACK_ERASURES "form" indicates the repair request items are to + be treated individually and the "encoding_symbol_id" portion of the + "fec_payload_id" field of the repair request item (see below) is to + be interpreted as an erasure count for the FEC coding block + identified by the repair request item's "source_block_number". + + The "flags" field is currently used to indicate the level of data + content for which the repair request items apply (i.e., an individual + segment, entire FEC coding block, or entire transport object). + Possible flag values include: + + +-------------------+--------+--------------------------------------+ + | Flag | Value | Purpose | + +-------------------+--------+--------------------------------------+ + | NORM_NACK_SEGMENT | 0x01 | Indicates the listed segment(s) or | + | | | range of segments needed as repair. | + | NORM_NACK_BLOCK | 0x02 | Indicates the listed block(s) or | + | | | range of blocks in entirety that are | + | | | needed as repair. | + | NORM_NACK_INFO | 0x04 | Indicates NORM_INFO is needed as | + | | | repair for the listed object(s). | + | NORM_NACK_OBJECT | 0x08 | Indicates the listed object(s) or | + | | | range of objects in entirety are | + | | | needed as repair. | + +-------------------+--------+--------------------------------------+ + + When the NORM_NACK_SEGMENT flag is set, the "object_transport_id" and + "fec_payload_id" fields are used to determine which sets or ranges of + individual NORM_DATA segments are needed to repair content at the + receiver. When the NORM_NACK_BLOCK flag is set, this indicates the + receiver is completely missing the indicated coding block(s), and + that transmissions sufficient to repair the indicated block(s) in + their entirety are needed. When the NORM_NACK_INFO flag is set, this + indicates the receiver is missing the NORM_INFO segment for the + indicated "object_transport_id". Note the NORM_NACK_INFO can be set + + + +Adamson, et al. Standards Track [Page 50] + +RFC 5740 NORM Protocol November 2009 + + + in combination with the NORM_NACK_BLOCK or NORM_NACK_SEGMENT flags, + or can be set alone. When the NORM_NACK_OBJECT flag is set, this + indicates the receiver is missing the entire NormTransportObject + referenced by the "object_transport_id". This also implicitly + requests any available NORM_INFO for the NormObject, if applicable. + The "fec_payload_id" field is ignored when the flag NORM_NACK_OBJECT + is set. + + The "length" field value is the length in bytes of the + "repair_request_items" field. + + The "repair_request_items" field consists of a list of individual or + range pairs of transport data unit identifiers in the following + format. + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id | reserved | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_payload_id | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 19: NORM Repair Request Item Format + + The "fec_id" indicates the FEC type and can be used to determine the + format of the "fec_payload_id" field. The "reserved" field is kept + for possible future use and SHALL be set to a ZERO value and ignored + by NORM nodes processing NACK content. + + The "object_transport_id" corresponds to the NormObject for which + repair is being requested, and the "fec_payload_id" identifies the + specific FEC coding block and/or segment being requested. When the + NORM_NACK_OBJECT flag is set, the value of the "fec_payload_id" field + is ignored. When the NORM_NACK_BLOCK flag is set, only the FEC code + block identifier portion of the "fec_payload_id" is to be + interpreted. + + The format of the "fec_payload_id" field depends upon the "fec_id" + field value. + + When the receiver's repair needs dictate that different forms (mixed + ranges and/or individual items) or types (mixed specific segments + and/or blocks or objects in entirety) are needed to complete reliable + transmission, multiple NORM Repair Requests with different "form" and + or "flags" values can be concatenated within a single NORM_NACK + message. Additionally, NORM receivers SHALL construct NORM_NACK + messages with their repair requests in ordinal order with respect to + + + +Adamson, et al. Standards Track [Page 51] + +RFC 5740 NORM Protocol November 2009 + + + "object_transport_id" and "fec_payload_id" values. The + "nack_payload" size SHALL NOT exceed the NormSegmentSize for the + sender to which the NORM_NACK is destined. + + NORM_NACK Content Examples: + + In these examples, a small block, systematic FEC code ("fec_id" = + 129) is assumed with a user data block length of 32 segments. In + Example 1, a list of individual NORM_NACK_ITEMS repair requests is + given. In Example 2, a list of NORM_NACK_RANGES requests AND a + single NORM_NACK_ITEMS request are concatenated to illustrate the + possible content of a NORM_NACK message. Note that FEC coding block + erasure counts could also be provided in each case. However, the + erasure counts are not really necessary since the sender can easily + determine the erasure count while processing the NACK content. + However, the erasure count option can be useful for operation with + other FEC codes or for intermediate system purposes. + + Example 1: NORM_NACK "nack_payload" for: Object 12, Coding Block 3, + Segments 2, 5, and 8 + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | form = 1 | flags = 0x01 | length = 36 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 8 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + +Adamson, et al. Standards Track [Page 52] + +RFC 5740 NORM Protocol November 2009 + + + Example 2: NORM_NACK "nack_payload" for: Object 18, Coding Block 6, + Segments 5, 6, 7, 8, 9, 10; and Object 19 NORM_INFO and Coding Block + 1, Segment 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | form = 2 | flags = 0x01 | length = 24 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 18 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 18 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 6 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 10 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | form = 1 | flags = 0x05 | length = 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id = 129 | reserved | object_transport_id = 19 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_number = 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_block_length = 32 | encoding_symbol_id = 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +4.3.2. NORM_ACK Message + + The NORM_ACK message is intended to be used primarily as part of NORM + congestion control operation and round-trip timing measurement. The + acknowledgment type NORM_ACK(CC) is provided for this purpose as + described in the NORM_CMD(ACK_REQ) message description. The + generation of NORM_ACK(CC) messages for round-trip timing estimation + and congestion control operation is described in Section 5.5.1 and + Section 5.5.2, respectively. However, some multicast applications + can benefit from some limited form of positive acknowledgment for + certain functions. A simple, scalable positive acknowledgment scheme + is defined in Section 5.5.3, which can be leveraged by protocol + implementations when appropriate. The NORM_CMD(FLUSH) can also be + used for OPTIONAL collection of positive acknowledgment of reliable + reception to a certain "watermark" transmission point from specific + receivers using this mechanism. The NORM_ACK type NORM_ACK(FLUSH) is + provided for this purpose and the format of the "nack_payload" for + this acknowledgment type is given below. Beyond that, a range of + application-defined "ack_type" values is provided for use at the NORM + + + +Adamson, et al. Standards Track [Page 53] + +RFC 5740 NORM Protocol November 2009 + + + application's discretion. Implementations making use of application- + defined positive acknowledgments MAY also make use of the + "nack_payload" as needed, observing the constraint that the + "nack_payload" field size be limited to a maximum of the + NormSegmentSize for the sender to which the NORM_ACK is destined. + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |version| type=5| hdr_len | sequence | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | server_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | instance_id | ack_type | ack_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | grtt_response_sec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | grtt_response_usec | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | header extensions (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ack_payload (if applicable) | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 20: NORM_ACK Message Format + + The NORM common message header fields serve their usual purposes. + The value of the "hdr_len" field when no header extensions are + present is 6. + + The "server_id", "instance_id", and "grtt_response" fields serve the + same purpose as the corresponding fields in NORM_NACK messages. + Header extensions can be applied to support congestion control + feedback or other functions in the same manner. + + The "ack_type" field indicates the nature of the NORM_ACK message. + This directly corresponds to the "ack_type" field of the + NORM_CMD(ACK_REQ) message to which this acknowledgment applies. + + The "ack_id" field serves as a sequence number so the sender can + verify a received NORM_ACK message actually applies to a current + acknowledgment request. The "ack_id" field is not used in the case + of the NORM_ACK(CC) and NORM_ACK(FLUSH) acknowledgment types. + + The "ack_payload" format is a function of the "ack_type". The + + + +Adamson, et al. Standards Track [Page 54] + +RFC 5740 NORM Protocol November 2009 + + + NORM_ACK(CC) message has no attached content. Only the NORM_ACK + header applies. In the case of NORM_ACK(FLUSH), a specific + "ack_payload" format is defined: + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_id | reserved | object_transport_id | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | fec_payload_id | + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The "object_transport_id" and "fec_payload_id" are used by the + receiver to acknowledge applicable NORM_CMD(FLUSH) messages + transmitted by the sender identified by the "server_id" field. + + The "ack_payload" of NORM_ACK messages for application-defined + "ack_type" values is specific to the application but is limited in + size to a maximum of the NormSegmentSize of the sender referenced by + the "server_id". + +4.4. General Purpose Messages + + Some additional message formats are defined for general purpose in + NORM multicast sessions whether the participant is acting as a sender + and/or receiver within the group. + +4.4.1. NORM_REPORT Message + + This is an OPTIONAL message generated by NORM participants. This + message can be used for periodic performance reports from receivers + in experimental NORM implementations. The format of this message is + currently undefined. Experimental NORM implementations MAY define + NORM_REPORT formats as needed for test purposes. These report + messages SHOULD be disabled for interoperability testing between + different compliant NORM implementations. + +5. Detailed Protocol Operation + + This section describes the detailed interactions of senders and + receivers participating in a NORM session. A simple synopsis of the + protocol operation is given here: + + 1. The sender periodically transmits NORM_CMD(CC) messages as needed + to initialize and collect round-trip timing and congestion + control feedback from the receiver set. + + + + + +Adamson, et al. Standards Track [Page 55] + +RFC 5740 NORM Protocol November 2009 + + + 2. The sender transmits an ordinal set of NormObjects segmented in + the form of NORM_DATA messages labeled with NormTransportIds and + logically identified with FEC encoding block numbers and symbol + identifiers. When applicable, NORM_INFO messages MAY optionally + precede the transmission of data content for NORM transport + objects. + + 3. As receivers detect missing content from the sender, they + initiate repair requests with NORM_NACK messages. The receivers + track the sender's most recent objectTransportId::fecPayloadId + transmit position and NACK only for content that is ordinally + prior to that current transmit position. The receivers schedule + random backoff timeouts before generating NORM_NACK messages and + wait an appropriate amount of time before repeating the NORM_NACK + if their repair request is not satisfied. + + 4. The sender aggregates repair requests from the receivers and + logically "rewinds" its transmit position to send appropriate + repair messages. The sender sends repairs for the earliest + ordinal transmit position first and maintains this ordinal repair + transmission sequence. FEC parity content not previously + transmitted for the applicable FEC coding block is used for + repair transmissions to the greatest extent possible. If the + sender exhausts its available FEC parity content on multiple + repair cycles for the same coding block, it resorts to an + explicit repair strategy (possibly using parity content) to + complete repairs. (The use of explicit repair is an exception in + general protocol operation, but the possibility does exist for + extreme conditions). The sender immediately assumes transmission + of new content once it has sent pending repairs. + + 5. The sender transmits NORM_CMD(FLUSH) messages when it reaches the + end of enqueued transmit content and pending repairs. Receivers + respond to the NORM_CMD(FLUSH) messages with NORM_NACK + transmissions (following the same suppression backoff timeout + strategy as for data) if they need further repair. + + 6. The sender transmissions are subject to rate control limits + determined by congestion control mechanisms. In the baseline + NORM-CC operation, each sender in a NormSession maintains its own + independent congestion control state. Receivers provide + congestion control feedback in NORM_NACK and NORM_ACK messages. + NORM_ACK feedback for congestion control purposes is governed + using a suppression mechanism similar to that for NORM_NACK + messages. + + While this overall concept is relatively simple, there are details to + each of these aspects that need to be addressed for successful, + + + +Adamson, et al. Standards Track [Page 56] + +RFC 5740 NORM Protocol November 2009 + + + efficient, robust, and scalable NORM protocol operation. + +5.1. Sender Initialization and Transmission + + Upon startup, the NORM sender immediately begins sending NORM_CMD(CC) + messages to collect round-trip timing and other information from the + potential group. If NORM-CC congestion control operation is enabled, + the NORM-CC Rate header extension MUST be included in these messages. + Congestion control operation SHALL be observed at all times when not + operating using dedicated resources, like in the general Internet. + Even if congestion control operation is disabled at the sender, it + can be desirable to use the NORM_CMD(CC) messaging to collect + feedback from the group using the baseline NORM-CC feedback + mechanisms. This proactive feedback collection can be used to + establish a GRTT estimate prior to data transmission and potential + NACK operation. + + In some cases, applications might need the sender to also proceed + with data transmission immediately. In other cases, the sender might + wish to defer data transmission until it has received some feedback + or request from the receiver set indicating receivers are indeed + present. Note, in some applications (e.g., web push), this + indication MAY come out-of-band with respect to the multicast session + via other means. As noted, the periodic transmission of NORM_CMD(CC) + messages MAY precede actual data transmission in order to have an + initial GRTT estimate. + + With inclusion of the OPTIONAL NORM FEC Object Transmission + Information Header Extension (EXT_FTI), the NORM protocol sender + message headers can contain all information necessary to prepare + receivers for subsequent reliable reception. This includes FEC + coding parameters, the sender NormSegmentSize, and other information. + If this header extension is not used, it is presumed receivers have + received the FEC Object Transmission Information via other means. + Additionally, applications MAY leverage the use of NORM_INFO messages + associated with the session data objects in the session to provide + application-specific context information for the session and data + being transmitted. These mechanisms allow for operation with minimal + pre-coordination among the senders and receivers. + + The NORM sender begins segmenting application-enqueued data into + NORM_DATA segments and transmitting it to the group. For objects of + type NORM_OBJECT_DATA and NORM_OBJECT_FILE, the segmentation + algorithm described in FEC Building Block [RFC5052] is RECOMMENDED. + For objects of type NORM_OBJECT_STREAM, segmentation will typically + be into uniform FEC coding block sizes, with individual segment sizes + controlled by the application. In most cases, the application and + NORM implementation SHOULD strive to produce full-sized + + + +Adamson, et al. Standards Track [Page 57] + +RFC 5740 NORM Protocol November 2009 + + + (NormSegmentSize) segments when possible. The rate of transmission + is controlled via congestion control mechanisms or is a fixed rate if + desired for closed network operations. The receivers participating + in the multicast group provide feedback to the sender as needed. + When the sender reaches the end of data it has enqueued for + transmission or any pending repairs, it transmits a series of + NORM_CMD(FLUSH) messages at a rate of one per 2*GRTT_sender. Similar + to the end of each transmitted FEC coding block during transmission, + receivers SHALL respond to these NORM_CMD(FLUSH) messages with + additional repair requests as needed. A protocol parameter + NORM_ROBUST_FACTOR determines the number of flush messages sent. If + receivers request repair, the repair is provided, and flushing occurs + again at the end of repair transmission. The sender MAY attach an + OPTIONAL "acking_node_list" to NORM_CMD(FLUSH) containing the + NormNodeIds for receivers from which it expects explicit positive + acknowledgment of reception. The NORM_CMD(FLUSH) message MAY be also + used for this OPTIONAL purpose any time prior to the end of data + enqueued for transmission with the NORM_CMD(FLUSH) messages + multiplexed with ongoing data transmissions. The OPTIONAL NORM + positive acknowledgment procedure is described in Section 5.5.3. + +5.1.1. Object Segmentation Algorithm + + NORM senders and receivers MUST use a common algorithm for logically + segmenting transport data into FEC encoding blocks and symbols so + appropriate NACKs can be constructed to request repair of missing + data. NORM FEC coding blocks are comprised of multi-byte symbols + (segments) transmitted in the payload of NORM_DATA messages. Each + NORM_DATA message will contain one or more source or encoding symbols + identified by the "fec_payload_id" field, and the NormSegmentSize + sender parameter defines the maximum size (in bytes) of the + "payload_data" field containing the content (a "segment"). The FEC + encoding type and associated parameters govern the source block size + (number of source symbols per coding block, etc.). NORM senders and + receivers use these FEC parameters, along with the NormSegmentSize + and transport object size to compute the source block structure for + transport objects. These parameters are provided in the FEC Object + Transmission Information for each object. The block partitioning + algorithm described in the FEC Building Block [RFC5052] document is + RECOMMENDED for use in computing a source block structure such that + all source blocks are as close to being equal length as possible. + This helps avoid the performance disadvantages of "short" FEC blocks. + Note that this algorithm applies only to the statically sized + NORM_OBJECT_DATA and NORM_OBJECT_FILE transport object types where + the object size is fixed and predetermined. For NORM_OBJECT_STREAM + objects, the object is segmented according to the maximum source + block length given in the FEC Transmission Information, unless the + FEC Payload ID indicates an alternative size for a given block. + + + +Adamson, et al. Standards Track [Page 58] + +RFC 5740 NORM Protocol November 2009 + + +5.2. Receiver Initialization and Reception + + For typical operation, NORM receivers will join a specified multicast + group and listen on a specific port number for sender transmissions. + As the NORM receiver receives NORM_DATA messages, it will establish + buffering state and provide content to its application as appropriate + for the given data type. The NORM protocol allows receivers to join + and leave the group at will, although some applications might need + receivers to be members of the group prior to start of data + transmission. Thus, different NORM applications MAY use different + policies to constrain the impact of new receivers joining the group + in the middle of a session. For example, a useful implementation + policy is for new receivers joining the group to limit or avoid + repair requests for transport objects already in progress. The NORM + sender implementation MAY impose additional constraints to limit the + ability of receivers to disrupt reliable multicast performance by + joining, leaving, and rejoining the group often. Different receiver + "join policies" might be appropriate for different applications + and/or scenarios. For general purpose operation, a default policy + where receivers are allowed to request repair only for coding blocks + with a NormTransportId and FEC coding block number greater than or + equal to the first non-repair NORM_DATA or NORM_INFO message received + upon joining the group is RECOMMENDED. For objects of type + NORM_OBJECT_STREAM, it is RECOMMENDED the join policy constrain + receivers to begin reliable reception at the current FEC coding block + for which non-repair content is received. + + In some deployments, different multicast receivers might have + differing quality of network connectivity. Some receivers may suffer + significantly poorer performance with very limited goodput due to low + connection rate or substantial packet loss. Similar to the "join + policies" described above, a NORM sender implementation MAY choose to + enforce different "service policies" to perhaps exclude exceptionally + poorly performing (or otherwise badly behaving) receivers from the + group. The sender implementation could choose to ignore NACKs from + such receivers and/or force advancement of its logical "repair + window" (i.e., enforcing a minimal level of service) and use the + NORM_CMD(SQUELCH) message to advise those poor performers of its + advance. Note in some cases, the application may need to support the + "weakest member" regardless of the time needed to achieve reliable + delivery. When implemented, the protocol instantiation SHOULD expose + controls to the set of "join" and/or "service" policies available to + support the needs of different applications. + +5.3. Receiver NACK Procedure + + When the receiver detects it is missing data from a sender's NORM + transmissions, it initiates its NACKing procedure. The NACKing + + + +Adamson, et al. Standards Track [Page 59] + +RFC 5740 NORM Protocol November 2009 + + + procedure SHALL be initiated only at FEC coding block boundaries, + NormObject boundaries, upon receipt of a NORM_CMD(FLUSH) message, or + upon an "inactivity" timeout when NORM_DATA or NORM_INFO + transmissions are no longer received from a previously active sender. + The RECOMMENDED value of such an inactivity timeout is: + + T_inactivity = NORM_ROBUST_FACTOR * 2 * GRTT_sender + + where the GRTT_sender value corresponds to the GRTT estimate + advertised in the "grtt" field of NORM sender messages. A minimum + T_inactivity value of 1 second is RECOMMENDED. The NORM receiver + SHOULD reset this inactivity timer and repeat NACK initiation upon + timeout for up to NORM_ROBUST_FACTOR times or more depending upon the + application's need for persistence by its receivers. It is also + important receivers rescale the T_inactivity timeout as the sender's + advertised GRTT changes. + + The NACKing procedure begins with a random backoff timeout. The + duration of the backoff timeout is chosen using the "RandomBackoff" + algorithm described in the Multicast NACK Building Block [RFC5401] + document using (K_sender*GRTT_sender) for the maxTime parameter and + the sender advertised group size (GSIZE_sender) as the groupSize + parameter. NORM senders provide values for GRTT_sender, K_sender and + GSIZE_sender via the "grtt", "backoff", and "gsize" fields of + transmitted messages. The GRTT_sender value is determined by the + sender based on feedback it has received from the group while the + K_sender and GSIZE_sender values can be determined by application + requirements and expectations or ancillary information. The backoff + factor K_sender MUST be greater than one to provide for effective + feedback suppression. A value of K_sender = 4 is RECOMMENDED for the + Any Source Multicast (ASM) model, while a value of K_sender = 6 is + RECOMMENDED for Single Source Multicast (SSM) operation. + + Thus: + T_backoff = RandomBackoff(K_sender*GRTT_sender, GSIZE_sender) + + To avoid the possibility of NACK implosion in the case of sender or + network failure during SSM operation, the receiver SHALL + automatically suppress its NACK and immediately enter the "holdoff" + period described below when T_backoff is greater than (K_sender- + 1)*GRTT_sender. Otherwise, the backoff period is entered and the + receiver MUST accumulate external pending repair state from NORM_NACK + messages and NORM_CMD(REPAIR_ADV) messages received. At the end of + the backoff time, the receiver SHALL generate a NORM_NACK message + only if the following conditions are met: + + + + + + +Adamson, et al. Standards Track [Page 60] + +RFC 5740 NORM Protocol November 2009 + + + 1. The sender's current transmit position (in terms of + objectTransportId::fecPayloadId) exceeds the earliest repair + position of the receiver. + + 2. The repair state accumulated from NORM_NACK and + NORM_CMD(REPAIR_ADV) messages does not equal or supersede the + receiver's repair needs up to the sender transmission position at + the time the NACK procedure (backoff timeout) was initiated. + + If these conditions are met, the receiver immediately generates a + NORM_NACK message when the backoff timeout expires. Otherwise, the + receiver's NACK is considered to be "suppressed" and the message is + not sent. At this time, the receiver begins a "holdoff" period + during which it constrains itself to not re-initiate the NACKing + process. The purpose of this timeout is to allow the sender worst- + case time to respond to the repair needs before the receiver requests + repair again. The value of this "holdoff" timeout (T_rcvrHoldoff) as + described in [RFC5401] is: + T_rcvrHoldoff =(K_sender+2)*GRTT_sender + + The NORM_NACK message contains repair request content beginning with + the lowest ordinal repair position of the receiver up through the + coding block prior to the most recently heard ordinal transmission + position for the sender. If the size of the NORM_NACK content + exceeds the sender's NormSegmentSize, the NACK content is truncated + so the receiver only generates a single NORM_NACK message per NACK + cycle for a given sender. In summary, a single NACK message is + generated containing the receiver's lowest ordinal repair needs. + + For each partially received FEC coding block requiring repair, the + receiver SHALL, on its FIRST repair attempt for the block, request + the parity portion of the FEC coding block beginning with the lowest + ordinal parity "encoding_symbol_id" (i.e., "encoding_symbol_id" = + "source_block_len") and request the number of FEC symbols + corresponding to its data segment erasure count for the block. On + subsequent repair cycles for the same coding block, the receiver + SHALL request only those repair symbols from the first set it has not + yet received up to the remaining erasure count for that applicable + coding block. Note the sender might have transmitted other + different, additional parity segments for other receivers that could + also be used to satisfy the local receiver's erasure-filling needs. + In the case where the erasure count for a partially received FEC + coding block exceeds the maximum number of parity symbols available + from the sender for the block (as indicated by the NORM_DATA + "fec_num_parity" field), the receiver SHALL request all available + parity segments plus the ordinally highest missing data segments + needed to satisfy its total erasure needs for the block. The goal of + this strategy is for the overall receiver set to request a lowest + + + +Adamson, et al. Standards Track [Page 61] + +RFC 5740 NORM Protocol November 2009 + + + common denominator set of repair symbols for a given FEC coding + block. This allows the sender to construct the most efficient repair + transmission segment set and enables effective NACK suppression among + the receivers even with uncorrelated packet loss. This approach also + does not demand synchronization among the receiver set in their + repair requests for the sender. + + For FEC coding blocks or NormObjects missed in their entirety, the + NORM receiver constructs repair requests with NORM_NACK_BLOCK or + NORM_NACK_OBJECT flags set as appropriate. The request for + retransmission of NORM_INFO is accomplished by setting the + NORM_NACK_INFO flag in a corresponding repair request. + +5.4. Sender NACK Processing and Response + + The principal goal of the sender is to make forward progress in the + transmission of data its application has enqueued. However, the + sender will need to occasionally "rewind" its logical transmission + point to satisfy the repair needs of receivers who have NACKed. + Aggregation of multiple NACKs is used to determine an optimal repair + strategy when a NACK event occurs. Since receivers initiate the NACK + process on coding block or object boundaries, there is some loose + degree of synchronization of the repair process even when receivers + experience uncorrelated data loss. + +5.4.1. Sender Repair State Aggregation + + When a sender is in its normal state of transmitting new data and + receives a NACK, it begins a procedure to accumulate NACK repair + state from NORM_NACK messages before beginning repair transmissions. + Note that this period of aggregating repair state does NOT interfere + with its ongoing transmission of new data. + + As described in [RFC5401], the period of time during which the sender + aggregates NORM_NACK messages is equal to: + + T_sndrAggregate = (K_sender + 1) * GRTT_sender + + where K_sender is the backoff scaling value advertised to the + receivers, and GRTT_sender is the sender's current estimate of the + group's greatest round-trip time. Note, for NORM unicast sessions, + the T_sndrAggregate time can be set to ZERO since there is only one + receiver. Similarly, the K_sender value SHOULD be set to ZERO for + NORM unicast sessions to minimize repair latency. + + When this period ends, the sender "rewinds" by incorporating the + accumulated repair state into its pending transmission state and + begins transmitting repair messages. After pending repair + + + +Adamson, et al. Standards Track [Page 62] + +RFC 5740 NORM Protocol November 2009 + + + transmissions are completed, the sender continues with new + transmissions of any enqueued data. Also, at this point in time, the + sender begins a "holdoff" timeout during which time the sender + constrains itself from initiating a new repair aggregation cycle, + even if NORM_NACK messages arrive. As described in [RFC5401], the + value of this sender "holdoff" period is: + + T_sndrHoldoff = (1 * GRTT_sender) + + If additional NORM_NACK messages are received during this sender + "holdoff" period, the sender will immediately incorporate these late- + arriving messages into its pending transmission state if, and only + if, the NACK content is ordinally greater than the sender's current + transmission position. This "holdoff" time allows worst-case time + for the sender to propagate its current transmission sequence + position to the group, thus avoiding redundant repair transmissions. + After the holdoff timeout expires, a new NACK accumulation period can + be started (upon arrival of a NACK) in concert with the pending + repair and new data transmission. Recall receivers are not to + initiate the NACK repair process until the sender's logical + transmission position exceeds the lowest ordinal position of their + repair needs. With the new NACK aggregation period, the sender + repeats the same process of incorporating accumulated repair state + into its transmission plan and subsequently "rewinding" to transmit + the lowest ordinal repair data when the aggregation period expires. + Again, this is conducted in concert with ongoing new data and/or + pending repair transmissions. + +5.4.2. Sender FEC Repair Transmission Strategy + + The NORM sender SHOULD leverage transmission of FEC parity content + for repair to the greatest extent possible. Recall that receivers + use a strategy to request a lowest common denominator of explicit + repair (including parity content) in the formation of their NORM_NACK + messages. Before falling back to explicitly satisfying different + receivers' repair needs, the sender can make use of the general + erasure-filling capability of FEC-generated parity segments. The + sender can determine the maximum erasure-filling needs for individual + FEC coding blocks from the NORM_NACK messages received during the + repair aggregation period. Then, if the sender has a sufficient + number (less than or equal to the maximum erasure count) of + previously unsent parity segments available for the applicable coding + blocks, the sender can transmit these in lieu of the specific packets + the receiver set has requested. The sender SHOULD NOT resort to + explicit transmission of the receiver set's repair needs until after + exhausting its supply of "fresh" (unsent) parity segments for a given + coding block. In general, if a sufficiently powerful FEC code is + used, the need for explicit repair will be an exception, and the + + + +Adamson, et al. Standards Track [Page 63] + +RFC 5740 NORM Protocol November 2009 + + + fulfillment of reliable multicast can be accomplished quite + efficiently. However, the ability to resort to explicit repair + allows the protocol to be continue to operate under even very extreme + circumstances. + + NORM_DATA messages sent as repair transmissions SHALL be flagged with + the NORM_FLAG_REPAIR flag. This allows receivers to obey any + policies limiting new receivers from joining the reliable + transmission when only repair transmissions have been received. + Additionally, the sender SHOULD flag NORM_DATA transmissions sent as + explicit repair with the NORM_FLAG_EXPLICIT flag. + + Although NORM end system receivers do not make use of the + NORM_FLAG_EXPLICIT flag, this message transmission status could be + leveraged by intermediate systems wishing to "assist" NORM protocol + performance. If such systems are properly positioned with respect to + reciprocal reverse-path multicast routing, they need to sub-cast only + a sufficient count of non-explicit parity repairs to satisfy a + multicast routing sub-tree's erasure-filling needs for a given FEC + coding block. When the sender has resorted to explicit repair, then + the intermediate systems SHOULD sub-cast all of the explicit repair + packets to those portions of the routing tree still requiring repair + for a given coding block. Note the intermediate systems will need to + conduct repair state accumulation for sub-routes in a manner similar + to the sender's repair state accumulation in order to have sufficient + information to perform the sub-casting. Additionally, the + intermediate systems could perform NORM_NACK suppression/aggregation + as it conducts this repair state accumulation for NORM repair cycles. + The details of this type of operation are beyond the scope of this + document, but this information is provided for possible future + consideration. + +5.4.3. Sender NORM_CMD(SQUELCH) Generation + + If the sender receives a NORM_NACK message for repair of data it is + no longer supporting, the sender generates a NORM_CMD(SQUELCH) + message to advertise its repair window and squelch any receivers from + additional NACKing of invalid data. The transmission rate of + NORM_CMD(SQUELCH) messages is limited to once per 2*GRTT_sender. The + "invalid_object_list" (if applicable) of the NORM_CMD(SQUELCH) + message SHALL begin with the lowest "object_transport_id" from the + invalid NORM_NACK messages received since the last NORM_CMD(SQUELCH) + transmission. The list includes as many lower ordinal invalid + "object_transport_ids" that can fit for the NORM_CMD(SQUELCH) payload + size to less than or equal to the sender's NormSegmentSize parameter. + + + + + + +Adamson, et al. Standards Track [Page 64] + +RFC 5740 NORM Protocol November 2009 + + +5.4.4. Sender NORM_CMD(REPAIR_ADV) Generation + + When a NORM sender receives NORM_NACK messages from receivers via + unicast transmission, it uses NORM_CMD(REPAIR_ADV) messages to + advertise its accumulated repair state to the receiver set since the + receiver set is not directly sharing their repair needs via multicast + communication. A NORM sender implementation MAY use a separate port + number from the NormSession port number as the source port for its + transmissions. Thus, NORM receivers can direct any unicast feedback + messages to this separate sender port number, distinct from the NORM + session (or destination) port number. Then, the NORM sender + implementation can discriminate unicast feedback messages from + multicast feedback messages when there is a mix of multicast and + unicast feedback receivers. The NORM_CMD(REPAIR_ADV) message is + multicast to the receiver set by the sender. The payload portion of + this message has content in the same format as the NORM_NACK receiver + message payload. Receivers are then able to perform feedback + suppression in the same manner as with NORM_NACK messages directly + received from other receivers. Note that the sender does not merely + retransmit NACK content it receives, but instead transmits a + representation of its aggregated repair state. The transmission of + NORM_CMD(REPAIR_ADV) messages is subject to the sender transmit rate + limit and NormSegmentSize limitation. When the NORM_CMD(REPAIR_ADV) + message is of maximum size (as indicated by the flag + NORM_REPAIR_ADV_FLAG_LIMIT), receivers SHALL consider the maximum + ordinal transmission position value embedded in the message as the + senders current transmission position and implicitly suppress + requests for ordinally higher repair. For congestion control + operation, the sender will also need to provide any information + needed so dynamic congestion control feedback can be suppressed among + receivers. This document specifies the NORM-CC Feedback Header + Extension that is applied for baseline NORM-CC operation. If other + congestion control mechanisms are used within a NORM implementation, + other header extensions MAY be defined. Whatever content format is + used for this purpose SHOULD ensure that maximum possible suppression + state is conveyed to the receiver set. + +5.5. Additional Protocol Mechanisms + + In addition to the principal function of data content transmission + and repair, there are some other protocol mechanisms to help NORM to + adapt to network conditions and play fairly with other coexistent + protocols. + +5.5.1. Group Round-Trip Time (GRTT) Collection + + For NORM receivers to appropriately scale backoff timeouts and the + senders to use proper corresponding timeouts, the participants need + + + +Adamson, et al. Standards Track [Page 65] + +RFC 5740 NORM Protocol November 2009 + + + to use a common timeout basis. Each NORM sender monitors the round- + trip time of active receivers and determines the greatest group + round-trip time. The sender advertises this GRTT estimate in every + message it transmits so receivers have this value available for + scaling their timers. To measure the current GRTT, the sender + periodically sends NORM_CMD(CC) messages containing a locally + generated timestamp. Receivers are expected to record this timestamp + along with the time the NORM_CMD(CC) message is received. Then, when + the receivers generate feedback messages to the sender, an adjusted + version of the sender timestamp is embedded in the feedback message + (NORM_NACK or NORM_ACK). The adjustment adds the amount of time the + receiver held the timestamp before generating its response. Upon + receipt of this adjusted timestamp, the sender is able to calculate + the round-trip time to that receiver. + + The round-trip time for each receiver is fed into an algorithm that + assigns weights and smoothes the values for a conservative estimate + of the GRTT. The algorithm and methodology are described in the + Multicast NACK Building Block [RFC5401] document in the section + entitled "One-to-Many Sender GRTT Measurement". A conservative + estimate helps guarantee feedback suppression at a small cost in + overall protocol repair delay. The sender's current estimate of GRTT + is advertised in the "grtt" field found in all NORM sender messages. + The advertised GRTT is also limited to a minimum of the nominal + inter-packet transmission time given the sender's current + transmission rate and system clock granularity. The reason for this + additional limit is to keep the receiver somewhat event-driven by + making sure the sender has had adequate time to generate any response + to repair requests from receivers given transmit rate limitations due + to congestion control or configuration. + + When the NORM-CC Rate header extension is present in NORM_CMD(CC) + messages, the receivers respond to NORM_CMD(CC) messages as described + in Section 5.5.2, "NORM Congestion Control Operation". The + NORM_CMD(CC) messages are periodically generated by the sender as + described for congestion control operation. This provides for + proactive, but controlled, feedback from the group in the form of + NORM_ACK messages. This provides for GRTT feedback even if no + NORM_NACK messages are being sent. If operating without congestion + control in a closed network, the NORM_CMD(CC) messages MAY be sent + periodically without the NORM-CC Rate header extension. In this + case, receivers will only provide GRTT measurement feedback when + NORM_NACK messages are generated since no NORM_ACK messages are + generated. In this case, the NORM_CMD(CC) messages MAY be sent less + frequently, perhaps as little as once per minute, to conserve network + capacity. Note the NORM-CC Rate header extension MAY also be used to + proactively solicit RTT feedback from the receiver group per + congestion control operation even when the sender is not conducting + + + +Adamson, et al. Standards Track [Page 66] + +RFC 5740 NORM Protocol November 2009 + + + congestion control rate adjustment. NORM operation without + congestion control SHOULD be considered only in closed networks. + +5.5.2. NORM Congestion Control Operation + + This section describes baseline congestion control operation for the + NORM protocol (NORM-CC). The supporting NORM message formats and + approach described here are an adaptation of the equation-based TCP- + Friendly Multicast Congestion Control (TFMCC) approach [RFC4654]. + This congestion control scheme is REQUIRED for operation within the + general Internet unless the NORM implementation is adapted to use + another IETF-sanctioned reliable multicast congestion control + mechanism. With this TFMCC-based approach, the transmissions of NORM + senders are controlled in a rate-based manner as opposed to window- + based congestion control algorithms as in TCP. However, it is + possible the NORM protocol message set MAY alternatively be used to + support a window-based multicast congestion control scheme such as + PGMCC. The details of such an alternative MAY be described + separately or in a future revision of this document. In either case + (rate-based TFMCC or window-based PGMCC), successful control of + sender transmission depends upon collection of sender-to-receiver + packet loss estimates and RTTs to identify the congestion control + bottleneck path(s) within the multicast topology and adjust the + sender rate accordingly. The receiver with loss and RTT estimates + corresponding to the lowest resulting calculated transmission rate is + identified as the "current limiting receiver" (CLR). In the case of + a tie (where candidate CLRs are within 10% of the same calculated + rate), the receiver with the largest RTT value SHOULD be designated + as the CLR. + + As described in [TcpModel], a steady-state sender transmission rate, + to be "friendly" with competing TCP flows, can be calculated as: + S + Rsender = ---------------------------------------------------------- + T_rtt*(sqrt((2/3)*p) + 12*sqrt((3/8)*p) * p * (1 + 32*(p^2))) + + where + + S = nominal transmitted packet size. (In NORM, the "nominal" packet + size can be determined by the sender as an exponentially weighted + moving average (EWMA) of transmitted packet sizes to account for + variable message sizes). + + T_rtt = RTT estimate of the current "current limiting receiver" + (CLR). + + p = loss event fraction of the CLR. + + + + +Adamson, et al. Standards Track [Page 67] + +RFC 5740 NORM Protocol November 2009 + + + To support congestion control feedback collection and operation, the + NORM sender periodically transmits NORM_CMD(CC) command messages. + NORM_CMD(CC) messages are multiplexed with NORM data and repair + transmissions and serve several purposes, they: + + 1. Stimulate explicit feedback from the general receiver set to + collect congestion control information. + + 2. Communicate state to the receiver set on the sender's current + congestion control status including details of the CLR. + + 3. Initiate rapid (immediate) feedback from the CLR in order to + closely track the dynamics of congestion control for the current + worst path in the group multicast topology. + + The format of the NORM_CMD(CC) message is described in Section 4.2.3 + of this document. The NORM_CMD(CC) message contains information to + allow measurement of RTTs, to inform the group of the congestion + control CLR, and to provide feedback of individual RTT measurements + to the receivers in the group. The NORM_CMD(CC) also provides for + exciting feedback from OPTIONAL "potential limiting receiver" (PLR) + nodes that might be determined administratively or possibly + algorithmically based upon congestion control feedback. PLR nodes + are receivers that have been identified to have potential for + (perhaps soon) becoming the CLR and thus immediate, up-to-date + feedback is beneficial for congestion control performance. The PLR + list MAY be populated with a small number of receivers the sender + identifies as approaching the CLR loss and delay conditions based on + feedback from the group. + +5.5.2.1. NORM_CMD(CC) Transmission + + The NORM_CMD(CC) message is transmitted periodically by the sender + along with its normal data transmission. Note the repeated + transmission of NORM_CMD(CC) messages MAY be initiated some time + before transmission of user data content at session startup. This + can be done to collect some estimation of the current state of the + multicast topology with respect to group and individual RTT and + congestion control state. + + A NORM_CMD(CC) message is immediately transmitted at sender startup. + The interval of subsequent NORM_CMD(CC) message transmission is + determined as follows: + + 1. By default, the interval is set according to the current sender + GRTT estimate. A startup initial value of GRTT_sender = 0.5 + seconds is RECOMMENDED when no feedback has yet been received + from the group. + + + +Adamson, et al. Standards Track [Page 68] + +RFC 5740 NORM Protocol November 2009 + + + 2. Until a CLR has been identified (based on previous receiver + feedback) or when no data transmission is pending, the + NORM_CMD(CC) interval is doubled up from its current interval to + a maximum of once per 30 seconds. This results in a low duty + cycle for NORM_CMD(CC) probing when no CLR is identified or there + is no pending data to transmit. + + 3. When a CLR has been identified (based on receiver feedback) and + data transmission is pending, the probing interval is set to the + RTT between the sender and the CLR (RTT_clr). + + 4. Additionally, when the data transmission rate is low with respect + to the RTT_clr interval used for probing, the implementation + SHOULD ensure no more than one NORM_CMD(CC) message is sent per + NORM_DATA message when there is data pending transmission. This + ensures the transmission of this control message is not done to + the exclusion of user data transmission. + + The NORM_CMD(CC) "cc_sequence" field is incremented with each + transmission of a NORM_CMD(CC) command. The greatest "cc_sequence" + recently received by receivers is included in their feedback to the + sender. This allows the sender to determine the age of feedback to + assist in congestion avoidance. + + The NORM-CC Rate Header Extension is applied to the NORM_CMD(CC) + message and the sender advertises its current transmission rate in + the "send_rate" field. The rate information is used by receivers to + initialize loss estimation during congestion control startup or + restart. + + The "cc_node_list" contains a list of entries identifying receivers + and their current congestion control state (status "flags", "rtt", + and "loss" estimates). The list will be empty if the sender has not + yet received any feedback from the group. If the sender has received + feedback, the list will minimally contain an entry identifying the + CLR. A NORM_FLAG_CC_CLR flag value is provided for the "cc_flags" + field to identify the CLR entry. It is RECOMMENDED the CLR entry be + the first in the list for implementation efficiency. Additional + entries in the list are used to provide sender-measured individual + RTT estimates to receivers in the group. The number of additional + entries in this list is dependent upon the percentage of control + traffic the sender application is willing to send with respect to + user data message transmissions. More entries in the list will allow + the sender to be more responsive to congestion control dynamics. The + length of the list can be dynamically determined according to the + current transmission rate and scheduling of NORM_CMD(CC) messages. + The maximum length of the list corresponds to the sender's + NormSegmentSize parameter for the session. The inclusion of + + + +Adamson, et al. Standards Track [Page 69] + +RFC 5740 NORM Protocol November 2009 + + + additional entries in the list based on receiver feedback is + prioritized with the following rules: + + 1. Receivers that have not yet been provided an RTT measurement get + first priority. Of these, those with the greatest loss fraction + receive precedence for list inclusion. + + 2. Secondly, receivers that have previously been provided an RTT + measurement are included with receivers yielding the lowest + calculated congestion rate getting precedence. + + There are "cc_flag" values in addition to NORM_FLAG_CC_CLR used for + other congestion control functions. The NORM_FLAG_CC_PLR flag value + is used to mark additional receivers from which the sender would like + to have immediate, non-suppressed feedback. These can be receivers + the sender algorithmically identified as potential future CLRs or + have been pre-configured as potential congestion control points in + the network. The NORM_FLAG_CC_RTT indicates the validity of the + "cc_rtt" field for the associated receiver node. Normally, this flag + will be set since the receivers in the list will typically be + receivers from which the sender has received feedback. However, in + the case the NORM sender has been pre-configured with a set of PLR + nodes, feedback from those receivers might not have yet been + collected and thus the "cc_rtt" field does not contain a valid value + when this flag is not set. Similarly, a value of ZERO for the + "cc_rate" field here MUST be treated as an invalid value and be + ignored for the purposes of feedback suppression, etc. + +5.5.2.2. NORM_CMD(CC) Feedback Response + + Receivers explicitly respond to NORM_CMD(CC) messages in the form of + a NORM_ACK(RTT) message. The goal of the congestion control feedback + is to determine the receivers with the lowest congestion control + rates. Receivers marked as CLR or PLR nodes in the NORM_CMD(CC) + "cc_node_list" immediately provide feedback in the form of a NORM_ACK + to this message. When a NORM_CMD(CC) is received, non-CLR or non-PLR + nodes initiate random feedback backoff timeouts similar to those used + when the receiver initiates a repair cycle (see Section 5.3) in + response to detection of data loss. The backoff timeout for the + congestion control response is generated as follows: + + T_backoff = RandomBackoff(K_backoff * GRTT_sender, GSIZE_sender) + + The RandomBackoff() algorithm provides a truncated exponentially + distributed random number and is described in the Multicast NACK + Building Block [RFC5401] document. The same backoff factor, + K_backoff = K_sender, as used with NORM_NACK suppression is generally + RECOMMENDED. However, in cases where the application purposefully + + + +Adamson, et al. Standards Track [Page 70] + +RFC 5740 NORM Protocol November 2009 + + + specifies a very small K_sender backoff factor to minimize the NACK + repair process latency (trading off group size scalability), it is + RECOMMENDED a larger backoff factor for congestion control feedback + be maintained, since there can be a larger volume of congestion + control feedback than NACKs in many cases and some congestion control + feedback latency might be tolerable where reliable delivery latency + is not. As previously noted, a backoff factor value of K_sender = 4 + is generally RECOMMENDED for ASM operation and K_sender = 6 for SSM + operation. A receiver SHALL cancel the backoff timeout and thus its + pending transmission of a NORM_ACK(RTT) message under the following + conditions: + + 1. The receiver generates another feedback message (NORM_NACK or + other NORM_ACK) before the congestion control feedback timeout + expires (these messages will convey the current congestion + control feedback information). + + 2. A NORM_CMD(CC) or other receiver feedback with an ordinally + greater "cc_sequence" field value is received before the + congestion control feedback timeout expires (this is similar to + the TFMCC feedback round number). + + 3. When the T_backoff is greater than 1*GRTT_sender. This prevents + NACK implosion in the event of sender or network failure. + + 4. "Suppressing" congestion control feedback is heard from another + receiver (in a NORM_ACK or NORM_NACK) or via a + NORM_CMD(REPAIR_ADV) message from the sender. The local + receiver's feedback is "suppressed" if the rate of the competing + feedback (Rfb) is sufficiently close to or less than the local + receiver's calculated rate (Rcalc). The local receiver's + feedback is canceled when Rcalc > (0.9 * Rfb). Also, note + receivers that have not yet received an RTT measurement from the + sender are suppressed only by other receivers that have not yet + measured RTT. Additionally, receivers whose RTT estimate has + aged considerably (i.e., they haven't been included in the + NORM_CMD(CC) "cc_node_list" in a long time) might wish to compete + as a receiver with no prior RTT measurement after some long-term + expiration period. + + When the backoff timer expires, the receiver SHALL generate a + NORM_ACK(RTT) message to provide feedback to the sender and group. + This message MAY be multicast to the group for most effective + suppression in ASM topologies or unicast to the sender depending upon + how the NORM protocol is deployed and configured. + + Whenever any feedback is generated (including this NORM_ACK(RTT) + message), receivers include an adjusted version of the sender + + + +Adamson, et al. Standards Track [Page 71] + +RFC 5740 NORM Protocol November 2009 + + + timestamp from the most recently received NORM_CMD(CC) message and + its "cc_sequence" value in the corresponding NORM_ACK or NORM_NACK + message fields. For NORM-CC operation, any generated feedback + message SHALL also contain the NORM-CC Feedback header extension. + The receiver provides its current "cc_rate" estimate, "cc_loss" + estimate, "cc_rtt" if known, and any applicable "cc_flags" via this + header extension. + + During slow start (when the receiver has not yet detected loss from + the sender), the receiver uses a value equal to two times its + measured rate from the sender in the "cc_rate" field. For steady- + state congestion control operation, the receiver "cc_rate" value is + from the equation-based value using its current loss event estimate + and sender<->receiver RTT information. (The GRTT_sender is used when + the receiver has not yet measured its individual RTT.) + + The "cc_loss" field value reflects the receiver's current loss event + estimate with respect to the sender in question. + + When the receiver has a valid individual RTT measurement, it SHALL + include this value in the "cc_rtt" field. The NORM_FLAG_CC_RTT MUST + be set when the "cc_rtt" field is valid. + + After a congestion control feedback message is generated or when the + feedback is suppressed, a non-CLR receiver begins a "holdoff" timeout + period during which it will restrain itself from providing congestion + control feedback, even if NORM_CMD(CC) messages are received from the + sender (unless the receive becomes marked as a CLR or PLR node). The + value of this holdoff timeout (T_ccHoldoff) period is: + + T_ccHoldoff = (K_sender * GRTT_sender) + + Thus, non-CLR receivers are constrained to providing explicit + congestion control feedback once per K_sender*GRTT_sender intervals. + However, as the session progresses, different receivers will be + responding to different NORM_CMD(CC) messages and there will be + relatively continuous feedback of congestion control information + while the sender is active. + +5.5.2.3. Congestion Control Rate Adjustment + + During steady-state operation, the sender will directly adjust its + transmission rate to the rate indicated by the feedback from its + currently selected CLR. As noted in [TfmccPaper], the estimation of + parameters (loss and RTT) for the CLR will generally constrain the + rate changes possible within acceptable bounds. For rate increases, + the sender SHALL observe a maximum rate of increase of one packet per + RTT at all times during steady-state operation. + + + +Adamson, et al. Standards Track [Page 72] + +RFC 5740 NORM Protocol November 2009 + + + The sender processes congestion control feedback from the receivers + and selects the CLR based on the lowest rate receiver. Receiver + rates are determined either directly from the slow start "cc_rate" + provided by the receiver in the NORM-CC Feedback header extension or + by performing the equation-based calculation using individual RTT and + loss estimates ("cc_loss") as feedback is received. + + The sender can calculate a current RTT for a receiver (RTT_rcvrNew) + using the "grtt_response" timestamp included in feedback messages. + When the "cc_rtt" value in a response is not valid, the sender simply + uses this RTT_rcvrNew value as the receiver's current RTT (RTT_rcvr). + For non-CLR and non-PLR receivers, the sender SHOULD use the "cc_rtt" + provided in the NORM-CC Feedback header extension as the receiver's + previous RTT measurement (RTT_rcvrPrev) averaged with the current + measurement ("RTT_rcvrNew") as the receiver's RTT value: + + RTT_rcvr = 0.5 * RTT_rcvrPrev + 0.5 * RTT_rcvrNew + + For CLR receivers where feedback is received more regularly, the + sender SHOULD maintain a more smoothed RTT estimate upon new feedback + from the CLR where: + + RTT_clr = 0.9 * RTT_clr + 0.1 * RTT_clrNew + + RTT_clrNew is the new RTT calculated from the timestamp in the + feedback message received from the CLR. The RTT_clr is initialized + to RTT_clrNew on the first feedback message received. Note that the + same procedure is observed by the sender for PLR receivers, and if a + PLR is "promoted" to CLR status, the smoothed estimate can be + continued. + + There are some additional periods besides steady-state operation to + be considered in NORM-CC operation. These periods are: + + 1. during session startup, + + 2. when no feedback is received from the CLR, and + + 3. when the sender has a break in data transmission. + + During session startup, the congestion control operation SHALL + observe a "slow-start" procedure to quickly approach its fair + bandwidth share. An initial sender startup rate is assumed where: + + Rinit = MIN(NormSegmentSize/GRTT_sender, NormSegmentSize) bytes/sec + + The rate is increased only when feedback is received from the + receiver set. The "slow start" phase proceeds until any receiver + + + +Adamson, et al. Standards Track [Page 73] + +RFC 5740 NORM Protocol November 2009 + + + provides feedback indicating loss has occurred. Rate increase during + slow start is applied as: + Rnew = Rrecv_min + + where Rrecv_min is the minimum reported receiver rate in the + "cc_rate" field of congestion control feedback messages received from + the group. Note during slow start, receivers use two times their + measured rate from the sender in the "cc_rate" field of their + feedback. Rate increase adjustment is limited to once per GRTT + during slow start. + + If the CLR or any receiver intends to leave the group, it will set + the NORM_FLAG_CC_LEAVE in its congestion control feedback message as + an indication the sender SHOULD NOT select it as the CLR. When the + CLR changes to a lower rate receiver, the sender SHOULD immediately + adjust to the new lower rate. The sender is limited to increasing + its rate at one additional packet per RTT towards any new, higher CLR + rate. + + The sender SHOULD also track the age of the feedback it has received + from the CLR by comparing its current "cc_sequence" value + (Seq_sender) to the last "cc_sequence" value received from the CLR + (Seq_clr). As the age of the CLR feedback increases with no new + feedback, the sender SHALL begin reducing its rate once per RTT_clr + as a congestion avoidance measure. The following algorithm is used + to determine the decrease in sender rate (Rsender bytes/sec) as the + CLR feedback, unexpectedly, excessively ages: + + Age = Seq_sender - Seq_clr; + if (Age > 4) Rsender = Rsender * 0.5; + + This rate reduction is limited to the lower bound on NORM + transmission rates. After NORM_ROBUST_FACTOR consecutive + NORM_CMD(CC) rounds without any feedback from the CLR, the sender + SHOULD assume the CLR has left the group and pick the receiver with + the next lowest rate as the new CLR. Note this assumes the sender + does not have explicit knowledge the CLR intentionally left the + group. If no receiver feedback is received, the sender MAY wish to + withhold further transmissions of NORM_DATA segments and maintain + NORM_CMD(CC) transmissions only until feedback is detected. After + such a CLR timeout, the sender will be transmitting with a minimal + rate and SHOULD return to slow start as described here for a break in + data transmission. + + When the sender has a break in its data transmission, it can continue + to probe the group with NORM_CMD(CC) messages to maintain RTT + collection from the group. This will enable the sender to quickly + determine an appropriate CLR upon data transmission restart. + + + +Adamson, et al. Standards Track [Page 74] + +RFC 5740 NORM Protocol November 2009 + + + However, the sender SHOULD exponentially reduce its target rate to be + used for transmission restart as time since the break elapses. The + target rate SHOULD be recalculated once per RTT_clr as: + + Rsender = Rsender * 0.5; + + If the minimum NORM rate is reached, the sender SHOULD set the + NORM_FLAG_START flag in its NORM_CMD(CC) messages upon restart and + the group SHOULD observe slow-start congestion control procedures + until any receiver experiences a new loss event. + +5.5.3. NORM Positive Acknowledgment Procedure + + NORM provides options for the source application to request positive + acknowledgment (ACK) of NORM_CMD(FLUSH) and NORM_CMD(ACK_REQ) + messages from members of the group. There are some specific + acknowledgment requests defined for the NORM protocol and a range of + acknowledgment request types left to be defined by the application. + One predefined acknowledgment type is the NORM_ACK(FLUSH) type. This + acknowledgment is used to determine if receivers have achieved + completion of reliable reception up through a specific logical + transmission point with respect to the sender's sequence of + transmission. The NORM_ACK(FLUSH) acknowledgment MAY be used to + assist in application flow control when the sender has information on + a portion of the receiver set. Another predefined acknowledgment + type is NORM_ACK(CC) used to explicitly provide congestion control + feedback in response to NORM_CMD(CC) messages transmitted by the + sender for NORM-CC operation. Note the NORM_ACK(CC) response does + NOT follow the positive acknowledgment procedure described here. The + NORM_CMD(ACK_REQ) and NORM_ACK messages contain an "ack_type" field + to identify the type of acknowledgment requested and provided. A + range of "ack_type" values is provided for application-defined use. + While the application is responsible for initiating the + acknowledgment request and interprets application-defined "ack_type" + values, the acknowledgment procedure SHOULD be conducted within the + protocol implementation to take advantage of timing and transmission + scheduling information available to the NORM transport. + + The NORM Positive Acknowledgment Procedure uses polling by the sender + to query the receiver group for response. Note this polling + procedure is not intended to scale to very large receiver groups, but + could be used in a large group setting to query a critical subset of + the group. Either the NORM_CMD(ACK_REQ), or when applicable, the + NORM_CMD(FLUSH) message is used for polling and contains a list of + NormNodeIds of the receivers expected to respond to the command. The + list of receivers providing acknowledgment is determined by the + source application with a priori knowledge of participating nodes or + via some other application-level mechanism. + + + +Adamson, et al. Standards Track [Page 75] + +RFC 5740 NORM Protocol November 2009 + + + The ACK process is initiated by the sender generating NORM_CMD(FLUSH) + or NORM_CMD(ACK_REQ) messages in periodic rounds. For + NORM_ACK(FLUSH) requests, the NORM_CMD(FLUSH) contains a + "object_transport_id" and "fec_payload_id" denoting the watermark + transmission point for which acknowledgment is requested. This + watermark transmission point is echoed in the corresponding fields of + the NORM_ACK(FLUSH) message sent by the receiver in response. + NORM_CMD(ACK_REQ) messages contain an "ack_id" field that is + similarly echoed in response so the sender can match the response to + the appropriate request. + + In response to the NORM_CMD(ACK_REQ), the listed receivers randomly, + with a uniform distribution, transmit NORM_ACK messages over a time + window of (1*GRTT_sender). These NORM_ACK messages are typically + unicast to the sender. (Note NORM_ACK(CC) messages SHALL be + multicast or unicast in the same manner as NORM_NACK messages.) + + The ACK process is self-limiting and avoids ACK implosion because: + + 1. Only a single NORM_CMD(ACK_REQ) message is generated once per + (2*GRTT_sender), and + + 2. The size of the "acking_node_list" of NormNodeIds from which + acknowledgment is requested is limited to a maximum of the sender + NormSegmentSize setting per round of the positive acknowledgment + process. + + Because the size of the included list is limited to the sender's + NormSegmentSize setting, multiple NORM_CMD(ACK_REQ) rounds will + sometimes be necessary to achieve responses from all receivers + specified. The content of the attached NormNodeId list will be + dynamically updated as this process progresses and NORM_ACK responses + are received from the specified receiver set. As the sender receives + valid responses (i.e., matching watermark point or "ack_id") from + receivers, it SHALL eliminate those receivers from the subsequent + NORM_CMD(ACK_REQ) message "acking_node_list" and add in any pending + receiver NormNodeIds while keeping within the NormSegmentSize + limitation of the list size. Each receiver is queried a maximum + number of times (NORM_ROBUST_FACTOR, by default). Receivers not + responding within this number of repeated requests are removed from + the payload list to make room for other potential receivers pending + acknowledgment. The transmission of the NORM_CMD(ACK_REQ) is + repeated until no further responses are needed or until the repeat + threshold is exceeded for all pending receivers. The transmission of + NORM_CMD(ACK_REQ) or NORM_CMD(FLUSH) messages to conduct the positive + acknowledgment process is multiplexed with ongoing sender data + transmissions. However, the NORM_CMD(FLUSH) positive acknowledgment + process MAY be interrupted in response to negative acknowledgment + + + +Adamson, et al. Standards Track [Page 76] + +RFC 5740 NORM Protocol November 2009 + + + repair requests (NACKs) received from receivers during the + acknowledgment period. The NORM_CMD(FLUSH) positive acknowledgment + process is restarted for receivers pending acknowledgment once any + the repairs have been transmitted. + + In the case of NORM_CMD(FLUSH) commands with an attached + "acking_node_list", receivers will not ACK until they have received + complete transmission of all data up to and including the given + watermark transmission point. All receivers SHALL interpret the + watermark point provided in the request NACK for repairs if needed as + for NORM_CMD(FLUSH) commands with no attached "acking_node_list". + +5.5.4. Group Size Estimate + + NORM sender messages contain a "gsize" field that is a representation + of the group size and that is used in scaling random backoff timer + ranges. The use of the group size estimate within the NORM protocol + does not demand a precise estimation and works reasonably well if the + estimate is within an order of magnitude of the actual group size. + By default, the NORM sender group size estimate MAY be + administratively configured. Also, given the expected scalability of + the NORM protocol for general use, a default value of 10,000 is + RECOMMENDED for use as the group size estimate. It is also possible + the group size MAY be algorithmically approximated from the volume of + congestion control feedback messages based on the exponentially + weighted random backoff. However, the specification of such an + algorithm is currently beyond the scope of this document. + +6. Configurable Elements + + The NORM protocol supports a modest number of configurable parameters + that control operation. Most of these need only be set at NORM + sender(s) and the configuration information is communicated to the + receiver set in NORM header and/or header extension fields. A + notable exception to this is the NORM_ROBUST_FACTOR that is presumed + to be a common value preset among senders and receivers for a given + NORM session. The following table summarizes these configurable + elements: + + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 77] + +RFC 5740 NORM Protocol November 2009 + + + +--------------------+----------------------------------------------+ + | Configurable | Purpose | + | Element | | + +--------------------+----------------------------------------------+ + | Sender initial | Sender's initial estimate of greatest group | + | GRTT Estimate | round-trip time. Affects timing of feedback | + | (GRTT_sender) | suppression and sender command transmissions | + | | at sender startup. | + | Backoff Factor | Sender's scaling factor used for timer-based | + | (K_sender) | feedback suppression. | + | Group Size | Sender's rough estimate of receiver group | + | Estimate | size used in generation of random feedback | + | (GSIZE_sender) | backoff timeout. | + | NORM_ROBUST_FACTOR | Integer factor determining how persistently | + | | (i.e., robust) senders transmit repeated | + | | control messages and receivers self-initiate | + | | timeout-based NACKing in the absence of | + | | sender activity. | + | FEC Type | Sender FEC encoding type. | + | ("fec_id") | | + | Sender segment | Maximum size (in bytes) of the payload | + | size | portion of NORM_DATA and other messages. | + | (NormSegmentSize) | | + | NormNodeId | Unique identifiers pre-assigned to all NORM | + | | session participants. | + +--------------------+----------------------------------------------+ + + The sender-controlled GRTT estimate (referred to as GRTT_sender in + this document) is used to set and scale various timers associated + with NORM protocol operation. During steady-state operation, the + sender probes the receiver set, adapts to the group round-trip timing + state, and advertises its estimate to the receiver set in the "grtt" + field of relevant NORM protocol messages. However, an initial value + must be assumed at sender startup. A large initial estimate is + conservative and safer with regard to preventing feedback implosion + and starting up congestion control operation, but requires the sender + and receivers to allocate more buffering resources for a given + transmission rate (i.e., larger effective delay*bandwidth product) to + maintain efficient operation. A default initial value of GRTT_sender + = 0.5 seconds is RECOMMENDED. + + The sender-controlled Backoff Factor (referred to a K_sender in this + document) is used to scale protocol timers and contributes to the + generation of the random backoff timeout value that facilitates + timer-based feedback suppression. The sender advertises its + configured Backoff Factor to the receiver set in the "backoff" field + of applicable NORM messages and thus no receiver configuration is + necessary. For ASM operation, a default value of K_sender = 4 is + + + +Adamson, et al. Standards Track [Page 78] + +RFC 5740 NORM Protocol November 2009 + + + RECOMMENDED; for SSM operation, a default value of K_sender = 6 is + RECOMMENDED. + + The sender estimate of session Group Size (referred to as + GSIZE_sender in this document) also plays a role in the random + selection of feedback suppression timeout values. The sender + advertises its configured Group Size estimate to the receiver set in + the "gsize" field of applicable NORM messages; thus, no receiver + configuration is necessary. Only a rough estimate (i.e., "order-of- + magnitude") is needed for effective feedback suppression and a + default value of GSIZE_sender = 10,000 is RECOMMENDED as a + conservative estimate for most uses. + + The NORM_ROBUST_FACTOR is an integer parameter that determines how + persistently NORM senders transmit control messages (NORM_CMD + messages) such as end-of-transmission flushing, OPTIONAL positive + acknowledgment requests, etc. Additionally, the receivers use their + knowledge of NORM_ROBUST_FACTOR to determine when to consider a NORM + sender inactive and MAY use the factor in determining how + persistently to self-initiate repeated NACK repair requests upon such + timeouts. This parameter is NOT communicated in NORM protocol + message headers and is presumed to be preset to a consistent value + among sender and receivers for a given NORM session. A default value + of NORM_ROBUST_FACTOR = 20 is RECOMMENDED. + + Another NORM sender configuration element is the FEC type used to + encode NORM_DATA message content. The FEC type is communicated from + the sender to the receiver set in the "fec_id" field of relevant NORM + message headers. The "fec_id" value corresponds to an IANA-assigned + value identifying the FEC encoding type as described in the FEC + Building Block [RFC5052] document. Typically, a sender SHOULD use a + consistent FEC encoding for its participation in a session to + simplify receiver state allocation and maintenance, but its + implementations MAY vary the FEC encoding type on a per-object basis + if necessary. + + The sender NormSegmentSize setting determines the maximum size of the + payload portion of NORM_DATA and other messages that the sender + transmits. Additionally, the payload size of feedback messages from + receivers to a given sender is limited to that sender's + NormSegmentSize. The NormSegmentSize SHOULD be configured to be + compatible with expected network MTU limitations, given the added + overhead of NORM, UDP, and IP protocol message headers. + Additionally, MTU Discovery MAY be employed by the sender to + determine an appropriate NormSegmentSize. The NormSegmentSize for a + given sender can be determined by receivers from the FEC Object + Transmission Information (FTI) provided either in applied EXT_FTI + header extensions or pre-configured session information. + + + +Adamson, et al. Standards Track [Page 79] + +RFC 5740 NORM Protocol November 2009 + + + Although it is not technically a configurable element, the receivers + MUST have FEC Object Transmission Information for transmitted + NormObjects to properly buffer, decode, and reassemble the original + content. For loosely organized NORM protocol sessions, the sender + MAY apply the EXT_FTI Header Extension to NORM_DATA and NORM_INFO (if + applicable) messages so that receivers can get this information + without prior coordination. An implementation MAY also apply the + EXT_FTI only to NORM_INFO messages for reduced overhead. Finally, + applications MAY also provide the FTI out-of-band prior to sender + transmission. + + Each participant in a NORM protocol session MUST be configured with a + unique NormNodeId value. The NormNodeId value is used by receivers + to identify the sender to which their NACK or other feedback messages + are addressed, and senders use the NormNodeId to differentiate + receivers for purposes of congestion control and OPTIONAL positive + acknowledgment collection. Assignment of unique NormNodeId values + can be done via a priori coordination and/or use of a deconfliction + mechanism external to the NORM protocol itself. The values of + NORM_NODE_NONE = 0x00000000 and NORM_NODE_ANY = 0xffffffff are + reserved and MUST NOT be assigned to NORM participants. + +7. Security Considerations + + The same security considerations that apply to the Multicast NACK + [RFC5401], TFMCC [RFC4654], and FEC [RFC5052] Building Blocks also + apply to the NORM protocol. In addition to the vulnerabilities to + which any IP and IP multicast protocol implementation is subject, + malicious hosts might engage in excessive NACKing in an attempt to + prevent the NORM sender(s) from making forward progress in reliable + transmission. Receiver "join" and "service" policy enforcement as + described in Section 5.2 can be applied if such activity is detected. + The use of cryptographic peer authentication, integrity checks, + and/or confidentiality mechanisms can be used to provide a more + effective degree of protection from objectionable transmissions from + unauthorized hosts. But in some cases, even with authentication and + integrity checks, the NACK-based feedback of NORM can be exploited by + replay attacks forcing the NORM sender to unnecessarily transmit + repair information. This MAY be addressed in part with network-layer + IP security implementations that guard against this potential + security exploitation or alternatively with a security mechanism + using the EXT_AUTH header extension for similar purposes. Such + security mechanisms SHOULD be deployed and used when available. Use + of security mechanisms will impose additional "a priori" + configuration upon the NORM deployment depending upon the techniques + used. + + The NORM protocol is compatible with the use of IP security (IPsec) + + + +Adamson, et al. Standards Track [Page 80] + +RFC 5740 NORM Protocol November 2009 + + + [RFC4301], and the IPsec Encapsulating Security Payload (ESP) + protocol or Authentication Header (AH) extension can be used to + secure IP packets transmitted by NORM participants. A baseline + approach to secure NORM operation using IPsec is described below. + Compliant implementations of this specification are REQUIRED to be + compatible with IPsec usage as described in Section 7.1. IPsec can + be used to provide peer authentication, integrity protection, and/or + encryption of packets containing NORM messages. + + Additionally, the EXT_AUTH header extension (HET = 1) is reserved for + use by security mechanisms to provide alternatives to IPsec for the + security of NORM messages. 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 + possible an EXT_AUTH implementation MAY also provide for encryption + of NORM message payloads as well as peer authentication and integrity + protection. The use of this approach as compared to IPsec can allow + for header compression techniques to be applied jointly to IP and + NORM protocol headers. In cases where security analysis deems + encryption of NORM protocol header content to be beneficial or + necessary, the aforementioned use of IPsec ESP might be more + appropriate. Additionally, the EXT_AUTH header extension can be + utilized when NORM is implemented in a network with Network Address + Translation (NAT) systems that are incompatible with use of the IPsec + AH extension. If EXT_AUTH is present, whatever packet authentication + or integrity checks that can be performed immediately upon reception + of the packet MUST 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 can be fully authenticated. + Any appropriate congestion control related action MUST NOT be + postponed by any such packet security mechanism (i.e., security + mechanisms MUST NOT result in poor congestion control behavior). + + Consideration MUST also be given to the potential for replay-attacks + that would transplant authenticated packets from one NORM session to + another to disrupt service. To avoid this potential, unique keys + SHOULD be assigned on a per-session basis or NORM sender nodes SHOULD + be configured to use unique "instance_id" identifiers managed as part + of the security association for the sessions. + + Note NORM implementations can use the "sequence" field from the NORM + common message header to detect replay attacks. This can be + accomplished if the NORM sender maintains state on actively NACKing + receivers. A cache of such receiver state can be used to provide + protection against NACK replay attacks. NORM receivers MUST also + maintain similar state for protection against possible replay of + other receiver messages in ASM operation as well. For example, a + + + +Adamson, et al. Standards Track [Page 81] + +RFC 5740 NORM Protocol November 2009 + + + receiver could be suppressed from providing NACK or congestion + control feedback by replay of certain receiver messages. For these + reasons, authentication of NORM messages (e.g., via IPsec) SHOULD be + applied for protection against similar attacks that use fabricated + messages. Also, encryption of messages to provide confidentiality of + application data and protect privacy of users MAY also be applied + using IPsec or similar mechanisms. + + When applicable security measures are used, automated key management + mechanisms such as those described in the Group Domain of + Interpretation (GDOI) [RFC3547], Multimedia Internet KEYing (MIKEY) + [RFC3830], or Group Secure Association Key Management Protocol + (GSAKMP) [RFC4535] specifications SHOULD be applied. + + While NORM does leverage FEC-based repair for scalability, this alone + does not guarantee integrity of received data. Application-level + integrity-checking of received data content is highly RECOMMENDED. + This recommendation also applies when the IPsec security approach + described below is used for added assurance in data content integrity + given the shared use of IPsec Security Association information among + the group. + +7.1. Baseline Secure NORM Operation + + This section describes a baseline mode of secure NORM protocol + operation based on application of the IPsec security protocol. This + approach is documented here to provide a baseline interoperable + secure mode of operation. This particular approach represents one + possible trade-off in the level of assurance that can be achieved and + the scalability of multicast group-size given current IPsec + mechanisms and the state required to support them. For example, this + baseline approach specifies the use of a Security Association that is + shared among the receiver set for feedback messages to the sender. + This model requires that the receiver membership receiving the + session keys is trusted and only provides protection from attacks + that are external to the NORM group membership. More stateful and + complex IPsec approaches and key management schemes may be applied + for higher levels of assurance, but those are beyond the scope of + this transport protocol specification. Additional approaches to NORM + security, including other forms of IPsec application, MAY be + specified in the future. For example, the use of the EXT_AUTH header + extension could enable NORM-specific authentication or security + encapsulation headers similar to those of IPsec to be specified and + inserted into the NORM protocol message headers. This would allow + header compression techniques to be applied to IP and NORM protocol + headers when needed in a similar fashion to RTP [RFC3550] and as + preserved in the specification for Secure Real Time Protocol (SRTP) + [RFC3711]. + + + +Adamson, et al. Standards Track [Page 82] + +RFC 5740 NORM Protocol November 2009 + + + The baseline approach described is applicable to NORM operation + configured for SSM (or SSM-like) operation where there is a single + sender and the receivers are providing unicast feedback. This form + of NORM operation allows for IPsec to be used with a manageable + number of security associations (SA). + +7.1.1. IPsec Approach + + For NORM one-to-many SSM operation with unicast feedback from + receivers, each node SHALL be configured with two transport mode + IPsec security associations and corresponding Security Policy + Database (SPD) entries. One entry will be used for sender-to-group + multicast packet authentication and optionally encryption while the + other entry will be used to provide security for the unicast feedback + messaging from the receiver(s) to the sender. Note that this single + SA for NORM receiver feedback messages is shared to protect traffic + from possibly multiple receivers to the single sender. + + For each NormSession, the NORM sender SHALL use an IPsec SA + configured for ESP protocol [RFC4303] operation with the option for + data origin authentication enabled. It is also RECOMMENDED this + IPsec ESP SA be also configured to provide confidentiality protection + for IP packets containing NORM protocol messages. This is suggested + to make the realization of complex replay attacks much more + difficult. The encryption key for this SA SHALL be preplaced at the + sender and receiver(s) prior to NORM protocol operation. Use of + automated key management is RECOMMENDED as a rekey SHALL be REQUIRED + prior to expiration of the sequence space for the SA. This is + necessary so receivers can use the built-in IPsec replay attack + protection possible for an IPsec SA with a single source (the NORM + sender). Thus, the receivers SHALL enable replay attack protection + for this SA used to secure NORM sender traffic. An IPsec SPD entry + MUST be configured to process outbound packets to the session + (destination) address and UDP port number of the applicable + (NormSession). + + The NORM receiver(s) MUST be configured with the SA and SPD entry to + properly process the IPsec-secured packets from the sender. The NORM + receiver(s) SHALL also use a common, second IPsec SA (common Security + Parameter Index (SPI) and encryption key) configured for ESP + operation with the option for data origination authentication + enabled. Similar to the NORM sender, is RECOMMENDED this IPsec ESP + SA be also configured to provide confidentiality protection for IP + packets containing NORM protocol messages. The receivers MUST have + an IPsec SPD entry configured to process outbound NORM/UDP packets + directed to the NORM sender source address and port number using this + second SA. To support NORM unicast feedback, the sender's + transmission port number SHOULD be selected to be distinct from the + + + +Adamson, et al. Standards Track [Page 83] + +RFC 5740 NORM Protocol November 2009 + + + multicast session port number to allow discrimination between unicast + and multicast feedback messages when access to the IP destination + address is not possible (e.g., a user-space NORM implementation). + For processing of packets from receivers, the NORM sender SHALL be + configured with this common, second SA (and the corresponding SPD + entry needed) in order to properly process messages from the + receiver. + + Multiple receivers using a common IPsec SA for traffic directed to + the NORM sender (i.e., many-to-one) typically prevents the use of + built-in IPsec replay attack protection by the NORM sender with + current IPsec implementations. Thus the built-in IPsec replay attack + protection for this second SA at the sender MUST be disabled unless + the particular IPsec implementation manages its replay protection on + a per-source basis (which is not typical of existing IPsec + implementations). So, to support a fully secure mode of operation, + the NORM sender implementation MUST provide replay attack protection + based upon the "sequence" field of NORM protocol messages from + receivers. This can be accomplished with a high assurance of + security, even with the limited size (16-bits) of this field, + because: + + 1. NORM receiver NACK and non-CLR ACK feedback messages are sparse. + + 2. The more frequent NORM_ACK feedback from CLR or PLR nodes is only + a small set of receivers for which the sender needs to keep more + persistent replay attack state. + + 3. NORM_NACK feedback messages preceding the sender's current repair + window do not significantly impact protocol operation (generation + of NORM_CMD(SQUELCH) is limited) and could be in fact ignored. + This means the sender can prune any replay attack state that + precedes the current repair window. + + 4. NORM_ACK messages correspond to either a specific sender + "ack_id", the sender "cc_sequence" for ACKs sent in response to + NORM_CMD(CC), or the sender's current repair window in the case + of ACKs sent in response to NORM_CMD(FLUSH). Thus, the sender + can prune any replay attack state for receivers that precede the + current applicable sequence or repair window space. + + The use of ESP confidentiality for secure NORM protocol operation + makes it more difficult for adversaries to conduct any form of replay + attacks. Additionally, a NORM sender implementation with access to + the full ESP protocol header could also use the ESP sequence + information to make replay attack protection even more robust by + maintaining the per-source ESP sequence state that existing IPsec + implementations typically do not provide. The design of this + + + +Adamson, et al. Standards Track [Page 84] + +RFC 5740 NORM Protocol November 2009 + + + baseline security approach for NORM intentionally places any more + complex processing state or processing (e.g., replay attack + protection given multiple receivers) at the NORM sender since NORM + receiver implementations might often need to be less complex. + + This baseline approach can be used for NORM protocol sessions with + multiple senders if the SA pairs described are established for each + sender. For small-sized groups, it is even possible many-to-many + (ASM) IPsec configuration could be achieved where each participant + uses a unique SA (with a unique SPI). In this case, the sender(s) + would maintain an SA for each other participant rather than a single, + shared SA for receiver feedback messages. This does not scale to + larger group sizes given the complex set of SA and SPD entries each + participant would need to maintain. + + It is anticipated in early deployments of this baseline approach to + NORM security that key management will be conducted out-of-band with + respect to NORM protocol operation. In the case of one-to-many NORM + operation, it is possible receivers will retrieve keying information + from a central server as needed or otherwise conduct group key + updates with a similar centralized approach. Alternatively, it is + possible with some key management schemes for rekey messages to be + transmitted to the group as a message or transport object within the + NORM reliable transfer session. Similarly, for group-wise + communication sessions, it is possible for potential group + participants to request keying and/or rekeying as part of NORM + communications. Additional specification is necessary to define an + in-band key management scheme for NORM sessions perhaps using the + mechanisms of the automated group key management specifications cited + in this document. Additional specification outside of the scope of + this document would be needed to provide an interoperable approach + for key management in-band of a NORM reliable transport session. + +7.1.2. IPsec Requirements + + In order to implement this secure mode of NORM protocol operation, + the following IPsec capabilities are REQUIRED. + +7.1.2.1. Selectors + + The implementation MUST be able to use the source address, + destination address, protocol (UDP), and UDP port numbers as + selectors in the SPD. + +7.1.2.2. Mode + + IPsec in transport mode MUST be supported. The use of IPsec + [RFC4301] processing for secure NORM traffic MUST be configured such + + + +Adamson, et al. Standards Track [Page 85] + +RFC 5740 NORM Protocol November 2009 + + + that unauthenticated packets are not received by the NORM protocol + implementation. + +7.1.2.3. Key Management + + An automated key management scheme for group key distribution and + rekeying such as GDOI [RFC3547], GSAKMP [RFC4535], or MIKEY [RFC3830] + is RECOMMENDED for use. Note it is possible for key update messages + (e.g., the GDOI GROUPKEY-PUSH message) to be included as part of the + NORM application reliable data transmission if appropriate interfaces + are available between the NORM application and the key management + daemon. Relatively short-lived NORM sessions MAY be able to use + Manual Keying with a single, preplaced key, particularly if Extended + Sequence Numbering (ESN) [RFC4303] is available in the IPsec + implementation used. When manual keys are used, it is important that + cryptographic algorithms suitable for manual key use are selected. + +7.1.2.4. Security Policy + + Receivers MUST accept protocol messages only from the designated, + authorized sender(s). Appropriate key management will provide + authentication, integrity and/or encryption keys only to receivers + authorized to participate in a designated session. The approach + outlined here allows receiver sets to be controlled on a per-sender + basis. + +7.1.2.5. Authentication and Encryption + + Large NORM group sizes will necessitate some form of key management + that does rely upon shared secrets. The GDOI and GSAKMP protocols + mentioned here allow for certificate-based authentication. It is + RECOMMENDED these certificates use IP addresses for authentication. + +7.1.2.6. Availability + + The IPsec requirements profile outlined here is commonly available on + many potential NORM hosts. Configuration and operation of IPsec + typically requires privileged user authorization. Automated key + management implementations are typically configured with the + privileges necessary to affect system IPsec configuration. + +8. IANA Considerations + + Values of NORM Header Extension Types, Stream Control Codes, and + NORM_CMD message sub-types are subject to IANA registration. They + are in the registry named "Reliable Multicast Transport (RMT) NORM + Protocol Parameters" available from http://www.iana.org. + + + + +Adamson, et al. Standards Track [Page 86] + +RFC 5740 NORM Protocol November 2009 + + + Note the reliable multicast building block components used by this + specification also have their respective IANA considerations, and + those documents SHOULD be consulted accordingly. In particular, the + FEC Building Block used by NORM does REQUIRE IANA registration of the + FEC codecs used. The registration instructions for FEC codecs are + provided in RFC 5052. It is possible additional extensions of the + NORM protocol might be specified in the future (e.g., additional NORM + message types) and additional registries be established at that time + with appropriate IETF standards action. + +8.1. Explicit IANA Assignment Guidelines + + This document introduces three registries for the NORM Header + Extension Types, Stream Control Codes, and NORM_CMD Message sub- + types. This section describes explicit IANA assignment guidelines + for each of these. + +8.1.1. NORM Header Extension Types + + This document defines a registry for NORM Header Extensions named + "NORM Header Extension Types". + + The NORM Header Extension Type field is an 8-bit value. The values + of this field identify extended header content allowing the protocol + functionality to be expanded to include additional features and + operating modes. The values that can be assigned within the "NORM + Header Extensions" registry are numeric indexes in the range {0, + 255}, boundaries included. Values in the range {0,127} indicate + variable-length extended header fields while values in the range + {128,255} indicate extensions of a fixed 4-byte length. This + specification registers the following NORM Header Extension Types: + + +-------+----------+--------------------+ + | Value | Name | Reference | + +-------+----------+--------------------+ + | 1 | EXT_AUTH | This specification | + | 3 | EXT_CC | This specification | + | 64 | EXT_FTI | This specification | + | 128 | EXT_RATE | This specification | + +-------+----------+--------------------+ + + Requests for assignment of additional NORM Header Extension Type + values are granted on a "Specification Required" basis as defined by + IANA Guidelines [RFC5226]. Any such header extension specifications + MUST include a description of protocol actions to be taken when the + extension type is encountered by a protocol implementation not + supporting that specific option. For example, it is often possible + for protocol implementations to ignore unknown header extensions. + + + +Adamson, et al. Standards Track [Page 87] + +RFC 5740 NORM Protocol November 2009 + + +8.1.2. NORM Stream Control Codes + + This document defines a registry for NORM Stream Control Codes named + "NORM Stream Control Codes". + + NORM Stream Control Codes are 16-bit values that can be inserted + within a NORM_OBJECT_STREAM delivery object to convey sequenced, out- + of-band (with respect to the stream data) control signaling + applicable to the referenced stream object. These control codes are + to be delivered to the application or protocol implementation with + reliable delivery, in-order with respect to the their inserted + position within the stream. This specification registers the + following NORM Stream Control Code: + + +-------+-----------------+--------------------+ + | Value | Name | Reference | + +-------+-----------------+--------------------+ + | 0 | NORM_STREAM_END | This specification | + +-------+-----------------+--------------------+ + + Additional NORM Stream Control Code value assignment requests are + granted on a "Specification Required" basis as defined by IANA + Guidelines [RFC5226]. The full 16-bit space outside of the value + assigned in this specification are available for future assignment. + In addition to describing the control code's expected interpretation, + such specifications MUST include a description of protocol actions to + be taken when the control code is encountered by a protocol + implementation not supporting that specific option. + +8.1.3. NORM_CMD Message Sub-Types + + This document defines a registry for NORM_CMD message sub-types named + "NORM Command Message Sub-types". + + The NORM_CMD message "sub-type" field is an 8-bit value with valid + values in the range of 1-255. Note the value 0 is reserved to + indicate an invalid NORM_CMD message sub-type. The current + specification defines a number of NORM_CMD message sub-types senders + can use to signal the receivers in various aspects of NORM protocol + operation. This specification registers the following NORM_CMD + Message Sub-types: + + + + + + + + + + +Adamson, et al. Standards Track [Page 88] + +RFC 5740 NORM Protocol November 2009 + + + +-------+-----------------------+--------------------+ + | Value | Name | Reference | + +-------+-----------------------+--------------------+ + | 0 | reserved | This specification | + | 1 | NORM_CMD(FLUSH) | This specification | + | 2 | NORM_CMD(EOT) | This specification | + | 3 | NORM_CMD(SQUELCH) | This specification | + | 4 | NORM_CMD(CC) | This specification | + | 5 | NORM_CMD(REPAIR_ADV) | This specification | + | 6 | NORM_CMD(ACK_REQ) | This specification | + | 7 | NORM_CMD(APPLICATION) | This specification | + +-------+-----------------------+--------------------+ + + Future specifications extending NORM MAY define additional NORM_CMD + messages to enhance protocol functionality. NORM_CMD message sub- + type value assignment requests are granted on a "Specification + Required" basis as defined by IANA Guidelines [RFC5226]. In addition + to describing the command sub-type's expected interpretation, + specifications MUST include a description of protocol actions to be + taken when the command is encountered by a protocol implementation + not supporting that specific option. + + This specification already defines an "application-defined" NORM_CMD + message sub-type for use at the discretion of individual applications + using NORM for transport. These "application-defined" commands are + suitable for many application-specific purposes and do not involve + standards action. In any case, such additional messages SHALL be + subject to the same congestion control constraints as the existing + NORM sender message set. + +9. Suggested Use + + The present NORM protocol is seen as a useful tool for the reliable + data transfer over generic IP multicast services. It is not the + intention of the authors to suggest it is suitable for supporting all + envisioned multicast reliability requirements. NORM provides a + simple and flexible framework for multicast applications with a + degree of concern for network traffic implosion and protocol overhead + efficiency. NORM-like protocols have been successfully demonstrated + within the MBone for bulk data dissemination applications, including + weather satellite compressed imagery updates servicing a large group + of receivers and a generic web content reliable "push" application. + + In addition, this framework approach has some design features making + it attractive for bulk transfer in asymmetric and wireless + internetwork applications. NORM is capable of successfully operating + independent of network structure and in environments with high packet + loss, delay, and out-of-order delivery. Hybrid proactive/reactive + + + +Adamson, et al. Standards Track [Page 89] + +RFC 5740 NORM Protocol November 2009 + + + FEC-based repairing improve protocol performance in some multicast + scenarios. A sender-only repair approach often makes additional + engineering sense in asymmetric networks. NORM's unicast feedback + capability is suitable for use in asymmetric networks or in networks + where only unidirectional multicast routing/delivery service exists. + Asymmetric architectures supporting multicast delivery are likely to + make up an important portion of the future Internet structure (e.g., + direct broadcast satellite (DBS) or cable and public-switched + telephone network (PSTN) hybrids, etc.) and efficient, reliable bulk + data transfer will be an important capability for servicing large + groups of subscribed receivers. + +10. Changes from RFC 3940 + + This section lists the changes between the Experimental version of + this specification, RFC 3940, and this version: + + 1. Removal of the NORM_FLAG_MSG_START for NORM_OBJECT_STREAM, + replacing it with the "payload_msg_start" field in the FEC- + encoded preamble of the NORM_OBJECT_STREAM NORM_DATA payload. + + 2. Definition of IANA registry for header extension and other + assignments. + + 3. Removal of file blocking scheme description now specified in the + FEC Building Block document [RFC5052]. + + 4. Removal of restriction of NORM receiver feedback message rate to + local NORM sender rate (this caused congestion control failures + in high speed operation. The extremely low feedback rate of the + NORM protocol as compared to TCP avoids any resultant impact to + the network as shown in [Mdpcc].) + + 5. Correction of errors in some message format descriptions. + + 6. Correction of inconsistency in specification of the inactivity + timeout. + + 7. Addition of IPsec secure mode description with IPsec + requirements. + + 8. Addition of the EXT_AUTH header extension definition. + + 9. Clarification of interpretation of "Source Block Length" when FEC + codes are arbitrarily shortened by the sender. + + + + + + +Adamson, et al. Standards Track [Page 90] + +RFC 5740 NORM Protocol November 2009 + + +11. Acknowledgments + + (and these are not Negative) + + The authors would like to thank Rick Jones, Vincent Roca, Rod Walsh, + Toni Paila, Michael Luby, and Joerg Widmer for their valuable input + and comments on this document. The authors would also like to thank + the RMT working group chairs, Roger Kermode and Lorenzo Vicisano, for + their support in development of this specification, and Sally Floyd + for her early input into this document. + +12. References + +12.1. Normative References + + [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. + + [RFC4301] Kent, S. and K. Seo, "Security Architecture for the + Internet Protocol", RFC 4301, December 2005. + + [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", + RFC 4303, December 2005. + + [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast + for IP", RFC 4607, August 2006. + + [RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast + Congestion Control (TFMCC): Protocol Specification", + RFC 4654, August 2006. + + [RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward + Error Correction (FEC) Building Block", RFC 5052, + August 2007. + + [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for + Writing an IANA Considerations Section in RFCs", + BCP 26, RFC 5226, May 2008. + + [RFC5401] Adamson, B., Bormann, C., Handley, M., and J. + Macker, "Multicast Negative-Acknowledgment (NACK) + Building Blocks", RFC 5401, November 2008. + + + + + + +Adamson, et al. Standards Track [Page 91] + +RFC 5740 NORM Protocol November 2009 + + +12.2. Informative References + + [FecHybrid] Gossink, D. and J. Macker, "Reliable Multicast and + Integrated Parity Retransmission with Channel + Estimation", IEEE GLOBECOMM, 1998. + + [McastFeedback] Nonnenmacher, J. and E. Biersack, "Optimal Multicast + Feedback", IEEE INFOCOM, p. 964, March/April 1998. + + [MdpToolkit] Macker, J. and B. Adamson, "The Multicast + Dissemination Protocol (MDP) Toolkit", Proc. + IEEE MILCOM, October 1999. + + [Mdpcc] Adamson, B. and J. Macker, "A TCP-Friendly, Rate- + based Mechanism for NACK-Oriented Reliable Multicast + Congestion Control", Proc. IEEE GLOBECOMM, + November 2001. + + [NormFeedback] Adamson, B. and J. Macker, "Quantitative Prediction + of NACK-Oriented Reliable Multicast (NORM) + Feedback", IEEE MILCOM, October 2002. + + [PgmccPaper] Rizzo, L., "pgmcc: A TCP-Friendly Single-Rate + Multicast Congestion Control Scheme", ACM SIGCOMM, + August 2000. + + [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. + + [RFC3269] Kermode, R. and L. Vicisano, "Author Guidelines for + Reliable Multicast Transport (RMT) Building Blocks + and Protocol Instantiation documents", RFC 3269, + April 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. + + + +Adamson, et al. Standards Track [Page 92] + +RFC 5740 NORM Protocol November 2009 + + + [RFC3547] Baugher, M., Weis, B., Hardjono, T., and H. Harney, + "The Group Domain of Interpretation", RFC 3547, + July 2003. + + [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. + Jacobson, "RTP: A Transport Protocol for Real-Time + Applications", STD 64, RFC 3550, July 2003. + + [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., + and K. Norrman, "The Secure Real-time Transport + Protocol (SRTP)", RFC 3711, March 2004. + + [RFC3830] Arkko, J., Carrara, E., Lindholm, F., Naslund, M., + and K. Norrman, "MIKEY: Multimedia Internet KEYing", + RFC 3830, August 2004. + + [RFC3940] Adamson, B., Bormann, C., Handley, M., and J. + Macker, "Negative-acknowledgment (NACK)-Oriented + Reliable Multicast (NORM) Protocol", RFC 3940, + November 2004. + + [RFC4535] Harney, H., Meth, U., Colegrove, A., and G. Gross, + "GSAKMP: Group Secure Association Key Management + Protocol", RFC 4535, June 2006. + + [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: + Session Description Protocol", RFC 4566, July 2006. + + [RFC5445] Watson, M., "Basic Forward Error Correction (FEC) + Schemes", RFC 5445, March 2009. + + [RmComparison] Pingali, S., Towsley, D., and J. Kurose, "A + Comparison of Sender-Initiated and Receiver- + Initiated Reliable Multicast Protocols", Proc. + INFOCOMM, San Francisco CA, October 1993. + + [TcpModel] Padhye, J., Firoiu, V., Towsley, D., and J. Kurose, + "Modeling TCP Throughput: A Simple Model and its + Empirical Validation", ACM SIGCOMM, 1998. + + [TfmccPaper] Widmer, J. and M. Handley, "Extending Equation-Based + Congestion Control to Multicast Applications", + ACM SIGCOMM, August 2001. + + + + + + + + +Adamson, et al. Standards Track [Page 93] + +RFC 5740 NORM Protocol November 2009 + + +Authors' Addresses + + Brian Adamson + Naval Research Laboratory + Washington, DC 20375 + USA + + EMail: adamson@itd.nrl.navy.mil + + + Carsten Bormann + Universitaet Bremen TZI + Postfach 330440 + D-28334 Bremen + Germany + + EMail: cabo@tzi.org + + + Mark Handley + University College London + Gower Street + London WC1E 6BT + UK + + EMail: M.Handley@cs.ucl.ac.uk + + + Joe Macker + Naval Research Laboratory + Washington, DC 20375 + USA + + EMail: macker@itd.nrl.navy.mil + + + + + + + + + + + + + + + + + +Adamson, et al. Standards Track [Page 94] + + |