summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3940.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3940.txt')
-rw-r--r--doc/rfc/rfc3940.txt4483
1 files changed, 4483 insertions, 0 deletions
diff --git a/doc/rfc/rfc3940.txt b/doc/rfc/rfc3940.txt
new file mode 100644
index 0000000..19827fa
--- /dev/null
+++ b/doc/rfc/rfc3940.txt
@@ -0,0 +1,4483 @@
+
+
+
+
+
+
+Network Working Group B. Adamson
+Request for Comments: 3940 NRL
+Category: Experimental C. Bormann
+ Universitaet Bremen TZI
+ M. Handley
+ UCL
+ J. Macker
+ NRL
+ November 2004
+
+
+ Negative-acknowledgment (NACK)-Oriented
+ Reliable Multicast (NORM) Protocol
+
+Status of this Memo
+
+ This memo defines an Experimental Protocol for the Internet
+ community. It does not specify an Internet standard of any kind.
+ Discussion and suggestions for improvement are requested.
+ Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2004).
+
+Abstract
+
+ This document describes the messages and procedures of the Negative-
+ acknowledgment (NACK) Oriented Reliable Multicast (NORM) protocol.
+ This protocol is designed to 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 repair and other IETF
+ reliable multicast transport (RMT) building blocks in its design.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 1]
+
+RFC 3940 NORM Protocol November 2004
+
+
+Table of Contents
+
+ 1. Introduction and Applicability. . . . . . . . . . . . . . . . 3
+ 1.1. NORM Delivery Service Model. . . . . . . . . . . . . . . 4
+ 1.2. NORM Scalability . . . . . . . . . . . . . . . . . . . . 6
+ 1.3. Environmental Requirements and Considerations. . . . . . 7
+ 2. Architecture Definition . . . . . . . . . . . . . . . . . . . 7
+ 2.1. Protocol Operation Overview. . . . . . . . . . . . . . . 9
+ 2.2. Protocol Building Blocks . . . . . . . . . . . . . . . . 10
+ 2.3. Design Tradeoffs . . . . . . . . . . . . . . . . . . . . 11
+ 3. Conformance Statement . . . . . . . . . . . . . . . . . . . . 12
+ 4. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 13
+ 4.1. NORM Common Message Header and Extensions. . . . . . . . 14
+ 4.2. Sender Messages. . . . . . . . . . . . . . . . . . . . . 16
+ 4.2.1. NORM_DATA Message . . . . . . . . . . . . . . . . 16
+ 4.2.2. NORM_INFO Message . . . . . . . . . . . . . . . . 24
+ 4.2.3. NORM_CMD Messages . . . . . . . . . . . . . . . . 26
+ 4.3. Receiver Messages. . . . . . . . . . . . . . . . . . . . 43
+ 4.3.1. NORM_NACK Message . . . . . . . . . . . . . . . . 43
+ 4.3.2. NORM_ACK Message. . . . . . . . . . . . . . . . . 50
+ 4.4. General Purpose Messages . . . . . . . . . . . . . . . . 52
+ 4.4.1. NORM_REPORT Message . . . . . . . . . . . . . . . 52
+ 5. Detailed Protocol Operation . . . . . . . . . . . . . . . . . 52
+ 5.1. Sender Initialization and Transmission . . . . . . . . . 54
+ 5.1.1. Object Segmentation Algorithm . . . . . . . . . . 55
+ 5.2. Receiver Initialization and Reception. . . . . . . . . . 57
+ 5.3. Receiver NACK Procedure. . . . . . . . . . . . . . . . . 57
+ 5.4. Sender NACK Processing and Response. . . . . . . . . . . 59
+ 5.4.1. Sender Repair State Aggregation . . . . . . . . . 60
+ 5.4.2. Sender FEC Repair Transmission Strategy . . . . . 61
+ 5.4.3. Sender NORM_CMD(SQUELCH) Generation . . . . . . . 62
+ 5.4.4. Sender NORM_CMD(REPAIR_ADV) Generation. . . . . . 62
+ 5.5. Additional Protocol Mechanisms . . . . . . . . . . . . . 63
+ 5.5.1. Greatest Round-trip Time Collection . . . . . . . 63
+ 5.5.2. NORM Congestion Control Operation . . . . . . . . 64
+ 5.5.3. NORM Positive Acknowledgment Procedure. . . . . . 72
+ 5.5.4. Group Size Estimate . . . . . . . . . . . . . . . 74
+ 6. Security Considerations . . . . . . . . . . . . . . . . . . . 75
+ 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 75
+ 8. Suggested Use . . . . . . . . . . . . . . . . . . . . . . . . 75
+ 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 76
+ 10. References. . . . . . . . . . . . . . . . . . . . . . . . . . 76
+ 10.1. Normative References. . . . . . . . . . . . . . . . . . 76
+ 10.2. Informative References. . . . . . . . . . . . . . . . . 77
+ 11. Authors' Addresses. . . . . . . . . . . . . . . . . . . . . . 79
+ Full Copyright Statement. . . . . . . . . . . . . . . . . . . 80
+
+
+
+
+
+Adamson, et al. Experimental [Page 2]
+
+RFC 3940 NORM Protocol November 2004
+
+
+1. Introduction and Applicability
+
+ The Negative-acknowledgment (NACK) Oriented Reliable Multicast (NORM)
+ protocol is designed to provide reliable transport of data from one
+ or more sender(s) 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 designed to be self-adapting to a wide
+ range of dynamic network conditions with little or no pre-
+ configuration. The protocol is purposely designed to be tolerant of
+ inaccurate timing estimations or lossy conditions that may occur in
+ many networks including mobile and wireless. The protocol is also
+ designed to exhibit convergence and efficient operation even in
+ situations of heavy packet loss and large queuing or transmission
+ delays.
+
+ This document is a product of the IETF RMT WG and follows the
+ guidelines provided in RFC 3269 [1]. 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 BCP 14, RFC 2119 [2].
+
+Statement of Intent
+
+ This memo contains part of the definitions necessary to fully specify
+ a Reliable Multicast Transport protocol in accordance with RFC 2357.
+ As per RFC 2357, the use of any reliable multicast protocol in the
+ Internet requires an adequate congestion control scheme.
+
+ While waiting for such a scheme to be available, or for an existing
+ scheme to be proven adequate, the Reliable Multicast Transport
+ working group (RMT) publishes this Request for Comments in the
+ "Experimental" category.
+
+ It is the intent of RMT to re-submit this specification as an IETF
+ Proposed Standard as soon as the above condition is met.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 3]
+
+RFC 3940 NORM Protocol November 2004
+
+
+1.1. NORM 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 that has been chosen via means outside
+ the context of the given NormSession. Other IETF data format and
+ protocol standards exist that may be applied to describe and convey
+ the required "a priori" information for a specific NormSession (e.g.,
+ Session Description Protocol (SDP) [7], Session Announcement Protocol
+ (SAP) [8], 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
+ independent of one another and receivers will maintain state as
+ necessary for each sender. However, in future versions of NORM, it
+ is possible that some aspects of protocol operation (e.g., round-trip
+ time collection) may 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 should be
+ allocated for received content (i.e., memory or file storage). Other
+ than that 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
+
+
+
+Adamson, et al. Experimental [Page 4]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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
+ designed to be 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 in its message headers. Note
+ the NORM_INFO out-of-band data mechanism could be leveraged by the
+ application for this purpose if desired, or identification could
+ 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. Each sender
+ maintains its NormTransportId assignments independently so that
+ individual NormObjects may be uniquely identified during transport
+ with the concatenation of the sender session-unique identifier
+ (NormNodeId) and the assigned NormTransportId. The NormTransportIds
+ are assigned from a large, but fixed, numeric space in increasing
+ order and may be reassigned during long-lived sessions. The NORM
+ protocol provides mechanisms so that the sender application may
+ terminate transmission of data content and inform the group of this
+ in an efficient manner. Other similar protocol control mechanisms
+ (e.g., session termination, receiver synchronization, etc.) are
+ specified so that reliable multicast application variants may
+ construct different, complete bulk transfer communication models to
+ meet their goals.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 5]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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.2. NORM Scalability
+
+ Group communication scalability requirements lead to adaptation of
+ negative acknowledgment (NACK) based protocol schemes when feedback
+ for reliability is required [9]. 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 [10]. FEC-based repair can be used to
+ greatly reduce the quantity of reliable multicast repair requests and
+ repair transmissions [11] 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 [12]. NORM dynamically measures the
+ group's roundtrip 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 "advertises" the feedback state to the group to
+ facilitate feedback suppression. In typical Internet environments,
+ it is expected that 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 [13].
+ 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
+ that NORM may scale to larger group sizes. With respect to computer
+ resource usage, the NORM protocol does _not_ require that state be
+ kept on all receivers in the group. NORM senders maintain state only
+ for receivers providing explicit congestion control feedback. NORM
+ receivers must maintain state for each active sender. This may
+ constrain the number of simultaneous senders in some uses of NORM.
+
+
+
+Adamson, et al. Experimental [Page 6]
+
+RFC 3940 NORM Protocol November 2004
+
+
+1.3. Environmental Requirements and Considerations
+
+ All of the environmental requirements and considerations that apply
+ to the RMT NORM Building Block [4] and the RMT FEC Building Block [5]
+ 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 RFC 1112 [3], but SHALL also be capable of
+ scalable operation in asymmetric topologies such as Source Specific
+ Multicast (SSM) [14] where there may only be unicast routing service
+ from the receivers to the sender(s).
+
+ NORM is compatible with IPv4 and IPv6. Additionally, NORM may be
+ used with networks employing Network Address Translation (NAT)
+ providing 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 possible multiple
+ senders and to distinguish feedback information from different
+ receivers. There are two reserved NormNodeId values. A value of
+ 0x00000000 is considered an invalid NormNodeId value and a value of
+ 0xffffffff is a "wildcard" NormNodeId. 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.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 7]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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
+ provide by TCP for unicast data transport. The format of the stream
+ content is application-defined and may 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, an 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 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 must receive a sufficient number of symbols to reconstruct
+ (via FEC decoding) the original user data for the given block. In
+ this document, the terms "symbol" and "segment" are used
+ interchangeably.
+
+ Transmitted NormObjects are temporarily yet uniquely identified
+ within the NormSession context using the given sender's NormNodeId,
+ NormInstanceId, and a temporary NormObjectTransportId. Depending
+ upon the implementation, individual NORM senders may manage their
+ NormInstanceIds independently, or a common NormInstanceId may be
+ agreed upon for all participating nodes within a session if needed as
+ a session identifier. NORM NormObjectTransportId 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
+
+
+
+Adamson, et al. Experimental [Page 8]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ a long-lived session, the NormObjectTransportId field can wrap and
+ previously-used identifiers may be re-used. Note that globally
+ unique identification of transported data content is not provided by
+ NORM and, if required, must be managed by the NORM application. The
+ individual segments or symbols of the NormObject are further
+ identified with FEC payload identifiers which 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 optionally
+ 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 option may be sensible for certain
+ network conditions and can allow for robust, asymmetric multicast
+ (e.g., unidirectional routing, satellite, cable) [15] 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. NORM_INFO may
+ 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
+ certain protocol operations such as congestion control, end-of-
+ transmission flushing, round trip time 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.
+ These procedures are: single, best effort unreliable transmission of
+ the command; repeated redundant transmissions of the command; and
+
+
+
+Adamson, et al. Experimental [Page 9]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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.).
+
+ 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
+ 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 available for use. All sender and receiver 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 may be 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.
+
+2.2. Protocol Building Blocks
+
+ The operation of the NORM protocol is based primarily upon the
+ concepts presented in the Nack-Oriented Reliable Multicast (NORM)
+ Building Block document [4]. This includes the basic NORM
+ architecture and the data transmission, repair, and feedback
+ strategies discussed in that document. Additional reliable multicast
+ building blocks are applied in creating the full NORM protocol
+ instantiation [16]. NORM also makes use of Forward Error Correction
+ encoding techniques for repair messaging and optional transmission
+ robustness as described in [10]. NORM uses the FEC Payload ID as
+
+
+
+Adamson, et al. Experimental [Page 10]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ specified by the FEC Building Block Document [5]. Additionally, for
+ congestion control, this document includes a baseline congestion
+ control mechanism (NORM-CC) based on the TCP-Friendly Multicast
+ Congestion Control (TFMCC) scheme described in [19].
+
+2.3. Design Tradeoffs
+
+ While the various features of NORM are designed to 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 tradeoffs involved
+ in reliable multicast transport design and this requires 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
+ applications. NORM protocol implementations SHOULD be designed to
+ 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 tradeoffs 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.
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 11]
+
+RFC 3940 NORM Protocol November 2004
+
+
+3. Conformance Statement
+
+ This Protocol Instantiation document, in conjunction with the RMT
+ Building Block documents of [4] and [5], completely specifies a
+ working reliable multicast transport protocol that conforms to the
+ requirements described in RFC 2357 [17].
+
+ This document specifies the following message types and mechanisms
+ which 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. |
++--------------------+-----------------------------------------------+
+|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 may be 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. |
++--------------------+-----------------------------------------------+
+
+
+
+
+Adamson, et al. Experimental [Page 12]
+
+RFC 3940 NORM Protocol November 2004
+
+
++--------------------+-----------------------------------------------+
+|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 which 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. |
++----------------------+----------------------------------------------+
+|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
+
+ As mentioned in Section 2.1, there are two primary classes of NORM
+ messages: 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. An auxiliary message type of
+
+
+
+Adamson, et al. Experimental [Page 13]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 designed to be compatible with the 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:
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 which may be 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
+
+
+
+
+
+Adamson, et al. Experimental [Page 14]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 header extensions that may be applied. The presence of
+ header extensions are 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 as a monotonically increasing number incremented with each
+ NORM message transmitted to a given destination address. A
+ "sequence" field number space SHOULD be maintained for messages sent
+ to the NormSession group address. This value can be monitored by
+ receiving nodes to detect packet losses in the transmission from a
+ sender and used in estimating raw packet loss for congestion control
+ purposes. Note that this value is NOT used in the NORM protocol to
+ detect missing reliable data content and does NOT identify the
+ application data or FEC payload that may be attached. With message
+ authentication, the "sequence" field may also be leveraged for
+ protection from message "replay" attacks, particularly of NORM_NACK
+ or other feedback messages. In this case, the receiver node should
+ maintain a monotonically increasing "sequence" field space for each
+ destination to which it transmits (this may be multiple destinations
+ when unicast feedback is used). The size of this field is intended
+ to be sufficient to allow detection of a reasonable range of packet
+ loss within the delay-bandwidth product of expected network
+ connections.
+
+ The "source_id" field is a 32-bit value identifying the node that
+ sent the message. A participant's NORM node identifier (NormNodeId)
+ can be set according to application needs but unique identifiers must
+ be assigned within a single NormSession. In some cases, use of the
+ host IP address or a hash of it can suffice, but alternative
+ methodologies for assignment and potential collision resolution of
+ node identifiers within a multicast session need to be considered.
+ For example, the "source identifier" mechanism defined in the Real-
+ Time Protocol (RTP) specification [18] may be applicable to use for
+ NORM node identifiers. At this point in time, the protocol makes no
+ assumptions about how these unique identifiers are actually assigned.
+
+ 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. These formats
+ are given here:
+
+
+
+Adamson, et al. Experimental [Page 15]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ NORM Fixed Length (32-bit) Header Extension Format
+
+ The "Header Extension Content" portion of these header extension
+ format is defined for each header extension type defined for NORM
+ messages. 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 expected to be 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 may
+ contain original or FEC-encoded application data content.
+
+ 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
+
+
+
+
+
+Adamson, et al. Experimental [Page 16]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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_reserved* | payload_len* |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | payload_offset* |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | payload_data* |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_DATA Message Format
+
+ *NOTE: The "payload_reserved", "payload_len" and "payload_offset"
+ fields are present only for objects of type NORM_OBJECT_STREAM. The
+ "payload_len" and "payload_offset" 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 algorithm described
+ in Section 5.1.1. The "payload_reserved" field is kept for
+ anticipated future NORM stream control functions. When systematic
+ FEC codes (e.g., "fec_id" = 129) are used, the "payload_len" and
+ "payload_offset" fields contain actual length and offset values for
+ the encapsulated application data segment for those NORM_DATA
+ messages containing source data symbols. In NORM_DATA messages that
+ contain parity information, these fields are not actual length or
+
+
+
+Adamson, et al. Experimental [Page 17]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ offset values, but instead are values computed from FEC encoding the
+ "payload_len" and "payload_offset" fields of the _source_ data
+ symbols of the corresponding applicable coding block.
+
+ 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 NORM_DATA "type" field is 2. The NORM_DATA _base_
+ "hdr_len" value is 4 (32-bit words) plus the size of the
+ "fec_payload_id" field. The "fec_payload_id" field size depends upon
+ the FEC encoding used for the referenced NormObject. The "fec_id"
+ field is used to indicate the FEC coding type. 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.
+
+ The "grtt" field contains a non-linear quantized representation of
+ the sender's current estimate of group round-trip time (GRTT) (this
+ is also referred to as R_max in [19]). This value is used to control
+ timing of the NACK repair process and other aspects of protocol
+ operation as described in this document. The algorithm for encoding
+ and decoding this field is described in the RMT NORM Building Block
+ document [4].
+
+ 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
+ which is multiplied by the sender GRTT to determine the maximum
+ backoff timeout. The "backoff" field informs the receiver set of the
+ sender's backoff factor parameter "Ksender". Recommended values and
+ their use 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. 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 base 10 exponent (order of magnitude).
+ For examples, 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
+
+
+
+Adamson, et al. Experimental [Page 18]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ (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" = 0x4) 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 regarding how the receiver should
+ 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 an 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_MSG_START | 0x40 | Marks the first segment of application |
+| | | messages embedded in |
+| | | NORM_OBJECT_STREAMs. |
++--------------------+-------+-----------------------------------------+
+
+ 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
+
+
+
+Adamson, et al. Experimental [Page 19]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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" (previously untransmitted) parity segments as
+ 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. Note that receivers may 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
+ should 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. When NORM_FLAG_STREAM is set, the
+ NORM_FLAG_MSG_START can be optionally used to mark the first data
+ segments of application-layer messages transported within the NORM
+ stream. This allows NORM receiver applications to "synchronize" with
+ NORM senders and to be able to properly interpret application layer
+ data when joining a NORM session already in progress. In practice,
+ the NORM implementation MAY set this flag for the segment transmitted
+ following an explicit "flush" of the stream by the application.
+
+ The "fec_id" field corresponds to the FEC Encoding Identifier
+ described in the FEC Building Block document [5]. 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 the NORM_OBJECT_STREAM
+ requires systematic FEC codes for most efficient performance.
+
+ 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 may
+ be repeated, but it is presumed that the 16-bit field size provides
+ an adequate enough 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
+
+
+
+Adamson, et al. Experimental [Page 20]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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.
+
+ 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 FEC Building Block document [5] and any subsequent
+ extensions of that document. As an example, the format of the
+ "fec_payload_id" format small block, systematic codes ("fec_id" =
+ 129) 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Small Block, Systematic Code ("fec_id" = 129) "fec_payload_id" Format
+
+ The FEC payload identifier "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 given by the IETF FEC Building Block document
+ [5]. 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" may 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. 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) referenced may be a user data or an 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
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 21]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 (as described in the
+ FEC Building Block document [5]) is required to properly receive and
+ decode NORM transport objects. This information MAY be provided as
+ out-of-band session information. However, in some cases, it may be
+ useful for the sender to include this information "in band" to
+ facilitate receiver operation with minimal preconfiguration. 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 exact format of the extension depends upon the FEC
+ code in use, but in general it SHOULD contain any required details on
+ the FEC code in use (e.g., FEC Instance ID, etc.) and the byte size
+ of the associated NormObject (For the NORM_OBJECT_STREAM type, this
+ size corresponds to the stream buffer size maintained by the NORM
+ sender). 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_length (msb) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | object_length (lsb) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | fec_instance_id | segment_size |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | fec_max_block_len | fec_num_parity |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ FEC Object Transmission Information Header Extension (EXT_FTI) for
+ Small Block Systematic Codes ("fec_id" = 129)
+
+ The header extension type "het" field value for this header extension
+ is 64. The header extension length "hel" depends upon the format of
+ the FTI for FEC code type identified by the "fec_id" field. In this
+ example (for "fec_id" = 129), the "hel" field value is 4.
+
+ The 48-bit "object_length" field indicates the total size 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 may 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_length"
+
+
+
+Adamson, et al. Experimental [Page 22]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ field is used by the sender to indicate the size of its stream buffer
+ to the receiver group. In turn, the receivers SHOULD use this
+ information to allocate a stream buffer for reception of
+ corresponding size.
+
+ The "fec_instance_id" corresponds to the "FEC Instance ID" described
+ in the FEC Building Block document [5]. In this case, the
+ "fec_instance_id" SHALL be 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 [5]. 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.
+
+ 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
+ symbols that can be generated for any source block" as described in
+ for FEC Object Transmission Information for Small Block Systematic
+ Codes in the FEC Building Block document [5]. For example, Reed-
+ Solomon codes may 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 "payload_reserved", "payload_len" and "payload_offset" fields are
+ present ONLY for transport objects of type NORM_OBJECT_STREAM. These
+ fields indicate the size and relative position (within the stream) of
+ the application content represented by the message payload. For
+ senders employing systematic FEC encoding, these fields contain
+ _actual_ length and offset values (in bytes) for the payload of
+ messages which contain original data source symbols. For NORM_DATA
+ messages containing calculated parity content, these fields will
+ actually contain values computed by FEC encoding of the "payload_len"
+ and "payload_offset" values of the NORM_DATA data segments of the
+ corresponding FEC coding block. Thus, the "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
+
+
+
+Adamson, et al. Experimental [Page 23]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ contribute to the value of the NORM_DATA "hdr_len" field. These
+ fields are NOT present when the "flags" portion of the NORM_DATA
+ message indicate the transport object if of type NORM_OBJECT_FILE or
+ NORM_OBJECT_DATA. In this case, the length and offset information
+ can be calculated from the "fec_payload_id" using the methodology
+ described in Section 5.1.1. Note that for long-lived streams, the
+ "payload_offset" field can 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
+ padding for data segments with 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 may possibly vary on a per-object basis. The
+ NormSegmentSize is expected to be configurable by the sender
+ application prior to session participation as needed for network
+ topology maximum transmission unit (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 algorithm described in
+ Section 5.1.1. For NORM_OBJECT_STREAM objects, the length and offset
+ is obtained from the segment's corresponding "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 may use the NORM_INFO
+ content to make a decision as whether to participate in reliable
+ reception of the associated object. Each NormObject can have an
+ independent unit of NORM_INFO associated with it. NORM_DATA messages
+ contain a flag to indicate the availability of NORM_INFO for a given
+ NormObject. NORM receivers may 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
+
+
+
+
+
+Adamson, et al. Experimental [Page 24]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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.
+
+ 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 "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 with 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, some NORM implementations may wish to apply the
+ EXT_FTI when used to NORM_INFO messages only and not to NORM_DATA
+ messages.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 25]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ The NORM_INFO "payload_data" field contains sender application-
+ defined content which 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
+ application-specific use. Some NORM_CMD types may have dynamic
+ content attached. Any attached content will be limited to maximum
+ length of the sender NormSegmentSize to retain the atomic nature of
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor | |
+ +-+-+-+-+-+-+-+-+ NORM_CMD Content +
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 "flavor" field.
+
+ The "instance_id", "grtt", "backoff", and "gsize" fields provide the
+ same information and serve the same purpose as with NORM_DATA and
+ NORM_INFO messages. The "flavor" field indicates the type of command
+ to follow. The remainder of the NORM_CMD message is dependent upon
+ the command type ("flavor"). NORM command flavors include:
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 26]
+
+RFC 3940 NORM Protocol November 2004
+
+
++----------------------+-------------+---------------------------------+
+| Command |Flavor Value | 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 subset |
+| | | of receivers. |
++----------------------+-------------+---------------------------------+
+|NORM_CMD(EOT) | 2 | Used to indicate sender |
+| | | permanent end-of-transmission. |
++----------------------+-------------+---------------------------------+
+|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 which may need to |
+| | | temporarily preempt 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 may indicate a temporary or permanent end of data
+ transmission, but the sender is still willing to respond to repair
+ requests. This command is repeated once per 2*GRTT to excite the
+
+
+
+Adamson, et al. Experimental [Page 27]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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. If a NORM_NACK message interrupts the flush process, the
+ sender will 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
+ any type are received from a sender. This inactivity timeout is
+ related to 2*GRTT*NORM_ROBUST_FACTOR and will be discussed more
+ later. With a sufficient NORM_ROBUST_FACTOR value, data content is
+ delivered with a high assurance of reliability. The penalty of a
+ large NORM_ROBUST_FACTOR value is potentially excess sender
+ NORM_CMD(FLUSH) transmissions and a longer timeout for receivers to
+ self-initiate the terminal NACK process.
+
+ For finite-size 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 may occur at any time, including in the
+ middle of an FEC coding block if systematic FEC codes are employed.
+ In this case, the sender will not yet be able to provide FEC parity
+ content as repair for the concurrent coding block and will be limited
+ to explicitly repairing stream 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 on-going series of intermittent, relatively small messaging
+ content 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. Experimental [Page 28]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 1 | fec_id | object_transport_id |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | fec_payload_id |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | acking_node_list (if applicable) |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_CMD(FLUSH) Message Format
+
+ 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
+ NACK content for the applicable "source_block_number" which does not
+ include any requests for parity-based repair. This allows NORM
+
+
+
+Adamson, et al. Experimental [Page 29]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ sender applications to "flush" an ongoing stream of transmission when
+ needed, even if in the middle of an 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. 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.
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 2 | reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 30]
+
+RFC 3940 NORM Protocol November 2004
+
+
+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 which 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 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, it is expected 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
+ 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:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 31]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 | sequence |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | source_id |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | instance_id | grtt |backoff| gsize |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 3 | fec_id | object_transport_id |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | fec_payload_id |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | invalid_object_list |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 which initiated the squelch transmission.
+
+ 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.
+
+ 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 is 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 may not be capable of listing the
+ entire set of invalid objects in the repair window. In this case,
+
+
+
+Adamson, et al. Experimental [Page 32]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ the sender SHALL ensure that the list begins with a NormObjectId that
+ is greater than or equal to the lowest ordinal invalid NormObjectId
+ from the NACK message(s) that prompted the NORM_CMD(SQUELCH)
+ generation. The NormObjectIds in the "invalid_object_list" MUST be
+ greater than the "object_transport_id" marking the beginning of the
+ sender's repair window. This insures 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" based 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) messages contains fields to enable sender-to-
+ receiver group greatest round-trip time (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 [19] is described in
+ Section 5.5.2 of this document. The NORM_CMD(CC) message is usually
+ transmitted as part of NORM-CC congestion control 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 private network with congestion
+ control operation disabled, the NORM_CMD(CC) message is then used for
+ GRTT measurement only and may optionally be sent less frequently than
+ with congestion control operation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 33]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 4 | reserved | cc_sequence |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | send_time_sec |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | send_time_usec |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | header extensions (if applicable) |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | cc_node_list (if applicable) |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_CMD(CC) Message Format
+
+ The NORM common message header and standard NORM_CMD fields serve
+ their usual purposes.
+
+ The "reserved" field is for potential future use and should be set to
+ ZERO in this version of the NORM protocol.
+
+ 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 [19]. 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")
+ 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
+
+
+
+Adamson, et al. Experimental [Page 34]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM-CC Rate Header Extension Format (EXT_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 exponent (order of magnitude) information in the least
+ significant portion. The 12-bit mantissa portion of the field is
+ scaled such that a floating point value of 0.0 corresponds to 0 and a
+ floating point value of 10.0 corresponds to 4096. Thus:
+
+ send_rate = (((int)(Value_mantissa * 4096.0 / 10.0 + 0.5)) << 4) |
+ Value_exponent;
+
+ For example, to represent a transmission rate of 256kbps (3.2e+04
+ bytes per second), the lower 4 bits of the 16-bit field contain a
+ value of 0x04 to represent the exponent while the upper 12 bits
+ contain a value of 0x51f 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.0 / 4096.0 *
+ power(10.0, (send_rate & x000f))
+
+
+
+Adamson, et al. Experimental [Page 35]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ Note the maximum transmission rate that can be represented by this
+ scheme is approximately 9.99e+15 bytes per second.
+
+ When this extension is present, a "cc_node_list" may be attached as
+ the payload of the NORM_CMD(CC) message. The presence of this header
+ extension also implies that NORM receivers should 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 may be
+ configurable 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Congestion Control Node List Item Format
+
+ The "cc_node_id" is the NormNodeId of the receiver which the item
+ represents.
+
+ The "cc_flags" field contains flags indicating the congestion control
+ status of the indicated receiver. The following flags are defined:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 36]
+
+RFC 3940 NORM Protocol November 2004
+
+
++------------------+-------+------------------------------------------+
+| 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. |
++------------------+-------+------------------------------------------+
+|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 NORM Building Block
+ document [4]. 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 "echoing" 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 [13].
+
+
+
+
+Adamson, et al. Experimental [Page 37]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 5 | flags | reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | header extensions (if applicable) |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | repair_adv_payload |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_CMD(REPAIR_ADV) Message Format
+
+ The "instance_id", "grtt", "backoff", "gsize", and "flavor" 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 provide 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 should limit their NACK response to generating NACK
+ content only up through the maximum ordinal transmission position
+ (objectId::fecPayloadId) included in the "repair_adv_content".
+
+ When congestion control operation is enabled, a header extension may
+ 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 may be used with 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) [20]) is used within a
+
+
+
+
+Adamson, et al. Experimental [Page 38]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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:
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | het = 3 | hel = 3 | cc_sequence |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | cc_flags | cc_rtt | cc_loss |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | cc_rate | cc_reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM-CC Feedback Header Extension (EXT_CC) Format
+
+ 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 may 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
+ should 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 should be set only when no feedback has been
+ received from non-CLR or non-PLR receivers. And the
+ NORM_FLAG_CC_LEAVE should 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.
+
+
+
+Adamson, et al. Experimental [Page 39]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 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" = 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 receivers 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
+
+
+
+Adamson, et al. Experimental [Page 40]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ positive acknowledgment process including transmission of the
+ NORM_CMD(ACK_REQ) messages and the receiver response (NORM_ACK) are
+ 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 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 6 | reserved | ack_type | ack_id |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | acking_node_list |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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. |
++---------------------+--------+---------------------------------+
+
+
+
+Adamson, et al. Experimental [Page 41]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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" 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 may 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 may 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 acknowledge
+ (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. 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
+ may include initiation of data transmission, other
+ NORM_CMD(APPLICATION) messages, or even application-defined,
+ positively-acknowledge commands from other NormSession participants.
+ The transmission of these commands will preempt data transmission
+ when they are scheduled and may be multiplexed with ongoing data
+ transmission. This type of robustly transmitted command allows NORM
+ applications to define a complete set of session control mechanisms
+
+
+
+Adamson, et al. Experimental [Page 42]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ with less state than the transfer of FEC encoded reliable content
+ requires while taking advantage of NORM transmission and round-trip
+ timing 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=3| hdr_len | sequence |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | source_id |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | instance_id | grtt |backoff| gsize |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | flavor = 7 | reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Application-Defined Content |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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.
+
+4.3. Receiver Messages
+
+ The NORM message types generated by participating receivers consist
+ of 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.
+
+
+
+
+Adamson, et al. Experimental [Page 43]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ The payload of NORM_NACK messages contains one or more repair
+ 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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 which contain
+ 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 differential from when the receiver received the NORM_CMD(CC)
+
+
+
+Adamson, et al. Experimental [Page 44]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ to when the NORM_NACK is transmitted to calculate the value in the
+ "grtt_response" field. This is the
+ "receive_to_response_differential" value used in the following
+ formula:
+
+ "grtt_response" = NORM_CMD(CC) "send_time" +
+ receive_to_response_differential
+
+ The receiver SHALL set the "grtt_response" to a ZERO value, to
+ indicate that it has not yet received a NORM_CMD(CC) message from the
+ indicated sender and that the sender should 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 receivers current
+ state with respect to congestion control operation. Note that
+ 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_content" 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 requires from the
+ sender in order 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 may be concatenated within the "nack_payload" field
+ of a NORM_NACK message. Note that 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+
+
+Adamson, et al. Experimental [Page 45]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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:
+
+ 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 that the
+ "repair_request_items" list consists of pairs of repair request items
+ that correspond to inclusive ranges of repair needs. And the
+ NORM_NACK_ERASURES "form" indicates that the repair request items are
+ to be treated individually and that 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 are required as repair. |
++------------------+-------+-----------------------------------------+
+|NORM_NACK_BLOCK | 0x02 | Indicates the listed block(s) or range |
+| | | of blocks in entirety are required as |
+| | | repair. |
++------------------+-------+-----------------------------------------+
+|NORM_NACK_INFO | 0x04 | Indicates that NORM_INFO is required as |
+| | | repair for the listed object(s). |
++------------------+-------+-----------------------------------------+
+|NORM_NACK_OBJECT | 0x08 | Indicates the listed object(s) or range |
+| | | of objects in entirety are required 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
+
+
+
+Adamson, et al. Experimental [Page 46]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ receiver. When the NORM_NACK_BLOCK flag is set, this indicates the
+ receiver is completely missing the indicated coding block(s) and
+ requires transmissions sufficient to repair the indicated block(s) in
+ their entirety. 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 may be set in
+ combination with the NORM_NACK_BLOCK or NORM_NACK_SEGMENT flags, or
+ may 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ 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.
+
+
+
+
+Adamson, et al. Experimental [Page 47]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 required 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 "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 may be useful for operation with
+ other FEC codes or for intermediate system purposes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 48]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ Example 1: NORM_NACK "nack_payload" for: Object 12, Coding Block 3,
+ Segments 2,5,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. Experimental [Page 49]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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. As
+ mentioned in the NORM_CMD(ACK_REQ) message description, the
+ acknowledgment type NORM_ACK_CC is provided for this purpose. The
+ generation of NORM_ACK(CC) messages for round-trip timing estimation
+ and congestion-control operation is described in Sections 5.5.1 and
+ 5.5.2, respectively. However, some multicast applications may
+ benefit from some limited form of positive acknowledgment for certain
+ functions. A simple, scalable positive acknowledgment scheme is
+ defined in Section 5.5.3 that can be leveraged by protocol
+ implementations when appropriate. The NORM_CMD(FLUSH) may 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
+
+
+
+Adamson, et al. Experimental [Page 50]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ application-defined "ack_type" values is provided for use at the NORM
+ application's discretion. Implementations making use of
+ application-defined positive acknowledgments may also make use 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) |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_ACK Message Format
+
+ The NORM common message header fields serve their usual purposes.
+
+ The "server_id", "instance_id", and "grtt_response" fields serve the
+ same purpose as the corresponding fields in NORM_NACK messages. And
+ header extensions may 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 that the sender can
+ verify that a NORM_ACK message received 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.
+
+
+
+
+
+Adamson, et al. Experimental [Page 51]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ The "ack_payload" format is a function of the "ack_type". The
+ 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 |
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ NORM_ACK_FLUSH "ack_payload" Format
+
+ 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 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 could 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 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
+ protocol operation is given here:
+
+
+
+
+
+Adamson, et al. Experimental [Page 52]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 1) The sender periodically transmits NORM_CMD(CC) messages as needed
+ to initialize and collect roundtrip timing and congestion control
+ feedback from the receiver set.
+
+ 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. 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. Note the receivers track
+ the sender's most recent objectId::fecPayloadId transmit position
+ and NACK _only_ for content ordinally prior to that 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. Previously untransmitted FEC parity
+ content 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 expected to be 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 require 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.
+
+
+
+Adamson, et al. Experimental [Page 53]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ While this overall concept is relatively simple, there are details to
+ each of these aspects that need to be addressed for successful,
+ 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
+ operating in the general Internet. Even if congestion control
+ operation is disabled at the sender, it may 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 may wish for the sender to also proceed
+ with data transmission immediately. In other cases, the sender may
+ wish to defer data transmission until it has received some feedback
+ or request from the receiver set indicating that 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, 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 that 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. The
+ segmentation algorithm is described in Section 5.1.1. 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
+
+
+
+Adamson, et al. Experimental [Page 54]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ for transmission or any pending repairs, it transmits a series of
+ NORM_CMD(FLUSH) messages at a rate of one per 2*GRTT. Receivers may
+ respond to these NORM_CMD(FLUSH) messages with additional repair
+ requests. 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 function
+ 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
+ that appropriate NACKs can be constructed to request repair of
+ missing data. NORM FEC coding blocks are comprised of multi-byte
+ symbols which are transmitted in the payload of NORM_DATA messages.
+ Each NORM_DATA message contains one source or encoding symbol and the
+ NormSegmentSize sender parameter defines the maximum symbol size in
+ bytes. The FEC encoding type and associated parameters govern the
+ source block size (number of source symbols per coding block). 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 Transmission Information for each object. The algorithm
+ given below is used to compute 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 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.
+
+ The NORM block segmentation algorithm is defined as follows. For a
+ transport object of a given length (L_obj) in bytes, a first number
+ of FEC source blocks (N_large) is delineated of a larger block size
+ (B_large), and a second number of source blocks (N_small) is
+ delineated of a smaller block size (B_small). Given the maximum FEC
+ source block size (B_max) and the sender's NormSegmentSize, the block
+ segmentation for a given NORM transport object is determined as
+ follows:
+
+
+
+Adamson, et al. Experimental [Page 55]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ Inputs:
+
+ B_max = Maximum source block length (i.e., maximum number of source
+ symbols per source block)
+
+ L_sym = Encoding symbol length in bytes (i.e., NormSegmentSize)
+
+ L_obj = Object length in bytes
+
+ Outputs:
+
+ N_total = The total number of source blocks into which the transport
+ object is partitioned.
+
+ N_large = Number of larger source blocks (first set of blocks)
+
+ B_large = Size (in encoding symbols) of the larger source blocks
+
+ N_small = Number of smaller source blocks (second set of blocks)
+
+ B_small = Size (in encoding symbols) of the smaller source blocks
+
+ L_final = Length (in bytes) of the last source symbol of the last
+ source block (All other symbols are of length L_sym).
+
+ Algorithm:
+
+ 1) The total number of source symbols in the transport object is
+ computed as: S_total = L_obj/L_sym [rounded up to the nearest
+ integer]
+
+ 2) The transport object is partitioned into N_total source blocks,
+ where: N_total = S_total/B_max [rounded up to the nearest
+ integer]
+
+ 3) The average length of a source block is computed as: B_ave =
+ S_total/N_total (this may be non-integer)
+
+ 4) The size of the first set of larger blocks is computed as:
+ B_large = B_ave [rounded up to the nearest integer] (Note it will
+ always be the case that B_large <= B_max)
+
+ 5) The size of the second set of smaller blocks is computed as:
+ B_small = B_ave [rounded down to the nearest integer] (Note if
+ B_ave is an integer B_small = B_large; otherwise B_small = B_large
+ - 1)
+
+
+
+
+
+Adamson, et al. Experimental [Page 56]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 6) The fractional part of B_ave is computed as: B_fraction = B_ave -
+ B_small
+
+ 7) The number of larger source blocks is computed as: N_large =
+ B_fraction * N_total (Note N_large is an integer in the range 0
+ through N_total - 1)
+
+ 8) The number of smaller source blocks is computed as: N_small =
+ N_total - N_large
+
+ 9) Each of the first N_large source blocks consists of B_large source
+ symbols. Each of the remaining N_small source blocks consists of
+ B_small source symbols. All symbols are L_sym bytes in length
+ except for the final source symbol of the final source block which
+ is of length (in bytes):
+ L_final = L_obj - (N_large*B_large + N_small*B_small - 1) * L_sym
+
+5.2. Receiver Initialization and Reception
+
+ The NORM protocol is designed such that receivers may join and leave
+ the group at will. However, some applications may be constrained
+ such that receivers need to be members of the group prior to start of
+ data transmission. 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 wish to 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" may be appropriate for different applications and/or
+ scenarios. For general purpose operation, 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 that the join policy constrain
+ receivers to start reliable reception at the current FEC coding block
+ for which non-repair content is received.
+
+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
+ procedure SHALL be initiated _only_ at FEC coding block boundaries,
+ NormObject boundaries, and upon receipt of a NORM_CMD(FLUSH) message.
+
+
+
+
+
+Adamson, et al. Experimental [Page 57]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ The NACKing procedure begins with a random backoff timeout. The
+ duration of the backoff timeout is chosen using the "RandomBackoff"
+ algorithm described in the NORM Building Block document [4] using
+ (Ksender*GRTTsender) for the "maxTime" parameter and the sender
+ advertised group size (GSIZEsender) as the "groupSize" parameter.
+ NORM senders provide values for GRTTsender, Ksender and GSIZEsender
+ via the "grtt", "backoff", and "gsize" fields of transmitted
+ messages. The GRTTsender value is determined by the sender based on
+ feedback it has received from the group while the Ksender and
+ GSIZEsender values may determined by application requirements and
+ expectations or ancillary information. The backoff factor "Ksender"
+ MUST be greater than one to provide for effective feedback
+ suppression. A value of K = 4 is RECOMMENDED for the Any Source
+ Multicast (ASM) model while a value of K = 6 is RECOMMENDED for
+ Single Source Multicast (SSM) operation.
+
+ Thus:
+
+ T_backoff = RandomBackoff(Ksender*GRTTsender, GSIZEsender)
+
+ 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 (Ksender-
+ 1)*GRTTsender. 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:
+
+ 1) The sender's current transmit position (in terms of
+ objectId::fecPayloadId) exceeds the earliest repair position of
+ the receiver.
+
+ 2) The repair state accumulated from NORM_NACK and
+ NORM_CMD(REPAIR_ADV) messages do 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 reinitiate 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 [4] is:
+
+
+
+Adamson, et al. Experimental [Page 58]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ T_rcvrHoldoff =(Ksender+2)*GRTTsender
+
+ The NORM_NACK message contains repair request content beginning with
+ 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 that 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 that the sender may have provided 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
+ required to satisfy its total erasure needs for the block. The goal
+ of this strategy is for the overall receiver set to request a lowest
+ 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
+ requires no 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 principle goal of the sender is to make forward progress in the
+ transmission of data its application has enqueued. However, the
+ sender must occasionally "rewind" its logical transmission point to
+
+
+
+Adamson, et al. Experimental [Page 59]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 [4], the period of time during which the sender
+ aggregates NORM_NACK messages is equal to:
+
+ T_sndrAggregate = (Ksender+1)*GRTT
+
+ where "Ksender" is the same backoff scaling value used by the
+ receivers, and "GRTT" is the sender's current estimate of the group's
+ greatest round-trip time.
+
+ 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
+ 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 [4], the value of
+ this sender "holdoff" period is:
+
+ T_sndrHoldoff = (1*GRTT)
+
+ If additional NORM_NACK messages are received during this sender
+ "holdoff" period, the sender will immediately incorporate these "late
+ messages" into its pending transmission state 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 begun (upon
+ arrival of a NACK) in concert with the pending repair and new data
+ transmission. Recall that 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
+
+
+
+Adamson, et al. Experimental [Page 60]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 the
+ 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. Only after exhausting its
+ supply of "fresh" (unsent) parity segments for a given coding block
+ should the sender resort to explicit transmission of the receiver
+ set's repair needs. In general, if a sufficiently powerful FEC code
+ is used, the need for explicit repair will be an exception, and the
+ fulfillment of reliable multicast can be accomplished quite
+ efficiently. However, the ability to resort to explicit repair
+ allows the protocol to be reliable 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 that limit new receivers from joining the reliable
+ transmission when only repair transmissions have been received.
+ Additionally, the sender SHOULD additionally 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
+
+
+
+Adamson, et al. Experimental [Page 61]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ packets to those portions of the routing tree still requiring repair
+ for a given coding block. Note the intermediate systems will be
+ required 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 additional
+ NORM_NACK suppression/aggregation as it conducts this repair state
+ accumulation for NORM repair cycles. The detail 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. 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. Lower ordinal invalid "object_transport_ids" should be
+ included only while the NORM_CMD(SQUELCH) payload is less than the
+ sender's NormSegmentSize parameter.
+
+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. 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 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 are
+ subject to the sender transmit rate limit and NormSegmentSize
+ limitation. When the NORM_CMD(REPAIR_ADV) message is of maximum
+ size, 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 may also
+ need to provide information so that dynamic congestion control
+ feedback can be suppressed as needed among receivers. This document
+ specifies the NORM-CC Feedback Header Extension that is applied for
+
+
+
+Adamson, et al. Experimental [Page 62]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 that help NORM
+ to adapt to network conditions and play fairly with other coexistent
+ protocols.
+
+5.5.1. Greatest Round-trip Time Collection
+
+ For NORM receivers to appropriately scale backoff timeouts and the
+ senders to use proper corresponding timeouts, the participants must
+ agree on a common timeout basis. Each NORM sender monitors the
+ round-trip time of active receivers and determines the group greatest
+ round-trip time (GRTT). The sender advertises this GRTT estimate in
+ every message it transmits so that receivers have this value
+ available for scaling their timers. To measure the current GRTT, the
+ sender periodically sends NORM_CMD(CC) messages that contain 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
+ weights and smoothes the values for a conservative estimate of the
+ GRTT. The algorithm and methodology are described in the NORM
+ Building Block document [4] in the section entitled "One-to-Many
+ Sender GRTT Measurement". A conservative estimate helps 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.
+
+
+
+
+Adamson, et al. Experimental [Page 63]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 that the NORM-CC Rate header extension may also be
+ used proactively solicit RTT feedback from the receiver group per
+ congestion control operation even though the sender may not be
+ conducting 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 described in
+ [19]. 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 (e.g., PGMCC [20]). 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 that the NORM protocol message set may
+ alternatively be used to support a window-based multicast congestion
+ control scheme such as PGMCC. The details of that 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 that correspond to the lowest result transmission rate is
+ identified as the "current limiting receiver" (CLR).
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 64]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ As described in [21], a steady-state sender transmission rate, to be
+ "friendly" with competing TCP flows can be calculated as:
+
+ S
+Rsender = --------------------------------------------------------------
+ tRTT * (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).
+
+tRTT = The RTT estimate of the current "current limiting receiver"
+ (CLR).
+
+ p = The loss event fraction of the CLR.
+
+ 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:
+
+ 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 that current
+ "worst path" in the group multicast topology.
+
+ The format of the NORM_CMD(CC) message is describe 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 may be determined administratively or possibly
+ algorithmically based on 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 details of PLR
+ selection are not discussed in this document.
+
+
+
+Adamson, et al. Experimental [Page 65]
+
+RFC 3940 NORM Protocol November 2004
+
+
+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 that the repeated
+ transmission of NORM_CMD(CC) messages may be initiated some time
+ before transmission of user data content at session startup. This
+ may 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 GRTT of 0.5 seconds is recommended when
+ no feedback has yet been received from the group.
+
+ 2) If a CLR has been identified (based on previous receiver
+ feedback), the interval is the RTT between the sender and CLR.
+
+ 3) Additionally, if the interval of nominal data message transmission
+ is greater than the GRTT or RTT_clr interval, the NORM_CMD(CC)
+ interval is set to this greater value. This ensures that 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 may 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 that the CLR
+ entry be the first in the list for implementation efficiency.
+ Additional entries in the list are used to provide sender-measured
+
+
+
+Adamson, et al. Experimental [Page 66]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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
+ may allow the sender to be more responsive to congestion control
+ dynamics. The length of the list may 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 additional entries in the list based on receiver
+ feedback are prioritized with following rules:
+
+ 1) Receivers that have not yet been provided RTT feedback get first
+ priority. Of these, those with the greatest loss fraction receive
+ precedence for list inclusion.
+
+ 2) Secondly, receivers that have previously been provided RTT are
+ included with receivers yielding the lowest calculated congestion
+ rate getting precedence.
+
+ There are "cc_flag" values in addition to NORM_FLAG_CC_CLR that are
+ used for other congestion control functions. The NORM_FLAG_CC_PLR
+ flag value is used to mark additional receivers from that the sender
+ would like to have immediate, non-suppressed feedback. These may be
+ receivers that the sender algorithmically identified as potential
+ future CLRs or that 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 that the NORM sender has been pre-configured
+ with a set of PLR nodes, feedback from those receivers may not yet
+ have been collected and thus the "cc_rtt" and "cc_rate" fields do not
+ contain valid values when this flag is not set.
+
+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 that are 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 that 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:
+
+
+
+
+Adamson, et al. Experimental [Page 67]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ T_backoff = RandomBackoff(K*GRTTsender, GSIZEsender)
+
+ The "RandomBackoff()" algorithm provides a truncated exponentially
+ distributed random number and is described in the NORM Building Block
+ document [4]. The same backoff factor K = Ksender MAY be used as
+ with NORM_NACK suppression. However, in cases where the application
+ purposefully specifies a very small Ksender backoff factor to
+ minimize the NACK repair process latency (trading off group size
+ scalability), it may still be desirable to maintain a larger backoff
+ factor for congestion control feedback, since there may often be a
+ larger volume of congestion control feedback than NACKs in many cases
+ and congestion control feedback latency may be tolerable where
+ reliable delivery latency is not. As previously noted, a backoff
+ factor value of K = 4 is generally recommended for ASM operation and
+ K = 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,
+
+ 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. 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) may wish to compete as
+ a receiver with no prior RTT measurement after some expiration
+ period.
+
+
+
+
+Adamson, et al. Experimental [Page 68]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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
+ timestamp from the most recently received NORM_CMD(CC) message and
+ the "cc_sequence" value from that command in the applicable 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 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*GRTT)
+
+ Thus, non-CLR receivers are constrained to providing explicit
+ congestion control feedback once per K*GRTT intervals. Note,
+ however, that 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.
+
+
+
+
+
+Adamson, et al. Experimental [Page 69]
+
+RFC 3940 NORM Protocol November 2004
+
+
+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 [19], 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.
+
+ The sender processes congestion control feedback from the receivers
+ and selects the CLR based on the lowest rate receiver. Receiver
+ rates are either determined 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 can use the "cc_rtt"
+ value provided in the NORM-CC Feedback header extension as the
+ receiver's previous RTT measurement (RTT_rcvrPrev) to smooth
+ according to:
+
+ 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 that
+ if a PLR is "promoted" to CLR status, the smoothed estimate can be
+ continued.
+
+ There are some additional periods besides steady-state operation that
+ need to be considered in NORM-CC operation. These periods are:
+
+ 1) during session startup,
+
+ 2) when no feedback is received from the CLR, and
+
+
+
+
+Adamson, et al. Experimental [Page 70]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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:
+
+ Rinitial = MIN(NormSegmentSize / GRTT, NormSegmentSize) bytes/second.
+
+ The rate is increased only when feedback is received from the
+ receiver set. The "slow start" phase proceeds until any receiver
+ provides feedback indicating that 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 that 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 that 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 rate. 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
+
+
+
+Adamson, et al. Experimental [Page 71]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ rate as the new CLR. Note this assumes that the sender does not have
+ explicit knowledge that 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.
+ 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 observer "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 that are 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), which is 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
+
+
+
+Adamson, et al. Experimental [Page 72]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 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 for receivers that should 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.
+
+ The ACK process is initiated by the sender that generates
+ NORM_CMD(FLUSH) or NORM_CMD(ACK_REQ) messages in periodic "rounds".
+ For NORM_ACK_FLUSH requests, the NORM_CMD(FLUSH) contain 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 which is
+ similarly "echoed" in response so that the sender may match the
+ response to the appropriate request.
+
+ In response to the NORM_CMD(ACK_REQ), the listed receivers randomly
+ spread NORM_ACK messages uniformly in time over a window of (1*GRTT).
+ These NORM_ACK messages are typically unicast to the sender. (Note
+ that 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 in that:
+
+ 1) Only a single NORM_CMD(ACK_REQ) message is generated once per
+ (2*GRTT), 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 may be
+ required 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
+
+
+
+Adamson, et al. Experimental [Page 73]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ (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 required 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 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 is used in scaling random backoff timer ranges.
+ The use of the group size estimate within the NORM protocol does not
+ require 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 possible that group size may be algorithmically approximated
+ from the volume of congestion control feedback messages which follow
+ the exponentially weighted random backoff. However, the
+ specification of such an algorithm is currently beyond the scope of
+ this document.
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 74]
+
+RFC 3940 NORM Protocol November 2004
+
+
+6. Security Considerations
+
+ The same security considerations that apply to the NORM, and FEC
+ Building Blocks also apply to the NORM protocol. In addition to
+ vulnerabilities that any IP and IP multicast protocol implementation
+ may be generally subject to, the NACK-based feedback of NORM may be
+ exploited by replay attacks which force the NORM sender to
+ unnecessarily transmit repair information. This MAY be addressed by
+ network layer IP security implementations that guard against this
+ potential security exploitation. It is RECOMMENDED that such IP
+ security mechanisms be used when available. Another possible
+ approach is for NORM senders to use the "sequence" field from the
+ NORM Common Message Header to detect replay attacks. This can be
+ accomplished if the NORM packets are cryptographically protected and
+ the sender is willing to maintain state on receivers which are
+ NACKing. A cache of receiver state may provide some protection
+ against replay attacks. Note that the "sequence" field of NORM
+ messages should be incremented with independent values for different
+ destinations (e.g., group-addressed versus unicast-addressed messages
+ versus "receiver" messages). Thus, the congestion control loss
+ estimation function of the "sequence" field can be preserved for
+ sender messages when receiver messages are unicast to the sender.
+ The NORM protocol is compatible with the use of the IP security
+ (IPsec) architecture described in [22]. It is important to note that
+ while NORM does leverage FEC-based repair for scalability, this does
+ not alone guarantee integrity of received data. Application-level
+ integrity-checking of data content is highly RECOMMENDED.
+
+7. IANA Considerations
+
+ No information in this specification is currently subject to IANA
+ registration. However, several Header Extensions are defined within
+ this document. If/when additional Header Extensions are developed,
+ the first RFC MUST establish an IANA registry for them, with a
+ "Specification Required" policy [6] and all Header Extensions,
+ including those in the present document, MUST be registered
+ thereafter. Additionally, building blocks components used by NORM
+ may introduce additional IANA considerations. 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 [5].
+
+8. Suggested Use
+
+ The present NORM protocol is seen as 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
+
+
+
+Adamson, et al. Experimental [Page 75]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ 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 misordering. Hybrid proactive/reactive 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 may
+ be 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.,
+ DBS/cable/PSTN hybrids) and efficient, reliable bulk data transfer
+ will be an important capability for servicing large groups of
+ subscribed receivers.
+
+9. 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.
+
+10. References
+
+10.1. Normative References
+
+ [1] Kermode, R. and L. Vicisano, "Author Guidelines for Reliable
+ Multicast Transport (RMT) Building Blocks and Protocol
+ Instantiation documents", RFC 3269, April 2002.
+
+ [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [3] Deering, S., "Host Extensions for IP Multicasting", STD 5, RFC
+ 1112, August 1989.
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 76]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ [4] Adamson, B., Bormann, C., Handley, M., and J. Macker,
+ "Negative-Acknowledgment (NACK)-Oriented Reliable Multicast
+ (NORM) Building Blocks", RFC 3941, November 2004.
+
+ [5] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, M., and
+ J. Crowcroft, "Forward Error Correction (FEC) Building Block",
+ RFC 3452, December 2002.
+
+ [6] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA
+ Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.
+
+10.2. Informative References
+
+ [7] Handley, M. and V. Jacobson, "SDP: Session Description
+ Protocol", RFC 2327, April 1998.
+
+ [8] Handley, M., Perkins, C., and E. Whelan, "Session Announcement
+ Protocol", RFC 2974, October 2000.
+
+ [9] S. Pingali, D. Towsley, J. Kurose, "A Comparison of Sender-
+ Initiated and Receiver-Initiated Reliable Multicast Protocols",
+ In Proc. INFOCOM, San Francisco CA, October 1993.
+
+ [10] 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.
+
+ [11] Macker, J. and B. Adamson, "The Multicast Dissemination Protocol
+ (MDP) Toolkit", Proc. IEEE MILCOM 99, October 1999.
+
+ [12] Nonnenmacher, J. and E. Biersack, "Optimal Multicast Feedback",
+ Proc. IEEE INFOCOMM, p. 964, March/April 1998.
+
+ [13] J. Macker, B. Adamson, "Quantitative Prediction of Nack Oriented
+ Reliable Multicast (NORM) Feedback", Proc. IEEE MILCOM 2002,
+ October 2002.
+
+ [14] H.W. Holbrook, "A Channel Model for Multicast", Ph.D.
+ Dissertation, Stanford University, Department of Computer
+ Science, Stanford, California, August 2001.
+
+ [15] D. Gossink, J. Macker, "Reliable Multicast and Integrated Parity
+ Retransmission with Channel Estimation", IEEE GLOBECOMM 98',
+ September 1998.
+
+ [16] 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.
+
+
+
+Adamson, et al. Experimental [Page 77]
+
+RFC 3940 NORM Protocol November 2004
+
+
+ [17] Mankin, A., Romanow, A., Bradner, S., and V. Paxson, "IETF
+ Criteria for Evaluating Reliable Multicast Transport and
+ Application Protocols", RFC 2357, June 1998.
+
+ [18] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson,
+ "RTP: A Transport Protocol for Real-Time Applications", STD 64,
+ RFC 3550, July 2003.
+
+ [19] J. Widmer and M. Handley, "Extending Equation-Based Congestion
+ Control to Multicast Applications", Proc ACM SIGCOMM 2001, San
+ Diego, August 2001.
+
+ [20] L. Rizzo, "pgmcc: A TCP-Friendly Single-Rate Multicast
+ Congestion Control Scheme", Proc ACM SIGCOMM 2000, Stockholm,
+ August 2000.
+
+ [21] J. Padhye, V. Firoiu, D. Towsley, and J. Kurose, "Modeling TCP
+ Throughput: A Simple Model and its Empirical Validation", Proc
+ ACM SIGCOMM 1998.
+
+ [22] Kent, S. and R. Atkinson, "Security Architecture for the
+ Internet Protocol", RFC 2401, November 1998.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 78]
+
+RFC 3940 NORM Protocol November 2004
+
+
+11. Authors' Addresses
+
+ Brian Adamson
+ Naval Research Laboratory
+ Washington, DC, USA, 20375
+
+ EMail: adamson@itd.nrl.navy.mil
+
+
+ Carsten Bormann
+ Universitaet Bremen TZI
+ Postfach 330440
+ D-28334 Bremen, Germany
+
+ EMail: cabo@tzi.org
+
+
+ Mark Handley
+ Department of Computer Science
+ University College London
+ Gower Street
+ London
+ WC1E 6BT
+ UK
+
+ EMail: M.Handley@cs.ucl.ac.uk
+
+
+ Joe Macker
+ Naval Research Laboratory
+ Washington, DC, USA, 20375
+
+ EMail: macker@itd.nrl.navy.mil
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 79]
+
+RFC 3940 NORM Protocol November 2004
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2004).
+
+ This document is subject to the rights, licenses and restrictions
+ contained in BCP 78, and except as set forth therein, the authors
+ retain all their rights.
+
+ This document and the information contained herein are provided on an
+ "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+ OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the IETF's procedures with respect to rights in IETF Documents can
+ be found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+Adamson, et al. Experimental [Page 80]
+