PPP Multilink lets us bundle multiple physical interfaces into a single logical interface. We can use this to load balance on layer 2 instead of layer 3. Take a look at the following picture so I can give you an example:
Above we have two routers connected to each other with two serial links. If we want to use load balancing, we could do this on layer 3, just configure a subnet on each serial link and activate both links in a routing protocol like EIGRP or OSPF.
When we use PPP multilink, we can bundle the two serial links into one logical layer 3 interface and we’ll do load balancing on layer 2. PPP multilink will break the outgoing packets into smaller pieces, puts a sequence number on them, and sends them out to the serial interfaces. Another feature of PPP multilink is fragmentation. This could be useful when you are sending VoIP between the two routers.
Most voice codecs require a maximum delay of 10 ms between the different VoIP packets. Let’s say the serial link offers 128 Kbit of bandwidth…how long would it take to send a voice packet that is about 60 bytes?
60 bytes * 8 = 480 bits / 128.000 = 0.00375.
So it takes roughly 3.7 ms to send the voice packet, which is far below the required 10 ms. We can run into issues, however when we also send data packets over this link. Let’s say we have a 1500 bytes data packet that we want to send over this link:
1500 bytes * 8 = 12.000 / 128.000 = 0.093.
So it will take about 93 ms to send this packet over this 128 Kbit link. Imagine we are sending this data packet, and a voice packet arrives at the router, it will have to wait for at least 93 ms before the data packet is out of the way…exceeding our 10 ms maximum delay.
Multilink PPP offers a solution by fragmenting the data packets and interleaving the voice packets between the data fragments. This way, a large data packet will not delay a voice packet for too long.
Anyway, now you have an idea of what multilink PPP is about, let me show you how to configure it. I will use the following topology:
I am using two routers with only a single serial link between them. Even though it’s called multilink PPP, you can still configure it on only one link. This is how we configure it:
R1(config)#interface virtual-template 1 R1(config-if)#bandwidth 128 R1(config-if)#ip address 192.168.12.1 255.255.255.0 R1(config-if)#fair-queue R1(config-if)#ppp multilink fragment delay 10 R1(config-if)#ppp multilink interleave
R2(config)#interface virtual-template 1 R2(config-if)#bandwidth 128 R2(config-if)#ip address 192.168.12.2 255.255.255.0 R2(config-if)#fair-queue R2(config-if)#ppp multilink fragment delay 10 R2(config-if)#ppp multilink interleave
We will use a virtual-template to configure the IP addresses and to configure PPP multilink. The
ppp multilink fragment delay commands let us configure the maximum delay. In my example, I’ve set it to 10 ms. Don’t forget to use
ppp multilink interleave or interleaving won’t work. I’m using WFQ to prioritize voice traffic before data traffic using the
fair-queue command. Interleaving will occur between WFQ and the FIFO queue and has two queues, a normal and a priority queue. non-fragmented traffic goes to the priority queue, and fragmented traffic will use the normal queue. Now let’s link the virtual template to PPP multilink:
R1(config)#multilink virtual-template 1
R2(config)#multilink virtual-template 1
And last but not least, configure the interfaces to use PPP multilink: