![[Network] Fairness](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgOs7S%2FbtsNsm2cRXU%2FavXK0DskHZhdozHQ9n6TG1%2Fimg.jpg)
📡 Fairness
왜 Fairness가 필요한가?
지금까지 TCP Congestion control는 한 연결이 자신의 속도를 네트워크 상황에 따라 조절하는 방식에 집중했다. 하지만 현실에서는 수많은 TCP 연결이 동시에 같은 네트워크 자원을 사용한다. 이때 누군가 혼자만 속도를 올리고, 다른 연결이 손해를 본다면?
바로 여기서 Fairness(공정성) 개념이 필요하다. Fairness는 여러 연결이 네트워크를 서로 배려하며 사용하도록 만드는 TCP 설계 철학이다.
bottleneck link
대부분의 네트워크 경로에는 bottleneck link(병목 링크)가 존재한다. 경로 중 가장 대역폭이 낮은 지점으로, congestion이 가장 자주 발생하는 곳이다. bottleneck link를 지나려는 여러 TCP 연결이 있을 때, 이상적인 상황은 모든 연결이 대역폭을 공평하게 나눠 갖는 것이다.
bottleneck link의 라우터에는 거의 항상 패킷 큐가 형성된다. 이 큐가 넘치면 패킷 손실이 발생한다. TCP 송신률이 bottleneck link의 용량을 초과하면, 초과분의 패킷은 큐에 쌓이게 된다. 이로 인해 RTT는 증가하지만, 실제 종단 간 처리량은 병목 링크의 용량 이상으로 증가하지 않는다.
병목 링크의 대역폭이 100Mbps이고, 4개의 TCP 연결이 있다면 각 연결은 25Mbps씩 가져가는 게 공정한 상태일 것이다.
TCP는 이를 위해 cwnd를 기반으로 자신의 전송 속도를 조절해 공정한 자원 사용을 유도한다.
이상적인 상태는 "pipe just full, but not fuller"이다. bottleneck link를 완전히 활용하되, 과도한 큐잉은 피하는 것이 목표다. 이를 바탕으로 모던 TCP 구현은 패킷 손실에만 의존하지 않고 RTT 변화도 모니터링해 혼잡을 조기에 감지하고 대응하려고 한다.
TCP Fairness
TCP 혼잡 제어의 중요한 목표 중 하나는 여러 TCP 연결이 네트워크 자원을 공정하게 나누어 사용하도록 하는 것이다. 특히 $K$개의 TCP 연결이 동일한 병목 링크(대역폭 $R$)를 공유할 때, 이상적으로는 각 연결이 평균적으로 $R/K$의 처리량을 얻어야 한다.
TCP의 AIMD 알고리즘은 공정성을 달성하는 데 비중있는 역할을 한다. 두 개의 TCP 세션이 경쟁하는 상황을 생각해보자.
- 각 연결은 혼잡이 감지되지 않을 때 가산적으로$_{additively}$ 혼잡 윈도우를 증가시킨다. 이는 처리량 측면에서 볼 때 45도 각도의 기울기로 증가하는 것을 의미한다.
- 혼잡이 발생하면(패킷 손실 발생 시), 두 연결 모두 승법적으로$_{multiplicatively}$ 처리량을 감소시킨다. 구체적으로는 혼잡 윈도우를 절반으로 줄인다.
이런 메커니즘은 시간이 지남에 따라 두 연결의 처리량이 공평한 대역폭 공유 상태, 즉 대각선(45도 선)을 중심으로 진동하게 만든다. 이론적으로 AIMD는 다음과 같은 이상적인 가정 하에서 공정성을 보장한다.
- 모든 연결이 같은 RTT를 가질 때
- 연결 수가 고정되어 있을 때
- 모든 연결이 혼잡 회피 단계에 있을 때
현실에서는 깨지는 공정성
하지만 모든 네트워크 애플리케이션이 ‘공정하게’ 행동하지는 않는다. 멀티미디어 앱들은 종종 congestion control이 없는 UDP를 사용한다. congestion이 발생해도 전송률을 줄이지 않기 때문에, 공정하게 반응하는 TCP를 밀어낸다.
UDP에는 혼잡 제어 메커니즘이 내장되어 있지 않으므로, UDP 트래픽은 네트워크 혼잡 상황에서도 자신의 전송률을 줄이지 않는다. 반면 TCP는 congestion에 대응해 전송률을 감소시킨다. 이렇게 되면 UDP 트래픽이 TCP 트래픽을 밀어내는 현상이 발생할 수 있다. 정직한 TCP만 손해를 본다. 누군가가 관리하는 사람이 없기 때문에 congestion control의 사용을 강제하지 않는다.
애플리케이션은 두 호스트 간에 여러 개의 병렬 TCP 연결을 열 수 있다. 대표적인 예가 웹 브라우저다.
대역폭이 $R$인 병목 링크에 이미 9개의 TCP 연결이 존재하고, 새로운 애플리케이션이
- 1개의 TCP 연결을 열면 $R/10$
- 11개의 TCP 연결을 열면 $R/2$
를 차지하게 된다. TCP가 연결 단위로 공정성을 보장하기 때문에 발생하는 구조적 한계다. 결과적으로 애플리케이션 간의 진정한 공정성이 무너진다.
요약
- TCP Fairness는 네트워크 자원을 모든 연결이 공평하게 나누어 사용하는 것을 목표로 한다.
- AIMD 알고리즘은 이러한 공정성을 수렴시키는 설계 원리다.
- 그러나 UDP 트래픽과 멀티 연결 전략 같은 현실적 요인들은 공정성을 쉽게 깨뜨린다.
- TCP는 연결 단위의 공정성은 제공하지만, 애플리케이션 단위의 공정성은 보장하지 않는다.
references
Computer Networking: A Top-Down Approach, 8th edition
COMP0414 수업 내용
'CSE > 네트워크 (network)' 카테고리의 다른 글
[Network] UDP (0) | 2025.04.20 |
---|---|
[Network] multiplexing, demultiplexing (0) | 2025.04.20 |
[Network] TCP Congestion control (0) | 2025.04.20 |
[Network] HTTP/0.9 (0) | 2025.02.22 |
[Network] HTTP와 HTTPS (3) | 2025.02.04 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!