# An Analysis of MPTCP Congestion Control
## 7 MPTCP Congestion Control
### Analysing How Coupled CC Algorithms Perform  
LIA assumes that all subflows contain a shared bottleneck and therefore only increase the _cvond_ across all subflows as quickly as for a single TCP flow. We would expect that in a situation where the subflows are disjoint, that any situation causing one subflow to grow more slowly (e.g., congestion, reduced bandwidth, increased RTT) would cause collateral damage to the faster path. In this case, the performance of one subflow can cause the other subflow _cvond_ to grow more slowly which would limit its ability to compete against a single TCP flow. In OLIA, (4) a subflow is \"chosen\" as preferred (based on current performance) and resources will be shifted heavily towards one subflow. This has the potential to limit the possibility for MPTCP to ever achieve all the available bandwidth on the alternate subflow. As such, OLIA is not ideal in an environment where loss is not due to congestion but instead is random. In this case OLIA will work to push traffic to the less lossy path. Shifting traffic to the best path can lead to poor performance in the case where all paths are congested. Further, when the best path is congested, OLIA might not be able to at least achieve the throughput of the TCP flow on the best path. BALIA increments the window by a factor of \(\frac{a_{i}+1}{2}\times\frac{a_{i}+4}{5}\) to improve the performance of the low rate path. However, it still uses a coupled _cvond_ which limits the higher rate subflow when one path fails to meet the constraints. As such, the throughput achieved by a subflow still depends upon the throughputs of all the other subflows. Consider a scenario where two subflows follow disjoint paths. In this case, in LIA, we would expect the _cvond_ on each path to grow at approximately half the rate of TCP New Reno, given that the overall _cvond_ growth will be capped to a single TCP flow. In OLIA, the \(a\) parameter is set to zero (both paths have similar capacity and hence are considered bestpath--see Equation (5)). As such, the total window would increase by \(\frac{Max(\frac{c^{\text{\text{\text{\text{\text{rand}}}}}}{RT_{k}^{2}})}}{( \Sigma_{k}\frac{c^{\text{\text{\text{\text{rand}}}}}}{RT_{k}})^{2}}\) which is the same as in LIA. In BALIA, we expect a slightly higher growth rate on each path due to the multiplication of \(\alpha\). In the case of a shared bottleneck, this is the expected behaviour, however if the paths are disjoint, then each subflow will be at a disadvantage when competing against other - independent - flows sharing that path. In this case, we would expect MPTCP to underperform and not attain its fair share of the bandwidth. In order to further investigate these potential disadvantages, we wrote a simple event-based simulation to observe the influence of CC algorithms on \(c\text{\text{\text{\text{\text{cmd}}}}}\) growth. For TCP, the simulation code implemented the TCP NewReno CC algorithm (\(new_{c\text{\text{\text{\text{cmd}}}}}=c\text{\text{\text{\text{\text{ \text{cmd}}}}}}+1/c\text{\text{\text{\text{\text{cmd}}}}}\)). To simulate MPTCP connections, the LIA, OLIA and BALIA algorithms were implemented as described in Equations (1), (4) and (6). A simple FIFO queue with a length of 80 packets was modelled to create loss events for the CC algorithms to respond to. Two scenarios were simulated, one where an MPTCP connection with two subflows were executed over a disjoint path. The second scenario involved an MPTCP connection with two subflows and a TCP connection with single flow. One of the MPTCP subflows (subflow 1) and the TCP flow share a bottleneck link to the destination while the second MPTCP subflow traverses a second, independant link.