패킷 손실 시 TCP 처리량 계산기 쉽게 이해하기 — 개념과 원리
이 계산기는 패킷 손실이 있을 때 TCP 연결 하나가 낼 수 있는 정상 상태 최대 처리량을 널리 알려진 매티스(Mathis) 공식으로 추정합니다. 회선이 빨라도 손실이 조금 있고 왕복 시간이 길면 왜 속도가 나오지 않는지 설명해 주며, WAN이나 VPN 구간에서 특정 손실률이 목표 속도에 비추어 허용 가능한지 판단할 때 씁니다.
계산 방법
처리량 ≤ (MSS ÷ RTT) × C ÷ √p, C ≈ 1.22
- MSS는 세그먼트당 TCP 데이터 크기(바이트)이며, 8을 곱해 비트로 바꿉니다.
- RTT는 왕복 시간으로, 밀리초로 입력하면 초로 환산합니다.
- p는 패킷 손실 확률이며, 백분율로 입력한 값을 100으로 나눕니다.
- 결과는 Mbps(10^6 bit/s)로 표시합니다.
원리
고전적인 TCP 혼잡 제어(Reno 계열 AIMD)는 RTT마다 윈도를 약 한 세그먼트씩 늘리고, 손실이 나면 절반으로 줄입니다. 매티스 등(1997)은 손실이 무작위·주기적으로 일어나면 이 톱니 모양이 평균적으로 약 √(3/(2p))개 세그먼트의 윈도가 된다는 것을 보였고, 여기서 상수 √1.5 ≈ 1.22가 나옵니다. 처리량은 윈도 ÷ RTT이므로 손실률의 제곱근에 반비례하고 RTT에 반비례합니다. RTT를 절반으로 줄이면 상한이 두 배가 되고, 손실을 4분의 1로 줄여도 두 배가 됩니다.
예제 풀이
- 입력: MSS 1,460바이트, RTT 50 ms, 손실 0.1%
- MSS를 비트로: 1,460 × 8 = 11,680비트
- MSS ÷ RTT: 11,680 ÷ 0.05 = 233,600 bit/s
- √p = √0.001 = 0.031623이므로 1.22 ÷ 0.031623 = 38.580
- 처리량: 233,600 × 38.580 = 9,012,238 bit/s ≈ 9.012 Mbps
| RTT (ms) | 최대 처리량 (Mbps) |
|---|---|
| 12.5 | 36.0489534 |
| 25 | 18.0244767 |
| 37.5 | 12.0163178 |
| 50 | 9.012238349 |
| 62.5 | 7.209790679 |
| 75 | 6.0081589 |
| 100 | 4.506119175 |
결과 해석
이 값은 회선 속도와 관계없는 연결 하나의 상한입니다. RTT 50 ms, 손실 0.1%인 1 Gbps 경로에서 고전적 TCP 단일 연결은 약 9 Mbps를 넘지 못합니다. 더 빠르게 하려면 손실이나 RTT를 줄이거나 연결을 여러 개 써야 합니다. 먼 거리에서 단일 연결로 수백 Mbps를 내려면 손실률이 0.01%보다 훨씬 낮아야 하는 경우가 많습니다.
흔한 실수
- 백분율 칸에 0.1 대신 비율 0.001을 넣는 경우
- 손실에 다르게 반응하는 CUBIC, BBR 같은 최신 알고리즘에 그대로 적용하는 경우
- 실제 한계가 윈도나 회선 속도인데 이 공식만 보는 경우(실제 속도는 여러 한계 중 가장 작은 값입니다)
자주 묻는 질문
패킷 손실이 조금만 있어도 TCP가 크게 느려지는 이유는 무엇인가요?
손실마다 윈도가 절반으로 줄고, 먼 경로에서는 이를 회복하는 데 여러 RTT가 걸리기 때문입니다.
BBR도 이 공식을 따르나요?
아닙니다. BBR은 대역폭과 RTT를 직접 추정하므로 무작위 손실에 훨씬 덜 민감합니다.
1.22는 어디서 나온 값인가요?
√(3/2)로, 주기적 손실에서 톱니 모양 윈도를 평균해 얻은 값입니다.
출처: Mathis, M., Semke, J., Mahdavi, J., Ott, T. (1997), The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm, ACM SIGCOMM Computer Communication Review 27(3) · IETF RFC 5681, TCP Congestion Control