FAIRNESS - rohithsaji/TCP-BBRv1 GitHub Wiki

1. TCP Fairness

Congestion control mechanisms for new network transmission protocols or peer-to-peer applications must interact well with TCP. TCP fairness requires that a new protocol receive a no larger share of the network than a comparable TCP flow. This is important as TCP is the dominant transport protocol on the Internet, and if new protocols acquire unfair capacity they tend to cause problems such as congestion collapse. This was the case with the first versions of RealMedia's streaming protocol: it was based on UDP and was widely blocked at organizational firewalls until a TCP-based version was developed. TCP throughput unfairness over WiFi is a critical problem and needs further investigations.

2. Fairness measure

Fairness measures or metrics are used in network engineering to determine whether users or applications are receiving a fair share of system resources. There are several mathematical and conceptual definitions of fairness.

We used Jain's fairness index to measure the fairness of the topology

jains fairness index

credits: https://en.wikipedia.org/wiki/Fairness_measure

Here xi is the throughput for each connection

In our case we are dealing with 20 connections

3. Throughput for the topology

The results generated by using TCPBbr:

Average throughput for the topology flows: 1.20 Mbps

Aggregate user-level throughput for flows through Bottleneck: 23.921 Mbps

The throughput for each of the 20 connections is as follows:

Connection number 0: 1.448 Mbps

Connection number 1: 0.973056 Mbps

Connection number 2: 0.393856 Mbps

Connection number 3: 0.613952 Mbps

Connection number 4: 0.590784 Mbps

Connection number 5: 0.973056 Mbps

Connection number 6: 0.98464 Mbps

Connection number 7: 0.961472 Mbps

Connection number 8: 0.973056

Connection number 9: 0.961472 Mbps

Connection number 10: 0.92672 Mbps

Connection number 11: 0.98464 Mbps

Connection number 12: 0.973056 Mbps

Connection number 13: 0.98464 Mbps

Connection number 14: 1.59859 Mbps

Connection number 15: 1.86502 Mbps

Connection number 16: 1.92294 Mbps

Connection number 17: 1.93453 Mbps

Connection number 18: 1.92294 Mbps

Connection number 19: 1.93453 Mbps

The results generated by using TCPNewReno:

Average throughput for the topology flows: 1.19 Mbps

Aggregate user-level throughput for flows through Bottleneck: 23.794 Mbps

The throughput for each of the 20 connections is as follows:

Connection number 0: 1.01939 Mbps

Connection number 1: 1.2279 Mbps

Connection number 2: 1.19315 Mbps

Connection number 3: 1.06573 Mbps

Connection number 4: 1.25107 Mbps

Connection number 5: 1.30899 Mbps

Connection number 6: 1.32058 Mbps

Connection number 7: 1.45958 Mbps

Connection number 8: 0.544448 Mbps

Connection number 9: 1.32058 Mbps

Connection number 10: 1.59859 Mbps

Connection number 11: 1.30899 Mbps

Connection number 12: 1.58701 Mbps

Connection number 13: 1.25107 Mbps

Connection number 14: 1.25107 Mbps

Connection number 15: 1.25107 Mbps

Connection number 16: 1.23949 Mbps

Connection number 17: 0.822464 Mbps

Connection number 18: 0.996224 Mbps

Connection number 19: 0.776128 Mbps

4. Fairness calculated

The fairness we got for the bottleneck topology simulation with TCP BBR is 0.859

The fairness we got for the bottleneck topology simulation with TCPNewReno is 0.957

5. To run the code

use this command to run with TCPBbr

/waf --run scratch/TCPBbr-fairness.cc

use this command to run TCPNewReno

./waf --run "scratch/TCPBbr-fairness --tcpTypeId=TcpNewReno"

6. Conclusion

So from the results we got it can be said that TCPBbr is less fair when it comes to wireless networks(Wireless Bottleneck). TCPNewReno has a good fairness value.