RFC 2887
The Reliable Multicast Design Space for Bulk Data Transfer
RFC 2887: The Reliable Multicast Design Space for Bulk Data Transfer ๐
Okay bestie, the title block first ๐ This one is RFC 2887, from the Network Working Group, filed as Informational in August 2000. The authors are M. Handley, S. Floyd (both from ACIRI), B. Whetten (Talarian), R. Kermode (Motorola), L. Vicisano (Cisco), and M. Luby (Digital Fountain, Inc.). It doesn't obsolete anything and doesn't update anything ๐ฆ
Status of this Memo โจ
This memo gives information to the Internet community. It is not an Internet standard of any kind, and it's free to share with anyone ๐ธ
Copyright Notice
Copyright (C) The Internet Society (2000). All Rights Reserved. ๐
Abstract
The design space for reliable multicast is huge, and people have come up with lots of solutions already ๐ฅ But application requirements narrow that giant space down to a much smaller solution space. This document walks through the design space and shows how an application's constraints change which solutions are possible ๐ง
1. Introduction ๐
Okay so "general purpose reliable multicast protocol" is kind of an oxymoron, ngl ๐ Different applications want different things from a reliable multicast protocol, and those needs limit the design space so much that two apps with different requirements often can't share one solution. That said, there are plenty of successful reliable multicast designs that do their special-purpose job really well โญ
In this document we look at the design space for reliable multicast protocols meant for bulk data transfer. "Bulk data transfer" should be read broadly. The main limits are that the data stream is continuous and long-lived, and those constraints are needed for the forms of congestion control we currently understand ๐ The point of this review is to collect an overview of the field and spell out the constraints that particular mechanisms bring with them. The goal is to guide the standardization process for protocols and protocol building blocks. To do that, we group potential solutions into a few loose categories. Real protocols might mix mechanisms from more than one of these clusters ๐ซถ
The biggest constraint on solutions comes from the need to scale to large receiver sets. For small receiver sets, the design space is a lot less restricted ๐ฆ
2. Application Constraints ๐
Application requirements for reliable multicast (RM) are as broad and varied as the apps themselves. Still, there's a set of requirements that really shapes how an RM protocol gets designed. A quick list includes:
- Does the application need to know that everyone received the data?
- Does the application need to constrain differences between receivers?
- Does the application need to scale to large numbers of receivers?
- Does the application need to be totally reliable?
- Does the application need ordered data?
- Does the application need to provide low-delay delivery?
- Does the application need to provide time-bounded delivery?
- Does the application need many interacting senders?
- Is the application data flow intermittent?
- Does the application need to work in the public Internet?
- Does the application need to work without a return path (e.g. satellite)?
- Does the application need to provide secure delivery?
When we're standardizing bulk data transfer protocols, we can rule out apps with multiple interacting senders and intermittent data flows ๐ It's not that these apps don't matter. It's just that we don't have effective congestion control for them yet ๐ญ
2.1. Did everyone receive the data? ๐
Lots of applications have a logically defined unit (or units) of data that needs to go to multiple clients. Think a file or a set of files, a software package, a stock quote or a package of stock quotes, an event notification, a set of slides, or a frame or block from a video. An application data unit (ADU) is a logically separable chunk of data that's useful to the application. Sometimes an ADU is small enough to fit in one packet (like an event notification or a stock quote). Other times an ADU is way bigger than a packet (like a software package) ๐ฆ
A protocol may optionally provide delivery confirmation to make sure delivery is reliable. That's a way for receivers to tell the sender when data has arrived. There are two types of confirmation: ADU-level and packet-level. ADU-level confirmation is useful at the application level. It tells the app how far along receivers are, and it helps decide when to stop sending packets about a particular ADU โจ Packet-level confirmation is useful at the transport level. It tells the transport layer when it can free the buffer space it was using to store packets that have been confirmed delivered ๐ง
Some apps have a strong need to confirm that every receiver got an ADU. If not, they need to find out which specific receivers failed to get the whole thing. Examples are apps where receivers pay for data, and reliable file-system replication. Other apps don't need that at all, like distributing free software ๐
If the application does need to know that every receiver got the ADU, then a positive acknowledgment must be received from every receiver. These acknowledgments can be aggregated, though. If the application needs to know exactly which receivers failed to get the ADU, that adds extra constraints on how acknowledgments can be aggregated ๐ค
It should be noted that different mechanisms can be used for ADU-level confirmation and packet-level confirmation in the same application. For example, an ADU-level confirmation mechanism that uses positive acknowledgments may sit on top of a packet-level NACK or FEC-based transport. This typically only makes sense when ADUs are a lot bigger than a single packet ๐ธ
2.2. Constraining differences ๐
Some apps need to keep differences between receivers under control, so that the data reception characteristics for all receivers fall within some range. A stock price feed is a good example. It's totally unacceptable for one receiver to get delivery that's way more delayed than everyone else's ๐ญ
This requirement is hard to satisfy without hurting performance. Solutions usually involve not sending more than a limited amount of new data until positive acknowledgments have come back from all the receivers. The catch is that this kind of solution doesn't handle network and end-system failures very well ๐
2.3. Receiver Set Scaling ๐ฆ
Plenty of RM apps don't need to scale to large numbers of receivers. For those apps, there are solutions available that wouldn't be an option for apps where scaling to big receiver sets is a must-have ๐
A protocol must achieve good throughput of application data units to receivers. That means most of the data delivered to receivers is actually useful for recovering the ADU they're trying to get. A protocol must also provide good congestion control, so the available network resources are shared fairly between all applications ๐ Receiver set scaling is one of the most important constraints for meeting these requirements, because it strictly limits which mechanisms can achieve them. Only mechanisms that scale efficiently to a large receiver population are left in the running. Lots of systems have used acknowledgement packets to reach these goals, but it's important to understand the strengths and limitations of the different ways of using them ๐ซถ
In a very small system, it may be fine to have receivers acknowledge every packet. This gives the sender the most information possible about reception conditions at all the receivers. That information can be used both to get good throughput and for congestion control ๐ฅ
For larger systems, these "flat ACK" schemes cause acknowledgement implosions at the sender ๐ People have tried to fix this by sending aggregate ACKs infrequently [RMWT98, BC94], but it's really hard to build effective congestion control into those protocols because the feedback is so sparse ๐
Using negative acknowledgments (NACKs) instead of ACKs shrinks the problem to a NACK implosion. Only receivers that are missing packets send NACKs. Since the sender really only needs to know that at least one receiver is missing data to get good throughput, various NACK suppression mechanisms can be applied ๐ธ
Another option besides NACKs is ACK aggregation. You arrange the receivers into a logical tree, so each leaf sends ACKs to its parent, which aggregates them and passes them up the tree. Tree-based protocols scale well, but forming the tree can be tricky ๐ณ
Other ACK topologies, like rings, are also possible. They're often harder to form and maintain than trees, though ๐ง Another strategy is to add mechanisms to routers so they can help achieve good throughput or lower the cost of getting it โจ
All of these solutions improve receiver set scaling, but every one of them has limits of some kind โญ One class of solutions scales to an infinite number of receivers by having no feedback channel whatsoever to achieve good throughput. These open-loop solutions take the initial data and encode it with an FEC-style mechanism. The encoded data then gets sent in a continuous stream. Receivers join the session and keep receiving packets until they have enough to decode the original data. At that point, they leave the session ๐ฆ
So yeah, the intended scale of the session limits the possible solutions. Every solution works for very small sessions, but as the intended receiver set grows, the range of solutions that can be deployed safely shrinks ๐
It should also be noted that hybrids of these mechanisms are possible. Using one mechanism at the packet level and a different (typically higher-overhead) solution at the ADU level may also scale reasonably if the ADUs are large compared to packets ๐
2.4. Total vs Semi-reliable ๐
okay so some apps need total reliability ๐ญ like, if even ONE piece of an application data unit goes missing, none of the rest of it is useful. File transfer is the classic example, bestie. a file with a hole in it is just a broken file ๐
But some apps are way more chill about it ๐ซถ audio broadcasting is the perfect example: if a few packets go missing, the audio gets a little worse, but it's still totally listenable โจ Those apps can sometimes get by with no extra reliability on top of native IP reliability, but honestly, having a semi-reliable multicast protocol is often super desirable ๐
2.5. Time-bounded Delivery ๐ฆ
Lots of apps just want data to reach the receivers as fast as possible ๐โโ๏ธ They don't have an absolute deadline for delivery. vibes only ๐ธ
But some apps have hard delivery constraints ๐ค If the data doesn't arrive at the receiver by a certain time, there is literally no point delivering it at all ๐ That time-boundedness can come from real-time constraints like audio or video streaming, or from new data superseding old data ๐ฅ In both cases, the app needs a much greater degree of control over precisely what it sends at which time, compared with apps like file transfer ๐
Time-bounded delivery usually also implies a semi-reliable protocol, but the converse does not necessarily hold ๐ง (iykyk: time-bounded usually comes with semi-reliable, but semi-reliable doesn't automatically mean time-bounded.)
3. Network Constraints ๐
The properties of the network the app is deployed in can themselves constrain the reliable multicast design space ๐บ๏ธ
3.1. Internet vs Intranet ๐ข
In principle the Internet and intranets are the same. In practice though, an intranet being under one administration might allow solutions that can't easily be done on the public Internet ๐ค So if the data is of very high value, it might be appropriate to enhance the routers to help a reliable multicast transport protocol ๐ On the public Internet, the extra expense of supporting this state in the routers is less likely to be acceptable ๐ธ
3.2. Return Path ๐ฌ
In principle, when feedback is required from receivers, it can be multicast or unicast. Multicast feedback has advantages, especially in NACK-based protocols where it's valuable for NACK suppression โจ However, it's not clear at this time whether all ISPs will allow all members of a session to send to that session ๐ฌ If multicast feedback isn't allowed, unicast feedback can almost always be substituted, although often at the expense of additional messages and mechanisms.
Some networks may not allow any form of feedback, though ๐ฐ๏ธ The main example is satellite broadcasts, where the back channel may be very narrow or even non-existent. For those networks the solution space is super constrained: only FEC-based encodings have any real chance of working ๐ซ If the receivers are direct satellite receivers, then no congestion control is needed, but it's dangerous to assume that, because a satellite hop can feed downstream networks โ ๏ธ So congestion control still needs to be considered for solutions that don't have a return path.
3.3. Network Assistance ๐ง
A reliable multicast protocol must involve mechanisms running in end hosts, and must involve routers forwarding multicast packets. However, under some circumstances it's possible to rely on some additional degree of assistance from network elements. Broadly speaking, we can cluster RM protocols into four classes depending on the degree of support they receive from other network elements ๐
- No Additional Support: The routers merely forward packets, and only the sender and receivers have any reliable multicast protocol state.
- Layered Approaches: Data is split across multiple multicast groups. Receivers join appropriate groups to receive only the traffic they require. This may in some cases require fast join or leave functionality from the routers, and may require more forwarding state in the routers.
- Server-based Approaches: Additional nodes are used to assist with data delivery or feedback aggregation. These additional nodes might not be normal senders or receivers, and may be present on the distribution or feedback tree only to provide assistance to the reliable multicast protocol. They would not otherwise receive the multicast traffic.
- Router-based Approaches: With router-based approaches, routers on the normal data distribution tree from the sender to the receivers assist in the delivery of data, or in feedback aggregation or suppression. As routers can directly influence multicast routing, they have more control over which traffic goes to which group members than server-based approaches do. However, routers don't normally have a large amount of spare memory or processing power, which restricts how much functionality can be placed in them. In addition, router code is normally more difficult to upgrade than application code, so router-based approaches need to be very general, as they are more difficult to deploy and to change ๐ซฃ
4. Good Throughput Mechanisms ๐
Two main concerns a RM protocol must address are congestion control and good throughput โจ Packet loss plays a major role with respect to both. The primary symptom of congestion in many networks is packet loss. The primary obstacle to overcome for good throughput is also packet loss. So measuring and reacting to packet loss is crucial for addressing both concerns ๐ RM solutions that address these concerns can be roughly categorized as using one or more of the following techniques:
- Data packet acknowledgment.
- Negative acknowledgment of missing data packets.
- Redundancy allowing not all packets to be received.
These techniques can themselves be usefully subdivided, so we can examine the parts of the requirement space where each mechanism can be deployed ๐งฉ In this section we focus on using these mechanisms for achieving good throughput, and in the next section we focus on using them for congestion control ๐
4.1. ACK-based Mechanisms ๐
The simplest ACK-based mechanism involves every receiver sending an ACK packet for every data packet it receives, and resending packets that are lost by any receiver. Such mechanisms are limited to very small receiver groups by the implosion of ACKs received at the sender, so for this reason they're impractical for most applications ๐ โโ๏ธ
Putting multiple ACKs into a single data packet [RMWT98] reduces the implosion problem by a constant amount, allowing slightly larger receiver groups ๐ฆ However, a limit is soon reached where feedback to the sender is too infrequent for sender-based congestion control mechanisms to work reliably.
Arranging the receivers into a ring [WKM94], where an "ACK-token" is passed around the ring, prevents the implosion problem for data ๐ However, ring creation and maintenance may itself be problematic. Also, if ring creation doesn't take network topology into account (which is difficult to achieve in practice), then the number of ACK packets crossing the network backbone for each data packet sent may increase O(n) with the number of receivers ๐
4.1.1. Tree-based ACK Mechanisms ๐ณ
Arranging the receivers into a tree [MWB+98, KCW98], where receivers generate ACKs to a parent node, which aggregates those ACKs to its parent in turn, is both more robust and more easily configured than a ring ๐ฅฐ The ACK-tree is typically only used for ACK-aggregation, and data packets are multicast from the sender to the receivers as normal. Trees are easier to construct than rings because more local information can be used in their construction. They can also be more fault tolerant than rings, because node failures only affect a subset of receivers, each of which can easily and locally decide to bypass its parent and report directly to the node one level higher in the tree. With good ACK-tree formation, tree-based ACK mechanisms have the potential to be one of the most scalable RM solutions ๐
To be simple to deploy, tree-based protocols must be self-organizing: the receivers must form the tree themselves, using local information in a scalable manner ๐ Such mechanisms are possible, but they aren't trivial. The main scaling limitations of tree-based protocols therefore come from the tree formation and maintenance mechanisms, rather than from the use of ACKs. Without such a scalable, automatic tree-formation mechanism, tree-based protocols must rely on manual configuration, which significantly limits their applicability (often to intranets) and, due to the complexity of configuration, their scalability ๐ตโ๐ซ
Orthogonal to tree formation is the issue of subtree retransmission ๐ With appropriate router mechanisms, or the use of multiple multicast groups, it's possible to let the intermediate tree nodes retransmit missing data to the nodes below them in the tree, rather than relying on the original sender to retransmit it. This relies on there being a good correlation, at the intermediate node, between the ACK tree and the actual data tree, as well as there being a mechanism to constrain the retransmission to the subtree. A good automatic tree formation mechanism combined with the use of administrative scoped multicast groups might provide such a solution. Without such tree formation mechanisms, subtree retransmission is difficult to deploy in large groups on the public Internet. This could also be solved by using transport-level router mechanisms to assist or perform retransmission, although existing router mechanisms [FLST98] support NACK-based rather than ACK-based protocols ๐ซ
Another important issue is the nature of the aggregation performed at interior nodes on the ACK-tree ๐ง Such nodes could:
- aggregate ACKs by sending a single ACK when all their children have ACKed,
- aggregate ACKs by listing all the children that have ACKed,
- send an aggregated ACK with a NACK-like exception list.
For data packets, option 1 is clearly more scalable and should be preferred ๐ However, if the sender needs to know exactly which receivers received the data, options 2 and 3 provide this information. Fortunately, there's usually no need to do this on a per-packet basis, but rather on a per-ADU basis ๐ Doing option 1 on a per-packet basis and option 3 on a per-ADU basis is the most scalable solution for applications that need this information, and it suffers virtually no disadvantage compared with the other solutions used on a per-packet basis ๐
4.2. NACK-based mechanisms โจ
okay so instead of sending an ACK for every data packet a receiver gets, receivers can send a negative acknowledgment (NACK) for every data packet they realize they didn't get ๐ and honestly this has some seriously iconic perks over ACK-based mechanisms ๐ :
- The sender no longer needs to know exactly how many receivers there are ๐ซถ which means the topology-building phase needed for ring- or tree-style ACK-based algorithms just... disappears ๐ง
- Fault-tolerance gets somewhat simpler because the receivers are the ones responsible for reliability ๐
- Sender state can be significantly reduced, because the sender doesn't have to keep track of the receivers' state ๐ธ
- Only a single NACK is needed from any receiver to flag a packet that's missing for any number of receivers. So NACK suppression is possible ๐ฅ
the downsides though ๐ญ: it's harder for the sender to know when it's safe to free its transmission buffers, and if the sender really needs to know that a particular receiver actually got all the data, you need additional session level mechanisms. BUT for lots of applications neither of these is an issue, so no stress ๐
the vibe check: NACKs are great, just know what you're trading away ๐
4.2.1. NACK Suppression ๐ฆ
ngl this is where the drama is. The key differences between NACK-based protocols come down to how NACK suppression gets done ๐ The goal is for only one NACK to reach the sender (or a node that can resend the missing data) as soon as possible after the loss is first noticed, and for only one copy of the missing data to be received by the nodes that need retransmission โจ
different mechanisms get close to hitting these goals in different ways, and here's the lineup ๐ :
- SRM [FJM95] uses random timers weighted by the round trip time between the sender and each node missing the data. It's effective, but it requires computing the RTT to each receiver before suppression works properly ๐
- NTE [HC97] uses a sender-triggered mechanism based on random keys and sliding masks. It doesn't need random timers and works for very large sessions ๐ but it makes it difficult to provide the constant low-level stream of feedback needed to perform congestion control ๐ญ
- AAP [Ha99] uses exponentially distributed random timers and is effective for large sessions without needing to compute the RTT to each receiver ๐
- PGM [FLST98] and LMS [PPV98] use additional mechanisms in routers to suppress duplicate NACKs. In PGM's case, router assistance supplements SRM-style random timers and localizes the suppression, so the whole group doesn't have to get suppressed ๐ง
the most general of these is probably exponentially weighted random timers ๐ Sure, SRM-style timers can reduce feedback delay, but they're harder to use correctly when not all the RTTs are known, or when the number of respondees is unknown ๐ Exponentially weighted random timers, on the other hand, work well across a large range of session sizes with good worst case delay characteristics โจ main character energy, no cap ๐ฆ
either form of random timer based mechanism can be supplemented by router support where it's available ๐ซถ Sender triggered NACK mechanisms (e.g. [HC97]) are more difficult to integrate with router-based support mechanisms ๐
4.3. Replication ๐ธ
some RM protocols can be designed so they don't need explicit reliability mechanisms except in comparatively rare cases ๐ง An example is a multicast game, where the position of a moving object gets continuously multicast. That positional stream doesn't need extra reliability, because a new position superseding the old one will be sent before any retransmission could even happen ๐ However, when the moving object interacts with other objects or stops moving, an explicit reliability mechanism IS needed to reliably send the interaction information or last position ๐ญ
and it's not just games that can be built this way! The NTE shared text editor [HC97] uses exactly this kind of mechanism for changes to a line of text. For every change, the whole line gets sent, so as long as the user keeps typing, no explicit reliability mechanism is needed โจ
the major advantage of replication is that it isn't susceptible to spatially uncorrelated packet loss ๐ฆ With a traditional ACK or NACK based protocol, the probability of any particular packet being received by all the receivers in a large group can be very low, and that leads to high retransmission rates ๐ Replicated streams, in contrast, don't suffer as the receiver group grows: different receivers lose different packets, but this doesn't increase network traffic ๐
4.4. Packet-level Forward Error Correction ๐ฅ
Forward Error Correction (FEC) is a well known technique for protecting data against corruption ๐ For reliable multicast it's most useful in the form of erasure codes ๐
the simplest form of packet-level FEC is to take a group of packets that's about to be sent and XOR the packets together to form a new packet, which also gets sent ๐ง So say there are three original packets plus the XOR packet. If a receiver is missing any one of the original data packets but gets the XOR packet, it can reproduce the missing original packet ๐ซถ iykyk, it's literally math magic โจ
more general erasure codes exist [BKKKLZ95], [Ri97], [LMSSS97] and they allow the generation of n encoding packets from k original data packets ๐ In those cases, as long as at least k of the n encoding packets are received, the k original data packets can be reproduced ๐
to apply FEC, the sender groups data packets into rounds, and encoding packets are produced based on all the data packets in a round ๐ A round might consist of all the data packets in an entire application data unit in some cases, while in other cases it might be a group of data packets that make up only a small portion of an application data unit ๐ฆ
using erasure codes to repair packet loss is a significant improvement over simple retransmission, because the dependency on which packets have been lost is removed ๐ So the amount of repair traffic needed to repair spatially uncorrelated packet loss is considerably lessened ๐
we can divide packet-level FEC schemes into two categories: proactive FEC and reactive FEC ๐ธ The difference is that with proactive FEC, the sender decides a priori how many encoding packets to send for each round of data packets. With reactive FEC, the sender initially transmits only the original data packets for each round. Then it uses feedback from the receivers to compute how many packets were lost by the receiver that experienced the most loss in that round, and only that many additional encoding packets get sent for that round ๐ฅ Those encoding packets also serve to repair loss at the other receivers that are missing fewer packets โจ The receivers report via ACKs or NACKs how many packets are missing from each round. With NACKs, only the receiver missing the most packets needs to send a NACK for that round, so this count is used to weight the random timers in the NACK calculation ๐ง
proactive and reactive FEC can be combined ๐ For example, a certain amount of proactive FEC can be sent for each round, and if there are receivers that experience more loss than that can overcome for some rounds, they can request and receive additional encoding packets for those rounds ๐ซถ
FEC is very effective at reducing repair traffic for packet loss ๐ However, it requires the data to be sent to be grouped into rounds, which can add to end-to-end latency ๐ญ For bulk-data applications this is typically not a problem, but it may be an issue for interactive applications, where replication may be a better solution ๐
4.5. Layered FEC ๐
an alternative use of packet level FEC is possible when data is spread across several multicast groups [RVC98], [BLMR98] ๐ In such cases, the original k data packets are used to generate n encoding packets, where n is much larger than k. The n encoded packets are then striped across multiple multicast groups ๐ฆ When a receiver wants to receive the original data, it joins one or more of the multicast groups and receives the encoding packets. Once it has received k different encoding packets, the receiver can leave all the multicast groups and reconstruct the original data ๐
the primary importance of this layering is that it lets different receivers receive the traffic at different rates, according to the available capacity ๐ Such schemes don't require any form of feedback from the receivers to the sender to ensure good throughput, so the need for good throughput doesn't constrain the size of the receiver set ๐ฅ However, performing adequate network congestion control using receiver joins and leaves this way may require coordination between members that are behind the same congested link from the sender ๐ญ As described in the next section, [RVC98] suggests such a layered congestion control scheme โจ
5. Congestion Control Mechanisms โจ
okay so the Internet's basic delivery model is best-effort ๐ธ which means nobody promises you any throughput, delay, or packet loss. end-systems are expected to be adaptive and slow their sending rate down to whatever fits the congestion state of the network. the Internet is slowly starting to support reserved bandwidth and differentiated service classes for specialist apps, but unless an end-system knows for sure that it has reserved bandwidth, it must still perform congestion control. no exceptions bestie ๐
broadly speaking, there are five classes of single-sender multicast congestion control solution ๐ฆ
- Sender-controlled, one group.
A single multicast group handles the data distribution, and feedback from the group members is used to control the rate of that group. the goal is to transmit at a rate set by the slowest receiver ๐ข
- Sender-controlled, multiple groups.
one initial multicast group gets adaptively split into multiple subgroups, and the splits are centered on congestion points in the network. application-level relays buffer data from a group closer to the original sender, then retransmit it at a slower rate into a group further away. this way, different receivers can receive the data at different rates. sender-based congestion control happens between the members of a subgroup and their relay โจ
- Receiver-controlled, one group.
a single multicast group handles the data distribution. the receivers figure out whether the sender is transmitting too fast for the current congestion state of the network, and if it is, they leave the group ๐โโ๏ธ
- Receiver-controlled, layered organization.
a layered approach for combining this scheme with a congestion control protocol that needs no receiver feedback is described in [RVC98]. the sender stripes data across multiple multicast groups at the same time. receivers join and leave these layered groups based on their measurements of the congestion state of the network, so the amount of data being received is always appropriate. BUT (and this is a big but ๐ญ) this scheme relies on receivers joining and leaving the different multicast groups in a coordinated fashion behind a bottleneck link, and it has not yet been completely confirmed that this approach will scale in practice to the Internet. so more work on this congestion control mechanism would be beneficial ๐ง
- Router-based congestion control.
it is possible to add extra mechanisms to multicast routers to help with multicast congestion control. such mechanisms could include:
- Conditional joins (a multicast join that specifies a loss rate above which it is acceptable for the router to reject the join).
- Router filtering of traffic that exceeds a reasonable rate. this may include mechanisms for filtering traffic at different points in the network at different rates, depending on local congestion conditions [LVS99].
- Fair queuing schemes combined with end-to-end adaptation.
router-based schemes generally need more state in network routers than has traditionally been acceptable for backbone routers. so in the near term, these schemes are only likely to be applicable for intranet solutions ๐ข
for reliable multicast protocols, it is important to think about congestion control at the same time as reliability. the same mechanisms used to provide reliability will sometimes be used to provide congestion control too, so they're literally intertwined ๐ซถ
in the case of receiver-based congestion control, open-loop delivery using FEC is the likely choice for getting good throughput for bulk-data transfer. this is because open-loop delivery requires no feedback from receivers, which makes it a perfect match for a receiver-based congestion control mechanism that operates without feedback from receivers ๐
6. Security Considerations ๐
generally speaking, security considerations have relatively little effect on constraining the design space for reliable multicast protocols. the main issues constraining the design space are all related to receiver-set scaling. for authentication of the source and data integrity, receiver-set scaling is not a significant issue. however, for data encryption, key distribution, and especially re-keying, receiver-set scaling may be significantly affected. tree and graph based re-keying solutions[WHA98,WGL97] would appear to be appropriate solutions to these problems. it is not clear, however, that such re-keying solutions need to directly affect the design of the data distribution part of a reliable multicast protocol.
the primary question to consider for the security of reliable multicast protocols is the role of third parties. if nodes other than the original source of the data are allowed to send or resend data packets, then the security model for the protocol must take this into account. in particular, it must be clear whether such third parties are trusted or untrusted. a requirement for trusted third parties can make protocols difficult to deploy on the Internet ๐ฌ
untrusted third parties (such as receivers that retransmit the data) may be used so long as the data authentication mechanisms take this into account. typically this means that the original sender digitally signs and timestamps the data, and that the third parties resend this signed, timestamped payload unmodified ๐
โ ๏ธ unlike unicast protocols, denial-of-service attacks on multicast transport state are easy if the protocol design does not take such attacks into account. this is because any receiver can join the session and then produce feedback that influences the progress of a session involving many other receivers. so protection against denial-of-service attacks on reliable multicast protocols must be carefully considered. a receiver that requests retransmission of every packet, or that refuses to acknowledge packets in an ACK-based protocol, can potentially bring a reliable multicast session to a standstill. senders must have appropriate policy to deal with such conditions and, if necessary, evict the receiver from the group. a single receiver masquerading as a large number of receivers may still be an issue under such circumstances with protocols that support NACK-like functionality. providing unique "keys" to each NACKer when they first NACK, using a unicast response, might potentially prevent such attacks. ๐จ
denial-of-service attacks caused by traffic flooding are, however, somewhat easier to protect against than with unicast. unwanted senders can simply be pruned from the distribution tree using the mechanisms implemented in IGMP v3[CDT99] ๐ณ
7. Conclusions ๐
in this document we present an overview of the design space for reliable multicast within the context of one-to-many bulk-data transfer. other flavors of multicast application are not considered in this document, so the overview given should not be considered inclusive of the design space for protocols that fall outside one-to-many bulk-data transfer. during this overview, we reaffirmed that the process of designing a reliable multicast protocol is affected by a number of factors, which means a "one size fits all solution" is moot. these factors are then described to show how an application's needs constrain the set of available techniques that can be used to create a reliable multicast protocol. we also examined a number of basic techniques and showed how well they can meet the needs of certain types of applications ๐ง
this document is meant to give guidance to the IETF community about standardizing reliable multicast protocols for bulk-data transfer. given how much application requirements constrain reliable multicast solutions, and the diverse set of applications that need support, it should be clear that any standardization work should take great pains to be future-proof ๐ฎ. that seems to imply not standardizing complete reliable multicast transport protocols in one pass. instead, we should examine how separable such protocols are into functional building blocks, and standardize those blocks separately to the maximum degree that makes sense. this approach allows for protocol evolution, and lets applications with new constraints be supported with maximal reuse of existing, tested mechanisms ๐งฉ
8. Acknowledgments ๐ซถ
this document is an overview of the reliable multicast design space. the ideas presented are not the authors' own; they were collected from the varied presentations and discussions in the IRTF Reliable Multicast Research Group. there are too many to list here, but we thank everyone who took part in those discussions for their contributions ๐
9. Authors' Addresses ๐ฎ
Mark Handley
ATT Center for Internet Research at ICSI,
International Computer Science Institute,
1947 Center Street, Suite 600,
Berkeley, CA 94704, USA
EMail: mjh@aciri.org
Sally Floyd
ATT Center for Internet Research at ICSI,
International Computer Science Institute,
1947 Center Street, Suite 600,
Berkeley, CA 94704, USA
EMail: floyd@aciri.org
Brian Whetten
Talarian Corporation,
333 Distel Circle,
Los Altos, CA 94022, USA
EMail: whetten@talarian.com
Roger Kermode
Motorola Australian Research Centre
Level 3, 12 Lord St,
Botany NSW 2019,
Australia
EMail: Roger.Kermode@motorola.com
Lorenzo Vicisano
Cisco Systems,
170 West Tasman Dr.
San Jose, CA 95134, USA
EMail: lorenzo@cisco.com
Michael Luby
Digital Fountain, Inc.
600 Alabama Street
San Francisco, CA 94110
EMail: luby@digitalfountain.com
10. References ๐
okay bestie, here's the reading list the authors used. every citation is listed in full so you can go find the originals ๐
[BC94]K. Birman, T. Clark. "Performance of the Isis Distributed Computing Toolkit." Technical Report TR-94-1432, Dept. of Computer Science, Cornell University.[BKKKLZ95]J. Bloemer, M. Kalfane, M. Karpinski, R. Karp, M. Luby, D. Zuckerman, "An XOR-based Erasure Resilient Coding Scheme", ICSI Technical Report No. TR-95-048, August 1995.[BLMR98]J. Byers, M. Luby, M. Mitzenmacher, A. Rege, "A Digital Fountain Approach to Reliable Distribution of Bulk Data", Proc ACM SIGCOMM 98.[CDT99]Cain, B., Deering, S., and A. Thyagarajan, "Internet Group Management Protocol, Version 3", Work in Progress.[FLST98]Farinacci, D., Lin, S., Speakman, T. and A. Tweedly, "PGM reliable transport protocol specification", Work in Progress.[FJM95]S. Floyd, V. Jacobson, S. McCanne, "A Reliable Multicast Framework for Light-weight Sessions and Application Level Framing", Proc ACM SIGCOMM 95, Aug 1995 pp. 342-356.[Ha99]Handley, M., "Multicast address allocation protocol (AAP)", Work in Progress.[HC97]M. Handley and J. Crowcroft, "Network text editor (NTE) a scalable shared text editor for MBone," ACM Computer Communication Review, vol. 27, pp. 197-208, Oct. 1997. ACM SIGCOMM'97, Sept. 1997.[KCW98]Kadansky, M., Chiu, D. and J. Wesley, "Tree-based reliable multicast (TRAM)", Work in Progress.[LMSSS97]M. Luby, M. Mitzenmacher, A. Shokrollahi, D. Spielman, V. Stemann, "Practical Loss-Resilient Codes", Proc ACM Symposium on Theory of Computing, 1997.[MWB+98]Montgomery, T., Whetten, B., Basavaiah, M., Paul, S., Rastogi, N., Conlan, J. and T. Yeh, "THE RMTP-II PROTOCOL", Work in Progress.[PPV98]C. Papadopoulos, G. Parulkar, and G. Varghese, "An error control scheme for large-scale multicast applications," in Proceedings of the Conference on Computer Communications (IEEE Infocom), (San Francisco, California), p. 1188, March/April 1998.[Ri97]L. Rizzo, "Effective erasure codes for reliable computer communication protocols," ACM Computer Communication Review, vol. 27, pp. 24-36, Apr. 1997.[RV97]L. Rizzo, L. Vicisano, "A Reliable Multicast data Distribution Protocol based on software FEC techniques", Proc. of The Fourth IEEE Workshop on the Architecture and Implementation of High Performance Communication Systems (HPCS'97), Sani Beach, Chalkidiki, Greece June 23-25, 1997.[RVC98]L. Rizzo, L. Vicisano, J. Crowcroft, "The RLC multicast congestion control algorithm", submitted to IEEE Network - special issue multicast.[RMWT98]Robertson, K., Miller, K., White, M. and A. Tweedly, "StarBurst multicast file transfer protocol (MFTP) specification", Work in Progress.[WHA98]Wallner, D., Hardler, E. and R. Agee, "Key Management for Multicast: Issues and Architectures", RFC 2627, June 1999.[WKM94]Brian Whetten, Simon Kaplan, and Todd Montgomery, "A high performance totally ordered multicast protocol," research memorandum, Aug. 1994.[WGL97]C.K. Wong, M. Gouda, S. Lam, "Secure Group Communications Using Key Graphs," Technical Report TR 97-23, Department of Computer Sciences, The University of Texas at Austin, July 1997.
11. Full Copyright Statement โ๏ธ
Copyright (C) The Internet Society (2000). All Rights Reserved. ๐
You're allowed to copy this document and share it, and translations of it too. You can also write derivative works that comment on or explain it, or that help people implement it, and publish and distribute those in whole or in part with no restrictions at all. The one catch is that the copyright notice and this paragraph have to be included on every copy and every derivative work. โจ
What you can't do is modify this document itself in any way. That includes removing the copyright notice or the references to the Internet Society or other Internet organizations. The exceptions are when it's needed for developing Internet standards, in which case the copyright procedures defined in the Internet Standards process must be followed, or when it's being translated into languages other than English. ๐
These permissions are perpetual, and the Internet Society or its successors or assigns won't revoke them. ๐ฆ
This document and the information in it are provided on an "AS IS" basis, and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS 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. ๐
Acknowledgement ๐ซถ
Funding for the RFC Editor function is currently provided by the Internet Society. ๐
๐ฆ where this page comes from
- ietf: rfc2887 2000-08
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms