QoS on Slow-Speed Links
In this section, you make the most of your limited bandwidth on lower-speed WAN interfaces. Specifically, you are introduced to compression technologies, which send fewer bits across the link, and link fragmentation and interleaving technologies, which fragment large payloads to reduce the serialization delay that is experienced by smaller payloads.
Tools for Using Bandwidth Efficiently
The two broad categories of compression are as follows:
Payload compression—Reduces the payload size, using approaches such as STAC, Predictor, or MPPC.
Header compression—Reduces the size of the TCP and RTP headers.
The goal of compression technologies is to increase the throughput over a WAN link while reducing the delay. However, particularly with payload-compression approaches, the time that is required by lower-end routers to run the compression algorithm can increase the overall delay. Fortunately, these routers can have hardware acceleration modules that you can add to dramatically improve the router’s ability to perform compression in a timely manner. For example, a Compression Advanced Integration Module (CAIM) is available to offload compression tasks from 2600 Series routers.
These Quick Reference Sheets, however, focus on header compression. With header compression, a header typically is reduced from approximately 40 bytes in size to approximately 3 to 5 bytes [for Transport Control Protocol (TCP) header compression] or 2 to 4 bytes [for Real-Time Transport Protocol (RTP) header compression]. However, the routers technically are not doing compression. Rather, these routers cache information that does not change during a conversation, such as source and destination IP addresses and TCP/UDP port numbers. The compressed header then carries such information as UDP checksums and a session context ID (CID), which identifies which flow the packet is a part of.
Another QoS mechanism that is useful for slower link speeds is Link Fragmentation and Interleaving (LFI). Consider a 1500-byte data frame that is being sent out of a 64-kbps serial interface. The interface, in this case, needs 187 ms just to place that data frame on the wire. If a smaller packet were sitting behind that data frame (for example, a voice frame), that frame might have already experienced excessive “serialization” delay before it was ever placed on the wire. LFI mechanisms fragment larger payloads to specified fragment sizes and then interleave the smaller payloads in among the fragments, greatly reducing the serialization delay that is experienced by the smaller payloads.
The three primary LFI mechanisms supported by Cisco are as follows:
Multilink PPP (MLP)—Used on PPP links
FRF.12—Used on Voice over IP over Frame Relay (VoIPovFR) links
FRF.11 Annex C—Used on Voice over Frame Relay (VoFR) links
TCP and RTP Header Compression
Although header compression has been supported in the IOS for some time, IOS 12.2(13)T introduced Class-Based Header (CB-Header) Compression, which allows you to configure compression using the three-step MQC approach. CB-Header Compression is the focus of these Quick Reference Sheets.
Before configuring header compression, realize that header compression is most effective for slow links that are carrying packets with relatively small payloads, such as voice or Telnet traffic.
CB-Header Compression can be configured from policy-map-class configuration mode with the following command:
Router(config-pmap-c)#compression header ip [tcp | rtp]
Note that if you do not specify tcp or rtp, this command performs both TCP and RTP header compression. Unlike previous versions of header compression, you do not need to specify the maximum number of simultaneous compressed sessions supported. With CB-Header Compression, the number of connections is determined automatically by the IOS.
Consider the following CB-Header Compression example:
Router(config)#class-map VOICE Router(config-cmap)#match protocol rtp Router(config-cmap)#exit Router(config)#policy-map COMPRESS Router(config-pmap)#class VOICE Router(config-pmap-c)#compression header ip rtp Router(config-pmap-c)#exit Router(config-pmap)#exit Router(config)#interface serial 0/1 Router(config-if)#service-policy output COMPRESS
In this example, you are matching voice traffic (that is, RTP packets) using NBAR. Then, you are applying CB-Header Compression to those RTP packets with the COMPRESS policy-map. The policy-map is then applied outbound to interface serial 0/1. Because you configured header compression using the MQC approach, the same verification commands that you learned earlier (that is, show policy-map and show policy-map interface interface-identifier) are still applicable.
Using MLP and FRF.12 for LFI
The serialization delay goal that you have when configuring an LFI mechanism is in the range of 10 to 15 ms. To determine the serialization delay for a specific frame size on a specific link speed, use the following formula:
Serialization Delay = (Frame_Size * 8) / Link_Speed
The reason that you multiply the frame size by 8 is to convert bytes into bits. Consider a frame size of 512 bytes on a link speed of 128 kbps, as follows:
Serialization Delay = (512 * 8) / 128 = 32 ms
Although Cisco supports FRF.11 Annex C as an LFI mechanism for VoFR networks, these Quick Reference Sheets focus on the configuration of Multilink PPP (MLP) and FRF.12. First, consider the configuration of MLP.
Multilink PPP, by default, fragments traffic. You can leverage that fact and run MLP, even over a single link. You perform the MLP configuration under a virtual multilink interface, and then you can assign one or more physical interfaces to the multilink group. The physical interface does not have an IP address assigned, but the virtual multilink interface does. Typically, you use a single interface as a member of the multilink group. Following is the syntax to configure MLP:
Router(config)#interface multilink multilink_interface_number
(Creates a virtual multilink interface.)
Router(config-if)#ip address ip_address subnet_mask
(Assigns an IP address to the virtual multilink interface.)
(Configures fragmentation on the multilink interface.)
Router(config-if)#ppp multilink interleave
(Shuffles the fragments together.)
Router(config-if)#ppp fragment-delay serialization_delay
(Specifies how long it will take for a fragment to exit the interface, in milliseconds. Note that the IOS automatically calculates the appropriate packet size to meet the specified serialization delay.)
(Enables ppp encapsulation on the physical interface.)
Router(config-if)#no ip address
(Removes the IP address from the physical interface.)
(Associates the physical interface with the multilink group.)
In the following example, the goal is to configure MLP on routers R1 and R2 so that you are achieving a serialization delay of 10 ms on their serial 0/0 interfaces.
R1(config)#interface multilink 1 R1(config-if)#ip address 10.1.1.1 255.255.255.0 R1(config-if)#ppp multilink R1(config-if)#ppp multilink interleave R1(config-if)#ppp fragment-delay 10 R1(config-if)#exit R1(config)#interface serial 0/0 R1(config-if)#encapsulation ppp R1(config-if)#no ip address R1(config-if)#multilink-group 1 R2(config)#interface multilink 1 R2(config-if)#ip address 10.1.1.2 255.255.255.0 R2(config-if)#ppp multilink R2(config-if)#ppp multilink interleave R2(config-if)#ppp fragment-delay 10 R2(config-if)#exit R2(config)#interface serial 0/0 R2(config-if)#encapsulation ppp R2(config-if)#no ip address R2(config-if)#multilink-group 1
To verify the MLP configuration, you can use the show interfaces multilink interface-identifier command. The output from this command shows how many interleaves have been performed. Therefore, this is an excellent command to verify that MLP is indeed functioning.
FRF.12 is configured as part of a Frame Relay map-class. Unlike MLP, where you can specify a desired serialization delay, with FRF.12, you must specify the size that you want to fragment frames to. As a rule of thumb, divide the line speed by 800 to get a fragment size that results in a 10-ms serialization delay. For example, on a 64,000-bps link, divide 64,000 by 800 to get 80. This means that if you specify a fragment size of 80, your fragments will have a serialization delay of 10 ms.
Following is the syntax to configure FRF.12:
Router(config)#map-class frame-relay name
(Creates the map-class and enters map-class configuration mode.)
Router(config-map-class)#frame-relay fragment fragment-size
(Specifies the size to which FRF.12 will fragment frames. Note that the IOS does not automatically calculate the fragment size based on a specified delay, as the MLP mechanism did.)
(Enables Frame Relay traffic shaping on the physical interface.)
Router(config-if | config-subif)#frame-relay class name
(Associates the map-class with an interface or a subinterface.)
(Associates the map-class with a Frame Relay DLCI.)
In the following example, you configure FRF.12 to create a serialization delay of 10 ms on a link that is clocked at a rate of 64 kbps. The map-class then is applied to DLCI 101. Because FRF.12 is configured as a part of Frame Relay traffic shaping, you also specify a CIR of 64 kbps and a Bc of 640.
R1(config)#map-class frame-relay FRF12-EXAMPLE R1(config-map-class)#frame-relay cir 64000 R1(config-map-class)#frame-relay bc 640 R1(config-map-class)#frame-relay fragment 80 R1(config-map-class)#exit R1(config)#interface serial 0/1 R1(config-if)#frame-relay traffic-shaping R1(config-if)#interface serial 0/1.1 point-to-point R1(config-subif)#frame-relay interface-dlci 101 R1(config-fr-dlci)#class FRF12-EXAMPLE
You can use the show frame-relay fragment command to view the fragment size that is being used. Also, use the show frame-relay pvc command to view the fragment size that is used on a particular DLCI.