rfc8836v2.txt | rfc8836.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) R. Jesup | Internet Engineering Task Force (IETF) R. Jesup | |||
Request for Comments: 8836 Mozilla | Request for Comments: 8836 Mozilla | |||
Category: Informational Z. Sarker, Ed. | Category: Informational Z. Sarker, Ed. | |||
ISSN: 2070-1721 Ericsson | ISSN: 2070-1721 Ericsson AB | |||
November 2020 | January 2021 | |||
Congestion Control Requirements for Interactive Real-Time Media | Congestion Control Requirements for Interactive Real-Time Media | |||
Abstract | Abstract | |||
Congestion control is needed for all data transported across the | Congestion control is needed for all data transported across the | |||
Internet, in order to promote fair usage and prevent congestion | Internet, in order to promote fair usage and prevent congestion | |||
collapse. The requirements for interactive, point-to-point real-time | collapse. The requirements for interactive, point-to-point real-time | |||
multimedia, which needs low-delay, semi-reliable data delivery, are | multimedia, which needs low-delay, semi-reliable data delivery, are | |||
different from the requirements for bulk transfer like FTP or bursty | different from the requirements for bulk transfer like FTP or bursty | |||
skipping to change at line 47 ¶ | skipping to change at line 47 ¶ | |||
Internet Engineering Steering Group (IESG). Not all documents | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | approved by the IESG are candidates for any level of Internet | |||
Standard; see Section 2 of RFC 7841. | Standard; see Section 2 of RFC 7841. | |||
Information about the current status of this document, any errata, | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | and how to provide feedback on it may be obtained at | |||
https://www.rfc-editor.org/info/rfc8836. | https://www.rfc-editor.org/info/rfc8836. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction | 1. Introduction | |||
1.1. Requirements Language | ||||
2. Requirements | 2. Requirements | |||
3. Deficiencies of Existing Mechanisms | 3. Deficiencies of Existing Mechanisms | |||
4. IANA Considerations | 4. IANA Considerations | |||
5. Security Considerations | 5. Security Considerations | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
6.2. Informative References | 6.2. Informative References | |||
Acknowledgements | Acknowledgements | |||
Authors' Addresses | Authors' Addresses | |||
skipping to change at line 124 ¶ | skipping to change at line 125 ¶ | |||
mechanism operate within the constraints defined by these circuit | mechanism operate within the constraints defined by these circuit | |||
breakers when a circuit breaker is present and that it should not | breakers when a circuit breaker is present and that it should not | |||
cause congestion collapse when a circuit breaker is not implemented. | cause congestion collapse when a circuit breaker is not implemented. | |||
Given that this use case is the focus of this document, use cases | Given that this use case is the focus of this document, use cases | |||
involving non-interactive media such as video streaming and those | involving non-interactive media such as video streaming and those | |||
using multicast/broadcast-type technologies, are out of scope. | using multicast/broadcast-type technologies, are out of scope. | |||
The terminology defined in [RFC8825] is used in this memo. | The terminology defined in [RFC8825] is used in this memo. | |||
1.1. Requirements Language | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in BCP 14 [RFC2119]. | ||||
2. Requirements | 2. Requirements | |||
1. The congestion control algorithm must attempt to provide as-low- | 1. The congestion control algorithm MUST attempt to provide as-low- | |||
as-possible-delay transit for interactive real-time traffic | as-possible-delay transit for interactive real-time traffic | |||
while still providing a useful amount of bandwidth. There may | while still providing a useful amount of bandwidth. There may | |||
be lower limits on the amount of bandwidth that is useful, but | be lower limits on the amount of bandwidth that is useful, but | |||
this is largely application specific, and the application may be | this is largely application specific, and the application may be | |||
able to modify or remove flows in order to allow some useful | able to modify or remove flows in order to allow some useful | |||
flows to get enough bandwidth. For example, although there | flows to get enough bandwidth. For example, although there | |||
might not be enough bandwidth for low-latency video+audio, there | might not be enough bandwidth for low-latency video+audio, there | |||
could be enough for audio only. | could be enough for audio only. | |||
a. Jitter (variation in the bitrate over short timescales) is | a. Jitter (variation in the bitrate over short timescales) is | |||
skipping to change at line 199 ¶ | skipping to change at line 206 ¶ | |||
[MPEG_DASH] or proprietary media streaming algorithms may | [MPEG_DASH] or proprietary media streaming algorithms may | |||
compete in bursts with the algorithm and may not be adaptive | compete in bursts with the algorithm and may not be adaptive | |||
within a burst. They are often layered on top of TCP but | within a burst. They are often layered on top of TCP but | |||
use TCP in a bursty manner that can interact poorly with | use TCP in a bursty manner that can interact poorly with | |||
competing flows during the bursts. The algorithm must not | competing flows during the bursts. The algorithm must not | |||
increase the already existing delay buildup during those | increase the already existing delay buildup during those | |||
bursts. Note that this competing traffic may be on a shared | bursts. Note that this competing traffic may be on a shared | |||
access link, or the traffic burst may cause a shift in the | access link, or the traffic burst may cause a shift in the | |||
location of the bottleneck for the duration of the burst. | location of the bottleneck for the duration of the burst. | |||
2. The algorithm must be fair to other flows, both real-time flows | 2. The algorithm MUST be fair to other flows, both real-time flows | |||
(such as other instances of itself) and TCP flows, both long- | (such as other instances of itself) and TCP flows, both long- | |||
lived flows and bursts such as the traffic generated by a | lived flows and bursts such as the traffic generated by a | |||
typical web-browsing session. Note that "fair" is a rather | typical web-browsing session. Note that "fair" is a rather | |||
hard-to-define term. It should be fair with itself, giving a | hard-to-define term. It SHOULD be fair with itself, giving a | |||
fair share of the bandwidth to multiple flows with similar RTTs, | fair share of the bandwidth to multiple flows with similar RTTs, | |||
and if possible to multiple flows with different RTTs. | and if possible to multiple flows with different RTTs. | |||
a. Existing flows at a bottleneck must also be fair to new | a. Existing flows at a bottleneck must also be fair to new | |||
flows to that bottleneck and must allow new flows to ramp up | flows to that bottleneck and must allow new flows to ramp up | |||
to a useful share of the bottleneck bandwidth as quickly as | to a useful share of the bottleneck bandwidth as quickly as | |||
possible. A useful share will depend on the media types | possible. A useful share will depend on the media types | |||
involved, total bandwidth available, and the user-experience | involved, total bandwidth available, and the user-experience | |||
requirements of a particular service. Note that relative | requirements of a particular service. Note that relative | |||
RTTs may affect the rate at which new flows can ramp up to a | RTTs may affect the rate at which new flows can ramp up to a | |||
reasonable share. | reasonable share. | |||
3. The algorithm should not starve competing TCP flows and should, | 3. The algorithm SHOULD NOT starve competing TCP flows and SHOULD, | |||
as best as possible, avoid starvation by TCP flows. | as best as possible, avoid starvation by TCP flows. | |||
a. The congestion control should prioritize achieving a useful | a. The congestion control should prioritize achieving a useful | |||
share of the bandwidth depending on the media types and | share of the bandwidth depending on the media types and | |||
total available bandwidth over achieving as-low-as-possible | total available bandwidth over achieving as-low-as-possible | |||
transit delay, when these two requirements are in conflict. | transit delay, when these two requirements are in conflict. | |||
4. The algorithm should adapt as quickly as possible to initial | 4. The algorithm SHOULD adapt as quickly as possible to initial | |||
network conditions at the start of a flow. This should occur | network conditions at the start of a flow. This SHOULD occur | |||
whether the initial bandwidth is above or below the bottleneck | whether the initial bandwidth is above or below the bottleneck | |||
bandwidth. | bandwidth. | |||
a. The algorithm should allow different modes of adaptation; | a. The algorithm should allow different modes of adaptation; | |||
for example, the startup adaptation may be faster than | for example, the startup adaptation may be faster than | |||
adaptation later in a flow. It should allow for both slow- | adaptation later in a flow. It should allow for both slow- | |||
start operation (adapt up) and history-based startup (start | start operation (adapt up) and history-based startup (start | |||
at a point expected to be at or below channel bandwidth from | at a point expected to be at or below channel bandwidth from | |||
historical information, which may need to adapt down quickly | historical information, which may need to adapt down quickly | |||
if the initial guess is wrong). Starting too low and/or | if the initial guess is wrong). Starting too low and/or | |||
skipping to change at line 248 ¶ | skipping to change at line 255 ¶ | |||
high above the available bandwidth causes other problems for | high above the available bandwidth causes other problems for | |||
user experience, so there's a tension here. Alternative | user experience, so there's a tension here. Alternative | |||
methods to help startup, such as probing during setup with | methods to help startup, such as probing during setup with | |||
dummy data, may be useful in some applications; in some | dummy data, may be useful in some applications; in some | |||
cases, there will be a considerable gap in time between flow | cases, there will be a considerable gap in time between flow | |||
creation and the initial flow of data. Again, a flow may | creation and the initial flow of data. Again, a flow may | |||
need to change adaptation rates due to network conditions or | need to change adaptation rates due to network conditions or | |||
changes in the provided flows (such as unmuting or sending | changes in the provided flows (such as unmuting or sending | |||
data after a gap). | data after a gap). | |||
5. The algorithm should be stable if the RTP streams are halted or | 5. The algorithm SHOULD be stable if the RTP streams are halted or | |||
discontinuous (for example, when using Voice Activity | discontinuous (for example, when using Voice Activity | |||
Detection). | Detection). | |||
a. After stream resumption, the algorithm should attempt to | a. After stream resumption, the algorithm should attempt to | |||
rapidly regain its previous share of the bandwidth; the | rapidly regain its previous share of the bandwidth; the | |||
aggressiveness with which this is done will decay with the | aggressiveness with which this is done will decay with the | |||
length of the pause. | length of the pause. | |||
6. Where possible, the algorithm should merge information across | 6. Where possible, the algorithm SHOULD merge information across | |||
multiple RTP streams sent between two endpoints when those RTP | multiple RTP streams sent between two endpoints when those RTP | |||
streams share a common bottleneck, whether or not those streams | streams share a common bottleneck, whether or not those streams | |||
are multiplexed onto the same ports. This will allow congestion | are multiplexed onto the same ports. This will allow congestion | |||
control of the set of streams together instead of as multiple | control of the set of streams together instead of as multiple | |||
independent streams. It will also allow better overall | independent streams. It will also allow better overall | |||
bandwidth management, faster response to changing conditions, | bandwidth management, faster response to changing conditions, | |||
and fairer sharing of bandwidth with other network users. | and fairer sharing of bandwidth with other network users. | |||
a. The algorithm should also share information and adaptation | a. The algorithm should also share information and adaptation | |||
with other non-RTP flows between the same endpoints, such as | with other non-RTP flows between the same endpoints, such as | |||
skipping to change at line 281 ¶ | skipping to change at line 288 ¶ | |||
coordinating their bandwidth use and congestion control, the | coordinating their bandwidth use and congestion control, the | |||
algorithm should allow the application to control the | algorithm should allow the application to control the | |||
relative split of available bandwidth. The most correlated | relative split of available bandwidth. The most correlated | |||
bandwidth usage would be with other flows on the same | bandwidth usage would be with other flows on the same | |||
5-tuple, but there may be use in coordinating measurement | 5-tuple, but there may be use in coordinating measurement | |||
and control of the local link(s). Use of information about | and control of the local link(s). Use of information about | |||
previous flows, especially on the same 5-tuple, may be | previous flows, especially on the same 5-tuple, may be | |||
useful input to the algorithm, especially regarding startup | useful input to the algorithm, especially regarding startup | |||
performance of a new flow. | performance of a new flow. | |||
7. The algorithm should not require any special support from | 7. The algorithm SHOULD NOT require any special support from | |||
network elements to be able to convey congestion-related | network elements to be able to convey congestion-related | |||
information. As much as possible, it should leverage available | information. As much as possible, it SHOULD leverage available | |||
information about the incoming flow to provide feedback to the | information about the incoming flow to provide feedback to the | |||
sender. Examples of this information are the packet arrival | sender. Examples of this information are the packet arrival | |||
times, acknowledgements and feedback, packet timestamps, packet | times, acknowledgements and feedback, packet timestamps, packet | |||
losses, and Explicit Congestion Notification (ECN) [RFC3168]; | losses, and Explicit Congestion Notification (ECN) [RFC3168]; | |||
all of these can provide information about the state of the path | all of these can provide information about the state of the path | |||
and any bottlenecks. However, the use of available information | and any bottlenecks. However, the use of available information | |||
is algorithm dependent. | is algorithm dependent. | |||
a. Extra information could be added to the packets to provide | a. Extra information could be added to the packets to provide | |||
more detailed information on actual send times (as opposed | more detailed information on actual send times (as opposed | |||
to sampling times), but such information should not be | to sampling times), but such information should not be | |||
required. | required. | |||
8. Since the assumption here is a set of RTP streams, the | 8. Since the assumption here is a set of RTP streams, the | |||
backchannel typically should be done via the RTP Control | backchannel typically SHOULD be done via the RTP Control | |||
Protocol (RTCP) [RFC3550]; instead, one alternative would be to | Protocol (RTCP) [RFC3550]; instead, one alternative would be to | |||
include it in a reverse-RTP channel using header extensions. | include it in a reverse-RTP channel using header extensions. | |||
a. In order to react sufficiently quickly when using RTCP for a | a. In order to react sufficiently quickly when using RTCP for a | |||
backchannel, an RTP profile such as RTP/AVPF [RFC4585] or | backchannel, an RTP profile such as RTP/AVPF [RFC4585] or | |||
RTP/SAVPF [RFC5124] that allows sufficiently frequent | RTP/SAVPF [RFC5124] that allows sufficiently frequent | |||
feedback must be used. Note that in some cases, backchannel | feedback must be used. Note that in some cases, backchannel | |||
messages may be delayed until the RTCP channel can be | messages may be delayed until the RTCP channel can be | |||
allocated enough bandwidth, even under AVPF rules. This may | allocated enough bandwidth, even under AVPF rules. This may | |||
also imply negotiating a higher maximum percentage for RTCP | also imply negotiating a higher maximum percentage for RTCP | |||
skipping to change at line 333 ¶ | skipping to change at line 340 ¶ | |||
frequent and use more reverse-channel bandwidth. This is an | frequent and use more reverse-channel bandwidth. This is an | |||
area with considerable flexibility of design, and different | area with considerable flexibility of design, and different | |||
approaches to backchannel messages and frequency are | approaches to backchannel messages and frequency are | |||
expected to be evaluated. | expected to be evaluated. | |||
9. Flows managed by this algorithm and flows competing against each | 9. Flows managed by this algorithm and flows competing against each | |||
other at a bottleneck may have different Differentiated Services | other at a bottleneck may have different Differentiated Services | |||
Code Point (DSCP) [RFC5865] markings depending on the type of | Code Point (DSCP) [RFC5865] markings depending on the type of | |||
traffic or may be subject to flow-based QoS. A particular | traffic or may be subject to flow-based QoS. A particular | |||
bottleneck or section of the network path may or may not honor | bottleneck or section of the network path may or may not honor | |||
DSCP markings. The algorithm should attempt to leverage DSCP | DSCP markings. The algorithm SHOULD attempt to leverage DSCP | |||
markings when they're available. | markings when they're available. | |||
10. The algorithm should sense the unexpected lack of backchannel | 10. The algorithm SHOULD sense the unexpected lack of backchannel | |||
information as a possible indication of a channel-overuse | information as a possible indication of a channel-overuse | |||
problem and react accordingly to avoid burst events causing a | problem and react accordingly to avoid burst events causing a | |||
congestion collapse. | congestion collapse. | |||
11. The algorithm should be stable and maintain low delay when faced | 11. The algorithm SHOULD be stable and maintain low delay when faced | |||
with Active Queue Management (AQM) algorithms. Also note that | with Active Queue Management (AQM) algorithms. Also note that | |||
these algorithms may apply across multiple queues in the | these algorithms may apply across multiple queues in the | |||
bottleneck or to a single queue. | bottleneck or to a single queue. | |||
3. Deficiencies of Existing Mechanisms | 3. Deficiencies of Existing Mechanisms | |||
Among the existing congestion control mechanisms, TCP Friendly Rate | Among the existing congestion control mechanisms, TCP Friendly Rate | |||
Control (TFRC) [RFC5348] is the one that claims to be suitable for | Control (TFRC) [RFC5348] is the one that claims to be suitable for | |||
real-time interactive media. TFRC is an equation-based congestion | real-time interactive media. TFRC is an equation-based congestion | |||
control mechanism that provides a reasonably fair share of bandwidth | control mechanism that provides a reasonably fair share of bandwidth | |||
skipping to change at line 432 ¶ | skipping to change at line 439 ¶ | |||
are conceivable and need to be evaluated. Such attacks could result | are conceivable and need to be evaluated. Such attacks could result | |||
in starvation of competing flows and permit amplification attacks. | in starvation of competing flows and permit amplification attacks. | |||
Algorithm designers should consider the possibility of malicious on- | Algorithm designers should consider the possibility of malicious on- | |||
path attackers. | path attackers. | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
Requirement Levels", BCP 14, RFC 2119, | ||||
DOI 10.17487/RFC2119, March 1997, | ||||
<https://www.rfc-editor.org/info/rfc2119>. | ||||
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | |||
Jacobson, "RTP: A Transport Protocol for Real-Time | Jacobson, "RTP: A Transport Protocol for Real-Time | |||
Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | |||
July 2003, <https://www.rfc-editor.org/info/rfc3550>. | July 2003, <https://www.rfc-editor.org/info/rfc3550>. | |||
[RFC4585] Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey, | [RFC4585] Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey, | |||
"Extended RTP Profile for Real-time Transport Control | "Extended RTP Profile for Real-time Transport Control | |||
Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585, | Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585, | |||
DOI 10.17487/RFC4585, July 2006, | DOI 10.17487/RFC4585, July 2006, | |||
<https://www.rfc-editor.org/info/rfc4585>. | <https://www.rfc-editor.org/info/rfc4585>. | |||
[RFC5124] Ott, J. and E. Carrara, "Extended Secure RTP Profile for | [RFC5124] Ott, J. and E. Carrara, "Extended Secure RTP Profile for | |||
Real-time Transport Control Protocol (RTCP)-Based Feedback | Real-time Transport Control Protocol (RTCP)-Based Feedback | |||
(RTP/SAVPF)", RFC 5124, DOI 10.17487/RFC5124, February | (RTP/SAVPF)", RFC 5124, DOI 10.17487/RFC5124, February | |||
2008, <https://www.rfc-editor.org/info/rfc5124>. | 2008, <https://www.rfc-editor.org/info/rfc5124>. | |||
[RFC8825] Alvestrand, H., "Overview: Real-Time Protocols for | [RFC8825] Alvestrand, H., "Overview: Real-Time Protocols for | |||
Browser-Based Applications", RFC 8825, | Browser-Based Applications", RFC 8825, | |||
DOI 10.17487/RFC8825, November 2020, | DOI 10.17487/RFC8825, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8825>. | <https://www.rfc-editor.org/info/rfc8825>. | |||
6.2. Informative References | 6.2. Informative References | |||
[CH09] Choi, S. and M. Handley, "Designing TCP-Friendly Window- | [CH09] Choi, S. and M. Handley, "Designing TCP-Friendly Window- | |||
based Congestion Control for Real-time Multimedia | based Congestion Control for Real-time Multimedia | |||
Applications", Proceedings of PFLDNeT, May 2009. | Applications", Proceedings of PFLDNeT, May 2009. | |||
[MPEG_DASH] | [MPEG_DASH] | |||
ISO, "Information Technology -- Dynamic adaptive streaming | ISO, "Information Technology -- Dynamic adaptive streaming | |||
skipping to change at line 502 ¶ | skipping to change at line 514 ¶ | |||
Interactive Real-Time Communication", RFC 7295, | Interactive Real-Time Communication", RFC 7295, | |||
DOI 10.17487/RFC7295, July 2014, | DOI 10.17487/RFC7295, July 2014, | |||
<https://www.rfc-editor.org/info/rfc7295>. | <https://www.rfc-editor.org/info/rfc7295>. | |||
[RFC8083] Perkins, C. and V. Singh, "Multimedia Congestion Control: | [RFC8083] Perkins, C. and V. Singh, "Multimedia Congestion Control: | |||
Circuit Breakers for Unicast RTP Sessions", RFC 8083, | Circuit Breakers for Unicast RTP Sessions", RFC 8083, | |||
DOI 10.17487/RFC8083, March 2017, | DOI 10.17487/RFC8083, March 2017, | |||
<https://www.rfc-editor.org/info/rfc8083>. | <https://www.rfc-editor.org/info/rfc8083>. | |||
[RFC8831] Jesup, R., Loreto, S., and M. Tüxen, "WebRTC Data | [RFC8831] Jesup, R., Loreto, S., and M. Tüxen, "WebRTC Data | |||
Channels", RFC 8831, DOI 10.17487/RFC8831, November 2020, | Channels", RFC 8831, DOI 10.17487/RFC8831, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8831>. | <https://www.rfc-editor.org/info/rfc8831>. | |||
Acknowledgements | Acknowledgements | |||
This document is the result of discussions in various fora of the | This document is the result of discussions in various fora of the | |||
WebRTC effort, in particular on the <rtp-congestion@alvestrand.no> | WebRTC effort, in particular on the <rtp-congestion@alvestrand.no> | |||
mailing list. Many people contributed their thoughts to this. | mailing list. Many people contributed their thoughts to this. | |||
Authors' Addresses | Authors' Addresses | |||
Randell Jesup | Randell Jesup | |||
Mozilla | Mozilla | |||
United States of America | United States of America | |||
Email: randell-ietf@jesup.org | Email: randell-ietf@jesup.org | |||
Zaheduzzaman Sarker (editor) | Zaheduzzaman Sarker (editor) | |||
Ericsson | Ericsson AB | |||
Torshamnsgatan 23 | ||||
SE-164 83 Stockholm | ||||
Sweden | Sweden | |||
Phone: +46 10 717 37 43 | ||||
Email: zaheduzzaman.sarker@ericsson.com | Email: zaheduzzaman.sarker@ericsson.com | |||
End of changes. 22 change blocks. | ||||
20 lines changed or deleted | 35 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |