NACK-Oriented Reliable Multicast (NORM) is a transport layer Internet protocol designed to provide reliable transport in multicast groups in data networks. It is formally defined by the Internet Engineering Task Force (IETF) in Request for Comments (RFC) 5740, which was published in November 2009.
NORM operates on top of the User Datagram Protocol (UDP), and ensures reliable communication based upon a negative acknowledgement (NACK), selective Automatic Repeat Request (ARQ) mechanism, as opposed to the positive acknowledgement (ACK) approach that the standard Transmission Control Protocol (TCP) uses. In other words, receivers using NORM only send feedback when they do not receive a packet, as opposed to the TCP model where receivers regularly acknowledge packet receipt as part of it protocol operation. This allows NORM to support large-scale receiver groups.
To support further scalability, NORM also employs packet erasure coding using forward error correction (FEC) codes coupled with suppression of redundant NACK feedback from the receiver group. Additionally, NORM can be configured to operate with “silent receivers” relying upon its packet erasure coding for high assurance delivery, thus operating as a broadcast-only protocol. The FEC can be configured to be used either reactively (with NACKing receivers) or proactively (silent receivers), or in a hybrid manner that allows tradeoffs in latency and network overhead.
Along with supporting reliable transport, NORM also provides TCP-compatible congestion control as well as end-to-end flow control. Unlike TCP, which uses the ACK mechanism for congestion control and flow control, NORM uses separate mechanisms for each. This allows for a wide variety of configurations to meet different application data delivery needs.
NORM also supports additional signaling mechanisms to facilitate session control, application-controlled positive acknowledgement, and other functions towards building complete point-to-point and group network communications applications that are highly robust and efficient.
Although NORM was developed primarily to support multicast group communication, it also supports unicast (point-to-point) data transfers.
Background
In the TCP/IP network model, the transport layer of the network (Layer 4) is responsible for the reliable transport of data. The TCP protocol is the principal means of ensuring reliable unicast (point-to-point) transport. TCP does this through an ACK mechanism.
With the ACK mechanism, data packets are sequentially numbered, and the sender does not send a packet in a sequence until it receives an acknowledgement (ACK) from the receiver that the previous packet has been successfully received. If the sender does not receive an ACK after a specified time period, it resends the associated packet. The sender will continue doing this until it receives an ACK (although beyond a certain point the sender will assume the connection has been lost and stop the session). This is loosely analogous to a human listener nodding his or her head and saying "uh-huh" in a one-on-one conversation between persons. (TCP's sister protocol, UDP, does not do this. UDP simply sends data packets over the network in a best effort manner and assumes the packets are well-received.)
An early problem noted with TCP's ACK mechanism was it did not work well in large multicast group communications. In multicast group communications, data packets are transmitted to a group of receivers simultaneously. In large multicast groups, the use of ACKs can create “ACK implosions,” in which a large number of simultaneous ACKs can overwhelm the sender. This is loosely analogous to a large roomful of human listeners nodding their heads and saying "uh-huh" while a speaker is talking.
The Multicast Dissemination Protocol (MDP) was an initial attempt to ensure reliability and to address the problem of ACK implosions through the use of NACKs. MDP used selective negative acknowledgement (NACK) to support reliability. Additionally, MDP implemented probabilistic techniques to suppress redundant NACKs in the multicast group (and thereby avoid NACK implosions).
MDP also used packet-level forward error correction coding concepts as a repair mechanism. Encoded parity repair packets were generally sent in response to repair requests by receivers. In this way no additional protocol overhead was added above selective retransmission methods. Additionally, MDP allowed the protocol to be optionally configured to send proactive repair packets in the original data transmission block.