RFC 3006
Integrated Services in the Presence of Compressible Flows
RFC 3006 ๐ Part 1 of 3
Title block tea โ: This one is RFC 3006, called Integrated Services in the Presence of Compressible Flows, from the Network Working Group. It's a Standards Track doc, dated November 2000. The authors are B. Davie, C. Iturralde, and D. Oran from Cisco Systems, Inc., plus S. Casner from Packet Design and J. Wroclawski from MIT LCS. The header doesn't list anything it obsoletes or updates, so there's no drama there ๐ง
Status of this Memo โจ
Okay so this doc is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions ๐ซถ For where this protocol sits in standardization, check the current edition of "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited, so share it with everyone ๐
Copyright Notice ๐
Copyright (C) The Internet Society (2000). All Rights Reserved.
Abstract ๐ฆ
Okay bestie, the big idea is this. An Integrated Services (int-serv) router does admission control and resource allocation based on a TSpec (plus other stuff) ๐ Right now, a TSpec tells you about the data rate, using a token bucket, and the range of packet sizes for the flow. The catch is that the TSpec might not show what the reservation actually needs. If a router can compress the data at the link level, the TSpec is kinda wrong ๐
So this spec adds an extension to the TSpec. It lets a sender of potentially compressible data give routers hints about how compressible the data is. Routers that support the right compression use the hint in their admission control and resource allocation. Other routers just ignore it, no drama ๐ธ The first use case is telling routers doing real-time transport protocol (RTP) header compression that they may allocate fewer resources to RTP flows โจ
Table of Contents ๐
1 Introduction ........................................... 2
2 Addition of a Hint to the Sender TSpec ................. 3
3 Admission Control and Resource Allocation .............. 4
4 Object Format .......................................... 8
4.1 Hint Numbering ......................................... 9
5 Backward Compatibility ................................. 10
6 Security Considerations ................................ 10
7 IANA Considerations .................................... 11
8 Acknowledgments ........................................ 11
9 References ............................................. 11
10 Authors' Addresses ..................................... 12
11 Full Copyright Statement ................................ 13
1. Introduction ๐
Okay so picture an Integrated Services network. RSVP [RFC 2205] can be the signalling protocol that end nodes and network elements use to trade info about resource requirements, resource availability, and setting up and tearing down resource reservations ๐ฆ The Integrated Services architecture has two services right now, Controlled-Load [RFC 2211] and Guaranteed [RFC 2212].
When you set up a reservation with either service, RSVP needs a bunch of info from the sender(s) and receiver(s). That info is used for admission control and for allocating resources to the reservation ๐ง Some of it comes from the receiver in a FLOWSPEC object, and some comes from the sender in a SENDER_TSPEC object [RFC 2210].
Here's where the current specs struggle ๐ญ Say a router making an admission control decision can do some kind of compression on the flow the reservation is for. For example, the router can do IP/UDP/RTP header compression on one of its interfaces [RFC 2508]. Then the bandwidth that flow actually needs on that interface is less than what's in the SENDER_TSPEC. The router might wrongly reject a reservation that would have fit just fine ๐ The sender can't fix this by lowering its TSpec, because it doesn't know whether the routers on the path can actually compress. And it's likely that only some routers on the path do compression, like the ones on low-speed serial links ๐
This spec gives the sender a way to hint to network elements about how compressible the data stream it's about to send is. Network elements can use that hint as one extra piece of data when they make admission control and resource allocation decisions โจ
This spec only covers compression done link-by-link, like header compression. Other stuff, such as transcoding and audio silence detection, which would change the bandwidth used at all downstream nodes, is left for further study ๐ฎ In those cases, you'd need to change a sender TSpec as it passes through a compressing node. But in the approach here, the sender TSpec on the wire is never modified, just like [RFC 2210] says ๐ซถ
2. Addition of a Hint to the Sender TSpec ๐ง
Okay this part is the heart of it. The right place for a `compressibility hint' is the Sender TSpec ๐ Here's why:
- The sender is the one who knows best what the data will look like ๐
- Unlike the Adspec, the Sender TSpec is not modified in transit ๐ก๏ธ
- From RSVP's point of view, the Sender TSpec is just a set of opaque parameters handed to `traffic control' (admission control and resource allocation). The compressibility hint is one of those parameters too ๐ธ
You could put this info in an extra object in the RSVP PATH message instead. That could work for RSVP, but it doesn't solve getting the same info to an intserv router when something other than RSVP is used to reserve resources ๐ It would also mean changing RSVP message processing just to pass info to things that aren't logically part of RSVP at all (admission control and resource allocation). So putting the info in the TSpec feels cleaner and more in line with the Integrated Services architecture ๐
The hint will probably look different depending on the exact scenario. The hint has to tell the routers that receive it:
- the type of compression that's possible on this flow (for example, IP/UDP/RTP) ๐ฆ
- enough info for a router to figure out the likely compression ratio it might get ๐
In a simple case like IP/UDP/RTP header compression, telling routers that IP/UDP/RTP data is being sent might be all it takes โจ With that fact, plus the maximum packet size of the flow (from the TSpec) and the router's local conditions, the router can work out how much bandwidth compression will save ๐ฅ In other cases, it might be helpful, or even necessary, for the sender to include more quantitative info so the compression ratio can be calculated ๐ To cover those cases, extra parameters with varying amounts of info may be added to the sender TSpec. The details of how those parameters are encoded follow the approach from [RFC 2210], and they're described below ๐
3. Admission Control and Resource Allocation โจ
okay so Integrated Services routers make admission control and resource allocation decisions based on, among other things, the info in the sender TSpec ๐. If a router gets a sender TSpec with a compressibility hint, it may use that hint to work out a compressed TSpec, and feed that into admission control and resource allocation instead of the TSpec the sender actually gave it. let's make it concrete ๐. a router gets a reservation request for controlled load service where:
- The Sender TSpec and Receiver TSpec contain identical token bucket parameters;
- The rate parameter in the token bucket (
r) is 48 kbps; - The token bucket depth (
b) is 120 bytes; - The maximum packet size (
M) in the TSpecs is 120 bytes; - The minimum policed unit (
m) is 64 bytes; - The Sender TSpec contains a compressibility hint indicating that the data is IP/UDP/RTP;
- The compressibility hint includes a compression factor of 70%, meaning that IP/UDP/RTP header compression will cause a reduction in bandwidth consumed at the link level by a factor of 0.7 (the result of compressing 40 bytes of IP/UDP/RTP header to 4 bytes on a 120 byte packet) ๐ฆ
- The interface on which the reservation is to be installed is able to perform IP/UDP/RTP header compression.
so the router can scale r and b down by a factor of 0.7, which gets it to 33.6 kbps and 84 bytes respectively ๐ธ. M can get scaled down by the same factor (to 84 bytes) ๐
, but ngl a different calculation should be used for m. if the sender actually sends a packet of size m, its header gets compressed from 40 bytes to 4, so the packet drops to 28 bytes, and this value should be used for m ๐ญ.
Quick vibe check: if the source always sends same-size packets and IP/UDP/RTP always works perfectly, the compression factor isn't strictly needed ๐. the router can figure out on its own that it can squish the 40 bytes of IP/UDP/RTP header down to 4 bytes (with high probability). to find the worst-case (smallest) gain from compression, it can assume the sender always sends maximum sized packets at 48 kbps, which is a 120 byte packet every 20 milliseconds. then those packets compress to 84 bytes, giving a token bucket rate of 33.6 kbps and a token bucket depth of 84 bytes, same as before ๐ง. if the sender is happy to let the router do its own compression math, the explicit compression factor may be left out of the TSpec. the TSpec encoding details come below ๐.
now let's generalise ๐. say the Sender TSpec is made of values (r, b, p, M, m), the explicit compression factor from the sender is f percent, and the number of bytes compression saves is N, no matter the packet size. the parameters in the compressed TSpec would be:
r' = r * f/100
b' = b * f/100
p' = p
M' = M-N
m' = m-N
the r' and b' maths works because f is a percentage, so it has to be divided by 100 ๐. the M' and m' maths only holds if the compression algorithm shaves off a fixed number of bytes regardless of content or packet length, which is true for header compression. other compression algorithms might not have that property ๐. when figuring out N, the router may need to assume the worst case for how many bytes compression can remove, and that depends on stuff like whether UDP checksums are present and how linear the RTP timestamps are โญ.
all these adjusted values get used in the compressed TSpec โจ. the router's admission control and resource allocation algorithms should behave as if the sender TSpec had those values. [RFC 2205] has a set of rules for combining sender and receiver TSpecs into a single effective TSpec that gets passed to admission control ๐ฅ. when a reservation covers multiple senders, each sender TSpec has to be reduced by its own compression factor first ๐. the sender TSpecs that apply to one reservation on an interface get added together to form the effective sender TSpec, which goes to traffic control ๐. the effective receiver TSpec doesn't need changing, because traffic control takes the greatest lower bound of the two TSpecs when it makes its admission control and resource allocation decisions ๐ฆ.
how the receiver RSpec gets handled depends on whether controlled load or guaranteed service is in use ๐ธ. for controlled load, no extra RSpec processing is needed ๐. but a guaranteed service RSpec has a rate term R that does need adjusting downwards to account for compression ๐ญ. to figure out how R should change, notice that the receiver picked R to hit a particular delay goal, and the delay-equation terms that depend on R are b/R and C/R (when the peak rate is large) ๐ง . the burstsize b here is the sum of the burstsizes of all the senders in this reservation, and each of those numbers has already been scaled down by its compression factor. so R should be scaled down using an average compression factor:
f_avg = (b1*f1 + b2*f2 + ... + bn*fn)/(b1 + b2 + ... bn)
where bk is the burstsize of sender k and fk is the matching compression factor for that sender. f_avg, like the individual fi values, is a percentage ๐
. also, if every sender uses the same compression factor f, this works out to a compression factor of f, which is nice and tidy ๐ซถ.
to stop delay from going up because of the C/R term once the reduced R is in use, this hop has to inflate its C value by dividing it by (f_avg/100) ๐ฅ. that way, the delay contribution from this hop's C term matches what the receiver expected when it picked its R ๐.
now the risky stuff ๐. lowering resource requirements for admission control and resource allocation has real downsides. most compression algorithms aren't completely deterministic, so a flow might turn out to be less compressible than admission control assumed ๐. the explicit compression factor from the sender lowers that risk, and the router can shrink it further by assuming worst case compression ๐. it's kinda like the tradeoff between worst-case assumptions during admission control and more optimistic assumptions, like measurement-based admission control โจ. if a flow turns out less compressible than assumed, any extra traffic gets policed under normal intserv rules ๐ญ. for example, if the router assumed the 48 kbps stream above could compress to 33.6 kbps, but it actually only got down to 35 kbps, the extra 1.4 kbps gets treated as excess ๐. how that excess is handled depends on the service ๐ง.
a similar problem can happen if a sender says its data is compressible when it isn't, or exaggerates how compressible it is ๐. that could get the flow admitted by mistake, and then not enough resources get allocated to it ๐. to stop that from hurting other reserved flows, any flow that sends a compressibility hint should be policed (at any router that used the hint for admission control) as if it really is compressible, which means using the compressed TSpec ๐ก๏ธ. so if the flow turns out less compressible than advertised, the extra traffic the router has to forward above the compressed TSpec gets policed under the intserv rules for that service ๐. one more thing: services that use the maximum datagram size M for policing (for example, guaranteed service [RFC 2210]) should keep using the uncompressed M, since some packets might not compress successfully ๐.
next, RSVP doesn't generally require flows to be policed at every hop ๐ธ. quoting [RFC 2205] directly:
Some QoS services may require traffic policing at some or all of
(1) the edge of the network, (2) a merging point for data from
multiple senders, and/or (3) a branch point where traffic flow
from upstream may be greater than the downstream reservation being
requested. RSVP knows where such points occur and must so
indicate to the traffic control mechanism.
for policing purposes, a router that uses the compressibility hint in a sender TSpec should act as if it's at the edge of the network ๐ฆ. that's because it's receiving traffic from a sender that already got policed at the real network edge, but it might still need to police if the amount of data sent goes past what the compressed TSpec describes ๐.
4. Object Format ๐
Okay so the compressibility hint can ride along inside the sender TSpec, using the encoding rules from Appendix A in [RFC 2210] ๐ Here's the whole sender TSpec, bestie:
31 24 23 16 15 8 7 0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1 | 0 (a) | reserved | 10 (b) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2 | 1 (c) |0| reserved | 9 (d) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3 | 127 (e) | 0 (f) | 5 (g) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4 | Token Bucket Rate [r] (32-bit IEEE floating point number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5 | Token Bucket Size [b] (32-bit IEEE floating point number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6 | Peak Data Rate [p] (32-bit IEEE floating point number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7 | Minimum Policed Unit [m] (32-bit integer) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8 | Maximum Packet Size [M] (32-bit integer) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
9 | 126 (h) | 0 (i) | 2 (j) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
10 | Hint (assigned number) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
11 | Compression factor [f] (32-bit integer) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(a) - Message format version number (0)
(b) - Overall length (10 words not including header)
(c) - Service header, service number 1 (default/global
information)
(d) - Length of service 1 data, 9 words not including header
(e) - Parameter ID, parameter 127 (Token_Bucket_TSpec)
(f) - Parameter 127 flags (none set)
(g) - Parameter 127 length, 5 words not including header
(h) - Parameter ID, parameter 126 (Compression_Hint)
(i) - Parameter 126 flags (none set)
(j) - Parameter 126 length, 2 words not including header
The big difference from the TSpec in [RFC 2210] ๐ฆ is that the overall length in the first word goes up by 3, the service 1 data length goes up by 3 too, and the original TSpec parameters get a new buddy at the end: the compressibility hint! The hint has the standard parameter header, plus an assigned number that says what kind of compression is possible on this data. Different hint values mean different compression algorithms may be applied to the data. The numbering scheme is spelled out below ๐
Next up is the compression factor f โจ It's a 32 bit integer that represents the factor as a percentage, and the valid range is (0,100]. If a sender doesn't know what to put here, or wants the routers to handle the compression factor calculation themselves, it can use the reserved value 0 to say so. Zero is reserved because a data stream can never be compressed down to zero bits per second, so it would make no sense anyway ๐ And 100 means no compression is expected on this stream.
Sometimes a router needs more numbers about the traffic before it can figure out how much compression is possible. When that happens, a different encoding of the parameter would be required ๐ฆ
You might also want more than one hint in a TSpec, because more than one compression scheme could be applied to the same data ๐ In that case, multiple instances of parameter 126 may appear in the TSpec, and the overall length of the TSpec and the length of the Service 1 data would go up to match.
Note that the Compression_Hint is, just like the Token_Bucket_Tspec, not specific to one service. That's why its parameter value is less than 128 ๐ It also lives in the default/global information (service number 1), so it's a full main character in the TSpec.
4.1. Hint Numbering ๐ง
Hints are 32 bit fields, and the high order 16 bits hold the IP-compression-protocol number from [RFC 1332] and [RFC 2509] ๐ The low order 16 bits are a sub-option, for the times when the IP-compression-protocol number alone isn't enough for int-serv purposes. At the time of writing, these hint values are required:
hint = 0x002d0000: IP/TCP data that may be compressed according to [RFC 1144] ๐hint = 0x00610000: IP data that may be compressed according to [RFC 2507] ๐ฅhint = 0x00610100: IP/UDP/RTP data that may be compressed according to [RFC 2508] ๐ธ
5. Backward Compatibility ๐ซถ
It's super desirable that an intserv router which gets this new TSpec format, but doesn't understand the compressibility hint, should silently ignore the hint instead of rejecting the entire TSpec (or the message holding it) as malformed ๐ฅบ [RFC 2210] clearly defines the TSpec format so it can be parsed even when it has unknown parameters. The catch is that it doesn't say what to do when unknown objects show up. So it's totally possible that some RSVP implementations will throw away PATH messages with a TSpec carrying the compressibility hint ๐ In that case, the router should send a PathErr message to the sending host. The message should indicate a malformed TSpec (Error code 21, Sub-code 04). The host may conclude that the hint caused the problem and send a new PATH without the hint.
For this specification, it would be preferable if unknown TSpec parameters could be silently ignored ๐ฆ When a parameter gets silently ignored, the node should behave as if that parameter were not there, but it should leave the unknown parameter intact in the object it forwards. This should be the default for unknown parameters of the type described in [RFC 2210].
Here's the plot twist ๐ญ It's possible that future changes to [RFC 2210] will require unknown parameter types to trigger an error response. That would be analogous to how RSVP handles unknown objects, which allows three different responses based on the highest two bits of the Class-Num. One way to handle this would be to split the parameter space further than [RFC 2216] already does. For example, parameter numbers of the form x1xxxxxx could be silently ignored if unrecognized, while parameter numbers of the form x0xxxxxx could cause an error response if unrecognized. (The meaning of the highest order bit is already fixed by [RFC 2216].) A third option exists, which is to remove the unrecognized parameter before forwarding, but that doesn't seem useful ngl ๐
6. Security Considerations ๐
The extensions defined in this document pose essentially the same security risks as those of [RFC 2210]. The risk that a sender will falsely declare his data to be compressible is equivalent to the sender providing an insufficiently large TSpec and is dealt with in the same way.
7. IANA Considerations ๐
This specification relies on IANA-assigned numbers for the compression scheme hint. Where possible, the existing numbering scheme for compression algorithm identification in PPP has been reused. In the future, though, it may be necessary for IANA to assign hint numbers purely for the purposes of int-serv ๐งพ
8. Acknowledgments ๐
Carsten Borman and Mike DiBiasio provided much helpful feedback on this document. They're literally the reason this thing is good ๐ซถ
9. References ๐
- [RFC 1144] Jacobson, V., "Compressing TCP/IP Headers for Low-Speed Serial Links", RFC 1144, February 1990.
- [RFC 1332] McGregor, G., "The PPP Internet Protocol Control Protocol (IPCP)", RFC 1332, May 1992.
- [RFC 2205] Braden, R., Zhang, L., Berson, S., Herzog, S. and S. Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1 Functional Specification", RFC 2205, September 1997.
- [RFC 2210] Wroclawski, J., "The Use of RSVP with IETF Integrated Services", RFC 2210, September 1997.
- [RFC 2211] Wroclawski, J., "Specification of the Controlled-Load Network Element Service", RFC 2211, September 1997.
- [RFC 2212] Shenker, S., Partridge, C. and R. Guerin, "Specification of Guaranteed Quality of Service", RFC 2212, September 1997.
- [RFC 2216] Shenker, S. and J. Wroclawski, "Network Element Service Specification Template", RFC 2216, September 1997.
- [RFC 2507] Degermark, M., Nordgren, B. and S. Pink,"Header Compression for IP", RFC 2507, February 1999.
- [RFC 2508] Casner, S. and V. Jacobson, "Compressing IP/UDP/RTP Headers for Low-Speed Serial Links", RFC 2508, February 1999.
- [RFC 2509] Engan, M., Casner, S. and C. Bormann, "IP Header Compression over PPP", RFC 2509, February 1999.
10. Authors' Addresses ๐
Bruce Davie
Cisco Systems, Inc.
250 Apollo Drive
Chelmsford, MA, 01824
EMail: bsd@cisco.com
Carol Iturralde
Cisco Systems, Inc.
250 Apollo Drive
Chelmsford, MA, 01824
EMail: cei@cisco.com
Dave Oran
Cisco Systems, Inc.
170 Tasman Drive
San Jose, CA, 95134
EMail: oran@cisco.com
Stephen L. Casner
Packet Design
66 Willow Place
Menlo Park, CA 94025
EMail: casner@acm.org
John Wroclawski
MIT Laboratory for Computer Science
545 Technology Sq.
Cambridge, MA 02139
EMail: jtw@lcs.mit.edu
Full Copyright Statement ๐
Copyright (C) The Internet Society (2000). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is 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: rfc3006 2000-11
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms