현대적 네트워크와 차세대 혼잡 제어 (BBR & QUIC)
loss based algorithm은 패킷 손실(loss)에 의존하기 때문에 라우터/스위치에 버퍼에 많은양의 패킷이 쌓여 손실되지않고 레이턴시만 늘어나는 문제가 있었다.
그래서 이번에는 목표가 패킷 손실에 의존을 버리고, 네트워크 상태를 능동적으로 모델링하는 최신 기술과 차세대 프로토콜을 알아보겠다.
페러다임 변화 Loss != Congestion #
과거에는 패킷이 유실되면 무조건 네트워크가 혼잡해서 라우터가 버렸다라고 생각한다.
하지만, 현대 네트워크는 다르다.
무선 구간의 잡음: Wi-Fi나 LTE/5G에서는 혼잡하지 않아도 전파 간섭으로 패킷이 깨질 수 있다. loss based는 이때도 속도를 줄여버리는 오판을 한다.
Bufferbloat: 라우터 버퍼가 너무 커서 혼잡한데도 패킷 손실이 발생하지 않고 지연시간만 늘어난다. loss based는 이때 혼잡 감지를 못하고 계속 데이터를 밀어넣는다.
결론적으로 더 이상 패킷 손실만으로는 혼잡을 판단할 수 없다, 대역폭과 지연시간을 직접 측정하자라는 결론이 나왔다.
Google BBR (Bottleneck Bandwidth and Round-trip propagation time) #
구글이 개발한 model-based 혼잡 제어 알고리즘이다.
BBR은 네트워크를 물이 흐르는 파이프라인이라고 가정하고 두 가지 핵심 변수를 찾으려 노력한다.
- BtlBw(Bottleneck Bandwidth): 파이프의 가장 좁은 구간(최대 전송 속도)
- RTprop(Round-Trip Propagation): 파이프의 길이 (최소 물리적 지연 시간)
- BDP(Bandwidth-Delay Product): 파이프를 가득 채우되 넘치니는 않는 이상적인 데이터양 =
Kleinrock's Optimal Operation Point #
BBR의 목표는 라우터 버퍼(queue)를 비운 상태에서 최대 속도를 내는것이다.
Probing(탐색 과정)
- ProbeBW: 주기적으로 데이터를 더 많이 보내본다. 속도가 늘어나면 대역폭은 남아있고 지연시간만 늘어나면 꽉 찬것
- ProbeRTT: 주기적으로 데이터를 확 줄여서 큐를 비우고 순수한 통신 지연 시간을 측정한다.
Long Fat Network에서 효율성 #
국제 해제 케이블처럼 대역폭은 크고 거리는 먼 네트워크에서, CUBIC은 패킷 손실 하나에 윈도우를 확 줄여버려 속도 회복에 한세월이 걸린다.
BBR은 패킷 손실이 발생해도 이건 noise일 뿐이라고 판단하고 대역폭은 충분하다고 판단해 속도를 줄이지 않고 높은 처리량을 유지한다.
BBR vs CUBIC
BBR의 문제점은 버퍼를 점유하지 않으려 하지만, 패킷 손실을 무시하고 데이터를 밀어넣는 성향이 있다. 반면 CUBIC은 손실이 나면 바로 물러난다.
현상으로 같은 망의 BBR과 CUBIC이 섞여있으면 BBR의 대역폭을 독식하고 CUBIC은 구석으로 몰리는 현상이 발생한다. (이를 개선하기 위해서 BBRv2에서는 패킷 손실도 어느정도 고려하게 되어있다)
QUIC 혼잡 제어 http3 #
tcp가 os kernel에 박혀있어 수정이 어려웠던 점을 개선하기 위해 udp 위에서 돌아가는 QUIC이라는 프로토콜이 등장했다.
tcp는 혼잡 제어 알고리즘을 바꾸려면 전 세계의 window linux os kernel 업데이트가 필요했지만 quic으로 크롬 브라우저, 유튜브 앱 업데이트 만으로 새로운 알고리즘을 즉시 배포할 수 있었다. 페북이나 구글이 자신들의 서비스에 독자적인 알고리즘 실험이 매우 쉬웠음
Pluggable Congestion Control로 교체 가능한 구조다. wifi 환경에서는 패킷 손실이 잦아 bbr, 사내 유선망에선 cubic 이 모든 전환이 애플리케이션 레벨에서 설정이 가능하다.
더 정확한 RTT 측정이 간으한데 tcp는 재전송된 패킷의 ack가 오면 원래 패킷 응답인지 재전송 패킷 응답인지 식별이 모호했다.
QUIC은 모든 패킷에 교유한 번호 packet number를 붙여 재전송시에도 번호 증가해, rtt를 정확하게 계산할 수 있었다.