핵심 인사이트 (3줄 요약)
- 본질: CUBIC(큐빅)은 우리가 지금 유튜브를 4K로 펑펑 볼 수 있게 만들어준 현대 안드로이드, 리눅스, 윈도우 OS의 기본(Default) TCP 혼잡 제어 알고리즘으로, 고속 장거리 통신망(10Gbps 해저 케이블) 환경에서 타호/레노의 굼벵이 같은 속도 회복 능력을 박살 내기 위해 탄생한 천재적인 수학 공식이다.
- 레노(Reno)의 한계: 레노는 사고(패킷 유실)가 나서 속도(CWND)를 반 토막 낸 뒤에, 다시 원래 속도를 회복하려고 "+1, +1, +1"씩 선형으로 찔끔찔끔 기어 올라갔기 때문에 초고속 인터넷에서는 예전 속도를 복구하는 데 한 세월(수십 초)이 걸리는 치명적 결함이 있었다.
- 3차 함수(Cubic)의 널뛰기 마법: CUBIC은 사고가 나서 속도가 꺾인 직후, "아까 터졌던 그 한계선(W_max)" 근처까지는 3차 함수 그래프를 타고 미친 듯이(지수적으로) 속도를 확 끌어올려 단숨에 복구해 버리고, 한계선에 다다르면 스무스하게 눈치를 보며 속도를 조절하는 공격적이고 우아한 가속력을 자랑한다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
-
개념: TCP Reno의 선형적(Linear) 윈도우 증가 방식이 고대역폭-장지연 네트워크(LFN)에서 대역폭을 낭비하는 문제를 해결하기 위해, 혼잡 윈도우 크기를 3차 함수(Cubic function) 기반으로 계산하여 팽창시키는 현대 OS의 기본 혼잡 제어 알고리즘.
-
필요성: 2000년대 중반, 기가비트(1Gbps) 인터넷이 보급되었다. 한국에서 미국으로 10GB짜리 롤(LOL) 클라이언트를 다운받는다. 가다가 패킷 1개가 튀어서 속도(CWND)가 반 토막 났다. 기존 레노(Reno) 공식에 따르면, 이 반 토막 난 속도를 다시 1Gbps까지 +1씩 끌어올리려면 무려 '몇 시간' 동안 영수증을 주고받아야 한다는 계산이 나왔다! "야!! 요즘 선로가 얼마나 빵빵한데 언제 +1씩 찔끔찔끔 올리고 자빠졌어! 사고 나기 직전의 아까 그 속도가 어차피 이 선로의 한계점이니까, 아까 그 속도까지는 묻고 더블로 확 올려버리고 한계점 근처에서만 조심하게 만들자!!"
-
💡 비유: CUBIC은 **"기억상실증에 안 걸린 롤러코스터"**와 같습니다.
- Reno (바보): 꼭대기(100km/h)에서 떨어져 속도가 반 토막(50km/h) 나면, 무조건 시속 1km씩 천천히 가속합니다. 다시 100km/h로 올라가는 데 한 세월이 걸립니다.
- CUBIC (천재): 100km/h에서 터진 걸 머릿속에 기억(
W_max)해 둡니다. 절반(50km/h)으로 떨어지자마자 엑셀을 풀로 밟아 1초 만에 90km/h까지 단숨에 확 튀어 오르고, 90부터 100 사이에서만 브레이크를 살살 밟으며 눈치를 봅니다.
📢 섹션 요약 비유: CUBIC은 다이어트 요요 현상의 **"체중 복귀 속도"**입니다. 레노가 1년 동안 힘겹게 밥을 줄여 살을 뺐는데 치팅데이 한 번(Drop)에 요요가 와서 다시 살 빼는 데 1년이 걸린다면, CUBIC은 살이 찌자마자 극단적 단식을 통해 원래 체중(
W_max) 근처로 단 며칠 만에 수직 하강하여 원래의 몸매(최대 속도)를 즉각 되찾는 압도적인 회복력을 보여줍니다.
Ⅱ. CUBIC의 3차 함수와 공격적인 대역폭 쟁탈전 (Deep Dive)
1. CUBIC 곡선의 3단계 (수학적 예술)
CUBIC은 이름 그대로 3차 함수 곡선 $y = x^3$ 의 S자 모양(정확히는 눕혀놓은 모양)을 그리며 CWND를 뻥튀기한다. 아까 사고가 터졌던 직전의 최대 속도를 $W_{max}$ 라고 부른다.
- 오목한 폭풍 가속 (Concave region): 사고가 터져서 절반으로 꺾인 직후다. "어차피 아까 $W_{max}$까지는 안전하게 달렸잖아?"라며 3차 함수 그래프를 타고 수직으로 미친 듯이 속도를 끌어올린다. 단숨에 $W_{max}$ 턱밑까지 도착한다.
- 평탄한 눈치 보기 (Plateau region): 속도가 $W_{max}$ 근처에 다다랐다. "오, 여기서 아까 사고 났었지? 조심해!" 이때 곡선이 평평해지며 아주 조심조심 속도를 늘린다. (안정성 확보).
- 볼록한 한계 돌파 (Convex region): 평평하게 가는데도 안 막히고 영수증(ACK)이 잘 온다? "헐? 통신사가 공사해서 길 더 넓혔나 보네? 그럼 나 한계 돌파한다!!" $W_{max}$를 뚫고 다시 3차 함수 곡선으로 미친 듯이 하늘을 향해 가속한다.
┌─────────────────────────────────────────────────────────────┐
│ TCP Reno vs CUBIC의 속도 복구 그래프 차이 │
├─────────────────────────────────────────────────────────────┤
│ CWND 크기 │
│ W_max | /| (사고) (Cubic 곡선) /| │
│ | / | ___.....---* | │
│ | / | ..---* | │
│ | / | _.-* | │
│ 1/2 |/ └─ * ─ * ─ (Reno: 개답답한 +1) | │
│ |____________________________________ 시간(RTT) │
│ │
│ ▶ Reno: 사고 난 뒤 1/2 지점에서 +1씩 오르다 보니 1시간 걸림. │
│ ▶ CUBIC: 사고 나자마자 W_max 근처로 확 치솟고(Concave), 거기서 │
│ 눈치 살짝 보다가 다시 미친듯이 돌파함(Convex). │
│ ▶ 결과: 우리가 쓰는 1Gbps 랜선 대역폭의 100%를 꽉 채워 쓸 수 있다! │
└─────────────────────────────────────────────────────────────┘
2. RTT 공평성의 파괴 (이기적인 알고리즘)
CUBIC은 기존의 룰을 파괴했다.
- 기존 Reno는 영수증(ACK)이 1개 와야 속도를 1 올렸다. 그래서 핑(RTT)이 10ms로 짧은 한국 사람은 핑이 200ms인 미국 사람보다 ACK를 더 자주 받아 속도를 혼자 다 빨아먹었다(RTT Fairness 문제).
- CUBIC의 쿨함: CUBIC의 3차 함수 공식은 ACK 개수 따위 신경 안 쓴다. 오직 **"마지막으로 사고(Drop)가 터진 후 흐른 '절대 시간(Time)'"**만을 변수로 쓴다. 즉, 한국 사람이든 미국 사람이든 시간이 흐르면 3차 함수 곡선을 타고 다 같이 공평하게 속도가 확확 오르므로, 장거리 통신망(LFN)의 속도 저하 문제를 완벽히 해결했다.
3. 현대 통신의 지배자
오늘날 안드로이드 스마트폰, 리눅스 서버, 윈도우(업데이트 이후) 등 우리가 쓰는 99%의 기계는 내부 커널 세팅에 tcp_congestion_control = cubic 으로 박혀 있다. 즉, 우리가 구글 드라이브나 넷플릭스를 쾌적하게 쓰는 것은 모두 이 CUBIC 덕분이다.
📢 섹션 요약 비유: CUBIC은 번지점프나 바이킹 같은 **"롤러코스터 트랙 설계"**입니다. 밑으로 떨어졌을 때 그 반동(3차 함수)을 이용해 단숨에 하늘 높이 치솟아 오르며 속도감을 유지하는, 공학의 극치가 담긴 탑승물입니다. 레노(Reno)처럼 등산하듯 헉헉대며 기어오르지 않습니다.