우선 TCP가 fair한지 아닌지를 판단하기 위해서 TCP의 특징인 congestion control(혼잡 제어)에 대해서 알고 있을 필요가 있습니다.
TCP는 Time-out 혹은 3 Duplicative Acks와 같은 혼잡 상황을 detect하여 상황에 맞게 Slow Start(SS), Addictive Increase(AI), Multiplicative Decrease(MD)와 같은 과정들을 거치게 됩니다. 바로 이 전체 과정을 Congestion control, 혼잡 제어라고 합니다.
이는 UDP와 구분되는 TCP만의 특징으로, UDP는 혼잡한 상황인지 아닌지를 detect하지 않고 그냥 보내는데에 비해, TCP는 상황에 맞게 보내는 양을 유연하게 조절하며 혼잡을 최소화합니다.
Congestion Control의 상황을 작은 그림으로 요약하면 아래와 같습니다.
2개의 연결을 다루는 상황입니다. x축은 첫번째 연결의 throughput, y축은 두번째 연결의 throughput입니다. 두개의 연결 각각의 RTT는 같다는 가정 하에 그려진 그림입니다.
y=x 를 보면, 첫번째 연결과 두번째 연결의 throughput이 같을 때입니다. 이때를 equal bandwidth share라고 합니다.
x+y=R(capacity) 를 보면, 두개의 연결이 capacity를 사이좋게 나눠서 사용하고 있을 때입니다.