pile·
네트워크·카테노이드카테노이드·

TCP BBR로 비디오 스트리밍 품질 개선

카테노이드가 VOD 와 라이브 HTTP 스트리밍 서버의 TCP 혼잡 제어를 CUBIC 에서 BBR 로 바꾸고 그 효과를 서버와 클라이언트 양쪽에서 측정한 기록이다. 서버 전송 속도가 평균 30퍼센트 이상 올랐고, 특히 백분위 90퍼센트 이상 구간에서 개선이 뚜렷했다. 측정 과정에서 nginx 의 request_time 이 왜 부적절한 지표인지도 짚는다.

핵심 포인트
  • 사용자에게 비디오를 전달하는 주류는 HTTP 프로그레시브와 HLS 이고 둘 다 TCP 기반이라, 대역폭을 얼마나 끌어 쓰느냐가 TCP 혼잡 제어에 달려 있다.
  • CUBIC 은 패킷 손실이 날 때까지 혼잡 윈도우를 키우고 손실 시 줄이는 방식이라 손실률이 오르면 전송 속도가 급락한다.
  • BBR 은 RTT 와 현재 대역폭 사용률을 보면서 RTT 가 오르지 않는 선의 최대 속도를 찾는다. 라우터 버퍼가 과도하게 큰 bufferbloat 환경에서 유리하다.
  • 적용은 sysctl 세 줄이면 된다. qdisc 를 fq 로, 혼잡 제어를 bbr 로 바꾸고 네트워크 서비스를 재시작한다. 서버 애플리케이션 수정은 필요 없다.
  • 24시간 실측 결과 BBR 의 delivery_rate 가 CUBIC 대비 38퍼센트 높았고, 패킷 손실과 재전송률은 약간 높지만 미미한 수준이었다.
상세 정리
  • 혼잡 제어가 없던 초기 TCP 는 연결이 많아지면 아무도 패킷을 못 보내는 혼잡 붕괴가 일어났고, 이를 막으려 알고리즘이 내장됐다.
  • 인터넷 기본은 New Reno 이지만 리눅스, 윈도우, macOS 커널의 기본 탑재는 CUBIC 이다. BBR 은 2016년 구글이 발표했고 리눅스 커널 4.9 부터 포함돼 있다.
  • 혼잡 윈도우는 지금 얼마나 더 보낼 수 있는지를 나타내며 리눅스에서는 세그먼트 수로 지정된다. 연결 직후 기본값은 10 세그먼트다.
  • 혼잡 제어는 송신에만 적용된다. 브라우저가 파일을 받을 때는 서버의 설정이, 업로드할 때는 사용자 PC 의 설정이 작동한다.
  • 상태 확인은 ss 명령으로 한다. 출력에 cubic 이나 bbr 문자열, cwnd, mss, delivery_rate 등이 나오고 BBR 은 bw 와 mrtt, pacing_gain, cwnd_gain 같은 내부 상태를 추가로 보여준다.
  • 커널 설정은 accept 호출 시점에 알고리즘이 결정되므로 값을 바꾼 뒤 네트워크를 쓰는 프로세스를 재시작해야 한다. 컨테이너 환경에서는 호스트 sysctl 이 하위 컨테이너에 함께 적용되는 점도 유의해야 한다.
  • 간단 테스트로 31MB 파일을 IDC 서버에서 사무실로 3회씩 받아보니 BBR 이 CUBIC 대비 40퍼센트 이상 빨랐다.
  • 그런데 실서버에서 nginx 의 request_time 으로 비교했더니 BBR 서버와 CUBIC 서버의 차이가 거의 없었다.
  • 원인은 request_time 이 마지막 바이트를 클라이언트에 쓴 시점까지를 재기 때문이다. 소켓에 쓴 시점과 실제 다운로드 완료 시점은 네트워크 전송과 재전송 때문에 크게 벌어질 수 있다.
  • 대안 지표는 delivery_rate 다. 클라이언트의 ack 까지 반영해 계산되고 혼잡 제어 알고리즘과 무관하게 항상 구해진다. BBR 은 이 값을 쓰고 CUBIC 은 쓰지 않는다.
  • nginx 로 이 값을 남기려면 소스를 고쳐야 해서, 대신 bpftrace 를 골랐다. BPF 프로그램을 직접 짜지 않고 스크립트로 쓸 수 있어서다.
  • bpftrace 예제 중 TCP 연결 종료 시 정보를 보여주는 스크립트를 고쳐 클라이언트 IP, 송수신 패킷, 손실과 재전송 패킷, 데이터 크기, delivery_rate 를 남겼다.
  • 백분위로 보면 75퍼센트 지점까지는 두 알고리즘 차이가 거의 없고 90퍼센트부터 BBR 이 앞서기 시작한다. 이 구간이 평균을 끌어올린 것이다.
  • 클라이언트 측은 플레이어가 수집하는 초기 버퍼링 완료 시간으로 확인했다. 여기서도 상위 백분위에서 BBR 이 더 좋았다.
  • 단점도 적는다. BBR 은 손실 시 전송률을 크게 낮추지 않아 손실과 재전송률이 올라가는 경향이 있고, CUBIC 같은 손실 기반 알고리즘과 같은 네트워크를 공유하면 대역을 더 차지한다는 점이 알려져 있다. 다만 실서비스 적용 후 눈에 띄는 변화는 없었다.
왜 읽나대용량 파일이나 스트리밍을 자체 서버로 내보내는 팀에게 커널 설정 세 줄로 얻는 효과와, 그 효과를 제대로 재는 방법까지 알려주는 실측 사례.
카테노이드
카테노이드 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 네트워크·cloudflare-blogCloudflare Blog·

    RFC 9234 BGP 롤 모델: 라우팅 누출 방지 표준 채택 현황 분석

    Cloudflare가 인터넷 BGP 라우팅 누출(route leak)을 프로토콜 수준에서 차단하는 RFC 9234 표준의 실제 채택 현황을 추적·분석했다. 이 표준은 BGP 세션에 역할(Role) 협상과 OTC(Only to Customer) 경로 속성을 추가해, 복잡한 운영자 정책 없이도 라우터 자체가 누출 경로를 자율적으로 거부할 수 있게 한다. 측정 과정에서 주요 Tier-1 사업자 2곳이 OTC 속성을 제거해 전파하는 문제가 발견됐다.

    요약 이어보기
    #network-security#bgp#internet-routing+2
  2. 네트워크·cloudflare-blogCloudflare Blog·

    일식이 인터넷 트래픽에 미친 영향: 아이슬란드·스페인·포르투갈 데이터 분석

    Cloudflare Radar가 2026년 8월 12일 20년 만에 유럽 본토를 가로지른 개기일식이 인터넷 트래픽에 미친 영향을 분석했다. 5분 단위 HTTP 요청 수를 직전 3주 수요일 중앙값과 비교해 일식 경로와 트래픽 감소 시점이 얼마나 정밀하게 일치하는지 정량화했다.

    요약 이어보기
    #traffic-analysis#cloudflare-radar#network-traffic+1