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
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.