Chapter 24

영상 통화 한 번의 여행

서울의 한 카페. 카페 Wi-Fi에 연결된 휴대폰으로 부산에 있는 친구에게 영상 통화를 건다. 친구는 길을 걷는 중이라 5G에 연결되어 있다. 화면 속 친구가 웃는 모습이 거의 동시에 보이고, 내 목소리도 거의 바로 들린다. 그 “거의 동시”는 약 0.1초다. 이 장에서는 그 0.1초를 슬로 모션으로 펼친다. 놀랍게도 이 책의 거의 모든 장이 그 안에 들어 있다.

전체 지도: 카메라에서 친구 화면까지

영상 통화는 한 번 보내고 끝나는 택배가 아니다. 1초에 30장의 장면과 50개의 음성 조각이 끊임없이 출발하는 배달 행렬이다. 그 행렬이 지나는 길을 먼저 한 장의 지도로 보자. 각 상자의 장 번호를 누르면 그 구간을 자세히 다룬 장으로 간다.

서울 ◀────────── 직선 약 330 km, 광섬유 경로 약 400 km ──────────▶ 부산 내 휴대폰 · 서울 카메라 (빛→숫자)2장 인코더 (코덱)10장 앱: RTP + SRTP9장22장 OS: UDP · IP9장7장 Wi-Fi 칩13장18장 공유기·NAT7장 FTTH·PON5장 ISP 라우터8장 백본 광섬유5장 5G 코어14장 5G 기지국14장 데이터센터 20장21장 로그인·시그널링 서버 STUN · TURN 릴레이직접 연결이 안 될 때만 경유 시그널링: DNS → TLS 연결 10장22장 통화 요청 · 푸시 알림 친구 휴대폰 · 부산 화면 (숫자→빛)2장 디코더10장 앱: 지터 버퍼9장 OS: 봉투 벗기기3장 RF 칩 · 모뎀18장12장 전파 전기(랜선) 빛(광섬유) 시그널링(통화 맺기) · 밑줄 친 장 번호는 링크
그림 24-1. 영상 통화의 전체 경로. 왼쪽 휴대폰 안에서 아래로 내려가며 봉투가 씌워지고(캡슐화), 전파 → 전기 → 빛 → 전기 → 전파로 모습을 바꿔 부산에 닿은 뒤, 오른쪽 휴대폰 안에서 위로 올라가며 봉투가 벗겨진다. 데이터센터는 통화를 맺어 주고(시그널링), 직접 연결이 막힐 때만 영상을 중계한다.
신선 식품 배달 행렬

보통 택배(파일 다운로드)는 늦더라도 하나도 빠짐없이 와야 한다. 영상 통화는 신선 식품 배달에 가깝다. 매초 수십 개의 상자가 출발하고, 정해진 시각(재생 시각)을 넘긴 상자는 도착해도 버린다. 그래서 등기 우편(TCP)이 아닌 일반 우편(UDP)을 쓰고, 상자에는 순서 번호와 “언제 찍은 장면인지” 적힌 번호표(RTP)를 붙이며, 받는 쪽은 약간의 대기실(지터 버퍼)을 두어 들쭉날쭉한 도착을 고른 박자로 바꾼다.

구간신호의 모습대표 지연(한쪽)장
카메라 캡처 + 인코딩빛 → 전하 → 숫자20~40 ms2, 10
휴대폰 → 공유기 (Wi-Fi)전파 (2.4/5/6 GHz, OFDM)1~10 ms (붐비면 수십 ms)11, 12, 13
공유기 → 통신사 국사 (FTTH)전기 → 빛 (PON)1~2 ms5, 7
통신사 라우터 · 백본 (서울→부산)빛 (DWDM), 라우터 안에서는 전기3~6 ms5, 8, 17
데이터센터 TURN 경유 (필요할 때만)빛 → 전기 → 빛+0.5~3 ms (가까울 때)20, 21
5G 코어 → 기지국 → 친구 폰빛 → 전파 (3.5 GHz)5~15 ms14, 18
지터 버퍼 + 디코딩 + 화면 표시숫자 → 빛40~80 ms9, 10

표를 다시 보자. 서울에서 부산까지 400 km를 건너는 네트워크 구간을 모두 합쳐도 20 ms 안팎이다. 오히려 양 끝의 휴대폰 안(캡처, 인코딩, 기다림, 디코딩, 표시)이 더 오래 걸린다. 이 사실은 뒤에서 지연 예산을 짤 때 다시 확인한다.

통화를 맺기까지: 시그널링과 NAT 통과

영상이 흐르기 전에 먼저 할 일이 있다. 내 휴대폰은 친구 휴대폰의 IP 주소를 모른다. 안다고 해도 친구는 이동통신사의 통신사 NAT(CGNAT) 뒤에, 나는 카페 공유기의 NAT 뒤에 숨어 있어서(7장) 바깥에서 먼저 말을 걸 수 없다. 그래서 둘 다 이미 알고 있는 제3자, 즉 통화 서비스의 서버가 중매를 선다. 이렇게 “누가 누구에게, 어떤 조건으로 통화하자”는 약속을 주고받는 일을 시그널링(signaling)이라 한다. 영상 자체가 흐르는 길(미디어 경로)과는 별개의 길이다.

내 휴대폰 DNS 리졸버 시그널링 서버 STUN·TURN 친구 휴대폰 ① call.example.com의 IP는?→ 203.0.113.20 (10장) ② TCP + TLS 1.3 연결, 로그인 토큰 (22장)앱을 켤 때 이미 열어 둔 연결을 재사용 ③ 통화 요청: 제안(offer) SDP푸시 알림으로 친구 폰을 깨움 코덱 목록 · 해상도 · 암호 열쇠 지문 · 주소 후보 ④ 친구가 “받기”: 응답(answer) SDP ⑤ STUN: “바깥에서 본 내 주소는?” → 198.51.100.24:61002 필요하면 TURN 서버에 중계 주소도 빌려 둔다 (후보 수집) ⑥ ICE 연결 검사: 후보 쌍마다 서로 찔러 보고, 통하는 길 중 가장 좋은 길을 고른다 ⑦ DTLS 핸드셰이크 → SRTP 열쇠 확정 (22장) ⑧ 영상·음성 흐름 시작 (SRTP over UDP)
그림 24-2. 통화를 맺는 순서. ①~④는 서버를 통한 약속(시그널링), ⑤~⑥은 NAT를 뚫을 길 찾기, ⑦은 종단 간 암호 열쇠 나누기다. 사람이 “받기”를 누르는 시간을 빼면 네트워크 작업은 대개 0.5~2초 안에 끝난다. 주소는 문서용 예시 주소다.

단계별로 쓰이는 이름을 정리하자.

A. 구멍 뚫기 성공: 직접 연결(P2P) B. 막혔을 때: TURN 중계 내 폰 NAT공유기 NATCGNAT 친구 폰 STUN 양쪽이 거의 동시에 상대의 바깥 주소로 쏘면, 각 NAT는 “내가 먼저 보낸 상대의 답장”으로 여겨 통과시킨다. 가장 짧은 길 · 서버 비용 없음 내 폰 NAT대칭형 방화벽UDP 차단 친구 폰 TURN 서버데이터센터 ✕ 상대마다 다른 바깥 포트를 쓰는 NAT, UDP를 막는 방화벽이면 양쪽 모두 TURN에 “나가는” 연결만 만들고 서버가 이어 준다. 항상 되지만 길이 늘고 서버 대역폭 비용이 든다
그림 24-3. NAT 통과. 대부분의 통화는 STUN으로 알아낸 바깥 주소끼리 직접 연결된다(A). NAT가 상대마다 다른 포트를 배정하거나(대칭형 NAT) 회사 방화벽이 UDP를 막으면 TURN 중계로 넘어간다(B). 극단적인 경우엔 TCP 443번 위의 TLS로 감싸 HTTPS처럼 위장해 지나간다.
그룹 통화는 SFU를 거친다

1:1은 직접 연결이 가장 좋지만, 10명이 통화할 때 모두가 9명에게 각자 영상을 보내면 내 업로드가 9배가 된다. 그래서 그룹 통화는 데이터센터의 SFU(Selective Forwarding Unit)에 영상을 한 번만 올리고, 서버가 받는 사람 화면 크기에 맞는 해상도를 골라 나눠 준다. 보내는 쪽은 큰 화질·작은 화질을 동시에 올리는(simulcast) 경우가 많다. 서버는 패킷을 고르기만 하고 다시 인코딩하지 않으므로 지연이 거의 늘지 않는다.

패킷 하나의 여행: 한 구간씩

이제 통화가 연결되었다. 내 얼굴이 담긴 한 장면 가운데 패킷 하나를 골라 부산까지 따라가 보자. “다음 →”을 누를 때마다 패킷이 한 구간을 건너고, 아래 그림에 지금 패킷에 붙은 헤더(바깥 → 안쪽), 신호의 모습(전기·빛·전파), 출발·도착 주소가 나타난다. 맨 아래 막대에는 시간이 쌓인다. 경로를 “직접 연결”로 바꾸면 데이터센터를 거치지 않는 길도 볼 수 있다.

SIMULATOR

영상 패킷 하나가 지나가는 길

경로
진행 0
누적 지연0 ms
그중 네트워크 구간0 ms
그중 양 끝 휴대폰 안0 ms
수치는 서울-부산 통화의 대표적인 크기를 단순화한 것이다(30 fps, 720p, 약 2 Mbps). 실제로는 구간마다 매 패킷 다르게 출렁인다. 주소는 문서용 예시 주소(RFC 5737)이고, 이동통신사가 IPv6를 쓰면 주소 모양과 NAT 단계가 달라진다. 해볼 것: “직접 연결”로 바꾸면 무엇이 빠지는지, 그리고 맨 아래 막대에서 가장 긴 조각이 네트워크가 아니라 어디인지 보자.
왜 RTP 위에 또 UDP일까?

RTP(Real-time Transport Protocol)는 배달 규칙이라기보다 상자에 붙이는 번호표다. 순서 번호로 빠진 상자와 뒤바뀐 순서를 알아내고, 타임스탬프로 “이 조각은 몇 번째 순간의 장면인지”를 알아 음성과 영상을 맞춰(립싱크) 재생한다. 실제 배달은 UDP와 IP가 맡는다. 암호화한 버전이 SRTP다. 함께 다니는 RTCP는 “손실 몇 %, 지터 몇 ms”를 상대에게 알려 주는 운송장 피드백이다.

지연 예산: 150 ms 안에 들어오려면

대화가 자연스러우려면 내가 말한 소리가 상대 귀에 닿기까지, 즉 입-귀 지연(mouth-to-ear delay)이 짧아야 한다. 국제전기통신연합의 권고(ITU-T G.114)는 한쪽 방향 150 ms 이하면 대부분의 대화에서 지연을 거의 느끼지 못한다고 본다. 300 ms를 넘어가면 “내가 말을 끝냈나?” 하는 머뭇거림 때문에 서로 말이 겹치기 시작하고, 400 ms를 넘으면 일반적인 대화로는 받아들이기 어렵다.

150 ms라는 예산을 구간마다 나눠 쓴다고 생각해 보자. 아래에서 구간별 조건을 바꿔 가며 어디서 예산이 새는지 찾아보자.

SIMULATOR

입-귀 지연 예산 계산기

캡처·인코딩
내 쪽 Wi-Fi
접속망
상대 위치(거리)
서버 경유
상대 이동통신
지터 버퍼
디코딩·표시
예시 조합
입-귀 지연(한쪽)—
판정—
네트워크 구간 비중—
가장 큰 구간—
한쪽 방향 지연의 단순 모델이다. 거리 구간은 광섬유 속 빛(1 km에 약 5 µs)과 라우터 경유를 합친 대표값(부산 4 ms, 도쿄 16 ms, 뉴욕 95 ms)이다. “먼 릴레이”는 서울 → 미국 서부 → 상대로 돌아가는 길이다. 판정 기준은 ITU-T G.114를 단순화해 150 ms / 300 ms로 나눴다. 해볼 것: ① 부산 친구인데 릴레이가 미국 서부로 잡히면? ② 뉴욕 친구일 때 무엇을 줄여야 150 ms 안에 들어오나?
예산은 고정, 거리는 협상 불가

지연 예산은 한 달 생활비와 같다. 월세(빛이 거리를 건너는 시간)는 깎을 수 없다. 서울-뉴욕의 바닷길은 아무리 좋은 장비를 써도 수십 ms다. 그러니 줄일 수 있는 것은 식비와 용돈, 즉 휴대폰 안의 처리와 버퍼다. 먼 나라와의 통화 앱이 인코더를 가볍게 돌리고 지터 버퍼를 아슬아슬하게 잡는 이유다.

손실과 지터에 맞서기

패킷은 일정한 박자로 출발하지만 도착은 들쭉날쭉하다. Wi-Fi에서 순서를 기다리고, 라우터 큐에 잠깐 머물고, 기지국 스케줄러가 차례를 정하기 때문이다. 이 도착 간격의 흔들림이 지터(jitter)다. 그리고 일부는 아예 사라진다(손실). 영상 통화 앱은 네 가지 무기로 맞선다.

  1. 지터 버퍼(jitter buffer): 도착한 패킷을 바로 재생하지 않고 잠깐 모았다가 고른 박자로 꺼낸다. 버퍼가 깊을수록 늦은 패킷을 더 기다려 주지만, 그만큼 모든 소리가 늦게 들린다.
  2. FEC(순방향 오류 정정): 여분의 정보를 미리 함께 보내 잃어버린 조각을 받는 쪽이 스스로 복원한다(12장의 오류 정정 부호와 같은 생각). Opus 음성 코덱은 다음 패킷에 이전 조각의 저화질 사본을 넣어 보낼 수 있다. 영상은 패킷 몇 개를 XOR한 복구 패킷을 덧붙인다.
  3. 패킷 손실 은닉(PLC): 끝내 못 받은 조각은 앞뒤 소리로 그럴듯하게 메우거나, 영상은 이전 장면을 잠시 유지한다. 몇 % 손실까지는 사람이 잘 눈치채지 못한다. 영상의 기준 장면이 깨지면 상대에게 “새 기준 장면(키프레임)을 보내 줘”라고 요청하고, 빠진 패킷만 골라 재전송을 부탁하기도 한다(NACK). 지연 예산이 남을 때만 쓰는 방법이다.
  4. 비트레이트 적응: 손실과 지연이 늘면 그 자체가 “길이 막힌다”는 신호다. 보내는 양을 줄여 큐가 비게 한다(9장의 혼잡 제어). 다음 절에서 실험한다.
SIMULATOR

지터 버퍼: 지연과 끊김의 줄다리기

제때 도착늦어서 버림네트워크에서 손실FEC로 복원
지터 (평균 추가 지연)
네트워크 손실률
지터 버퍼 깊이
복원 수단
버퍼가 더하는 지연—
늦어서 버린 비율—
최종 끊김 비율—
체감—
위: 20 ms마다 보낸 음성 패킷 150개(3초)의 추가 지연. 점선 위로 올라간 패킷은 재생 시각을 놓쳐 버려진다. 아래: 버퍼 깊이에 따른 끊김 비율(세로는 로그 눈금). 추가 지연을 평균이 “지터” 값인 지수 분포로 둔 단순 모델이고, FEC는 “바로 다음 패킷이 버퍼 깊이 − 20 ms 안에 오면 복원”으로 계산했다. 해볼 것: 지터를 30 ms로 올리고 끊김을 1% 아래로 만들려면 버퍼가 얼마나 깊어야 하는지 보자. 실제 앱(예: WebRTC의 NetEQ)은 이 줄다리기를 측정값으로 계속 다시 맞추는 적응형 지터 버퍼를 쓴다.

길이 막히면 덜 보낸다: 비트레이트 적응

카페 Wi-Fi가 갑자기 붐비거나 친구가 엘리베이터에 타면, 쓸 수 있는 대역폭이 몇 초 사이에 10분의 1로 떨어진다. 이때 하던 대로 2.5 Mbps를 계속 밀어 넣으면 어떻게 될까? 남는 패킷이 병목 라우터나 기지국의 큐에 쌓이고, 큐가 길어질수록 모든 패킷이 그만큼 늦게 도착한다. 큐가 넘치면 버려진다. 파일 다운로드라면 TCP가 알아서 속도를 줄이지만(9장), UDP 위의 영상 통화는 앱이 직접 해야 한다.

WebRTC가 쓰는 대표적인 방식(구글 혼잡 제어, GCC)은 지연이 늘기 시작하는 것을 손실보다 먼저 알아챈다. 패킷 사이 도착 간격이 보낸 간격보다 점점 벌어지면 “큐가 차고 있다”는 뜻이므로, 큐가 넘치기 전에 인코더의 목표 비트레이트를 낮춘다. 해상도와 프레임률이 잠시 떨어지지만 대화는 끊기지 않는다.

SIMULATOR

대역폭이 출렁일 때: 적응 vs 고집

쓸 수 있는 대역폭보내는 비트레이트큐 대기 지연
상황
보내는 쪽
보내는 비트레이트—
큐 대기 지연—
버려지는 패킷—
상대가 보는 화질—
병목 링크 하나와 큐(2.5 Mbps 기준 약 0.5초 분량)만 있는 단순 모델이다. 적응 모드는 큐 지연이 60 ms를 넘으면 비트레이트를 0.85배로 줄이고, 20 ms 아래면 조금씩 올린다(GCC를 크게 단순화). 해볼 것: 엘리베이터 상황에서 적응을 끄면 대역폭이 돌아온 뒤에도 지연이 한동안 남는 이유(쌓인 큐)를 보자.

데이터 양 감각: 영상 통화 1시간은 몇 GB?

720p 영상 통화는 보통 한 방향에 1.5~2.5 Mbps 수준이다. 1초에 2 Mbit이면 1시간(3,600초)에 7,200 Mbit = 900 MB. 영상 통화는 보내기와 받기가 동시에 일어나므로 휴대폰 요금제에서 빠지는 양은 그 두 배, 1시간에 약 1.8 GB가 된다. 코덱이 좋아지면 같은 화질을 더 적은 비트로 보낸다. 음성은 Opus 기준 수십 kbps라 영상에 비하면 거의 공짜지만, 20 ms마다 보내는 작은 패킷이라 헤더(IP·UDP·RTP·SRTP 약 50바이트) 비율이 의외로 크다.

SIMULATOR

영상 통화 데이터 계산기

화질
영상 코덱
통화 시간
월 데이터 요금제
한 방향 (영상+음성+헤더)—
이 통화의 데이터 (양방향)—
음성 패킷 중 헤더 몫—
요금제로 통화 가능 시간—
H.264 기준 대표 비트레이트(360p 0.6, 720p 2.0, 1080p 3.5 Mbps)에 코덱 효율 배수를 곱한 값이다. VP9·AV1은 같은 화질에서 대략 30~40% 적게 쓴다고 보고 단순화했다. 음성은 Opus 32 kbps, 20 ms 패킷, 패킷당 헤더 50 B(IPv4 20 + UDP 8 + RTP 12 + SRTP 태그 10). 영상 패킷은 약 1,100 B 조각에 같은 헤더가 붙는다. 실제 앱은 화면 크기·움직임·네트워크에 따라 비트레이트를 계속 바꾼다.

같은 눈으로 본 두 장면

지도를 그리는 법을 익혔으니, 다른 장면도 짧게 같은 방식으로 따라가 보자. 경로의 모양이 달라지면 병목도 달라진다.

장면 A. 비행기 Wi-Fi에서 메시지 보내기

태평양 위 고도 10 km. 기내 Wi-Fi로 “곧 도착해”를 보낸다. 휴대폰 → 기내 Wi-Fi 공유기(13장) → 동체 위 위성 안테나 → 위성 → 지상국(게이트웨이) → 지상 인터넷 → 메신저 서버 → 친구로 이어진다(15장). 기내와 지상 구간은 익숙한 그대로이고, 새로 생긴 것은 우주를 다녀오는 구간 하나다.

지구 표면 비행기 (고도 10 km) 지상국 → 인터넷 정지궤도 위성고도 35,786 km 올라가기 ≈ 120 ms내려오기 ≈ 120 ms LEO 저궤도 약 550 km 왕복 수십 ms
그림 24-4. 비행기 Wi-Fi의 우주 구간. 정지궤도 위성을 거치면 빛의 속도로도 한쪽에 약 0.25초가 걸려 영상 통화의 예산을 혼자 다 써 버린다. 저궤도 위성군은 거리가 수십 분의 1이라 지상 인터넷과 비슷한 지연을 낸다(15장). 그림의 거리는 비례가 아니다.
비행기 Wi-Fi 경로한쪽 지연(대략)왕복(핑)메시지 / 영상 통화
정지궤도(GEO) 위성≈ 270~300 ms≈ 600 ms 이상메시지는 충분 / 통화는 말이 겹침
저궤도(LEO) 위성군≈ 20~40 ms≈ 40~80 ms둘 다 무난
(비교) 지상 FTTH, 서울-부산≈ 5~10 ms≈ 10~20 ms둘 다 여유

메시지 한 통은 수백 바이트이고 1초 늦어도 아무도 모르니, 정지궤도 위성으로도 충분하다. 다만 메신저가 TCP+TLS 연결을 새로 맺어야 한다면 왕복이 몇 번 필요해서(9·22장) 첫 메시지가 2~3초 걸릴 수 있다. 같은 정지궤도 링크로 영상 통화를 하면 지연 예산 시뮬레이터의 “먼 릴레이”보다도 나쁘다. 병목이 대역폭이 아니라 거리인 대표적인 경우다.

장면 B. AI 챗봇에 질문하기

휴대폰 앱에서 AI 챗봇에게 “부산 맛집 추천해 줘”라고 묻는다. 앞부분은 이미 아는 길이다. Wi-Fi(13장) → 공유기 NAT(7장) → 통신사 → 백본(5·8장) → 클라우드 리전의 로드밸런서(21장)까지 HTTPS(TLS 1.3, 22장)로 간다. 새로운 것은 그다음, 데이터센터 안쪽이다.

휴대폰 앱HTTPS 인터넷5·7·8장 클라우드 리전 · AI 데이터센터 로드밸런서TLS 종료 · 21장 API 서버대기열·배치 GPU 추론 서버들 GPU끼리 수백 Gbps 전용망 · 20장 ← 토큰 · 토큰 · 토큰 … 한 조각씩 스트리밍 (같은 HTTPS 연결)
그림 24-5. AI 챗봇 요청. 질문은 수 KB에 불과하지만, 데이터센터 안에서 하나의 거대 모델이 여러 GPU에 나뉘어 있어 GPU들이 매 단어마다 초고속 전용망으로 중간 결과를 주고받는다(20장). 답은 다 만들어질 때까지 기다리지 않고 만들어지는 대로 흘려 보낸다.
단계대략의 시간무엇이 병목인가
휴대폰 → 리전 (연결이 열려 있으면 요청 한 번)10~50 ms거리와 접속망 (영상 통화와 같다)
대기열 + 질문 읽기(프리필)0.2~2 sGPU 연산, 붐비는 정도
첫 토큰 도착(TTFT)0.3~2 s대부분 데이터센터 안
이후 토큰 스트리밍초당 수십~100여 토큰GPU 메모리 대역폭, GPU 간 통신

영상 통화와 비교하면 무게중심이 정반대다. 영상 통화는 가는 길이 대부분이었지만, AI 챗봇은 네트워크 왕복 수십 ms보다 데이터센터 안의 계산과 GPU 사이 통신이 훨씬 길다. 그래서 AI 데이터센터는 GPU들을 잇는 내부 네트워크(20장)와 광 연결(19장)에 막대한 돈을 쓴다. 답을 토큰 단위로 흘려 보내는 스트리밍은 10장의 동영상 스트리밍처럼 “다 받기 전에 보기 시작”하게 해 체감 지연을 줄인다.

병목 찾기 연습

통화 품질이 나쁠 때 원인은 대개 한 구간이다. 23장의 측정 도구로 증상을 구간에 대응시키는 감각을 연습해 보자. 먼저 결과를 예측하고 위 시뮬레이터로 확인하자.

증상먼저 의심할 곳확인 방법(23장)
말이 계속 겹친다 (지연이 큼)먼 릴레이, 해외 경로, 정지궤도 위성, 과한 지터 버퍼통화 앱의 통계 화면(RTT), traceroute
화면이 자주 멈추고 소리가 뭉개진다Wi-Fi 혼잡·약한 신호, 셀 가장자리 (손실·지터)신호 세기(RSSI), 공유기 가까이에서 다시 측정
처음엔 좋다가 점점 흐려진다업로드 대역폭 부족 → 비트레이트 적응속도 측정의 업로드 값, 같은 회선의 대용량 업로드
연결 자체가 안 된다방화벽의 UDP 차단, TURN 서버 접근 불가다른 네트워크(5G)로 바꿔 시도
예측해 보기

카페 Wi-Fi에서 부산 친구와 통화한다. 지연 예산은 120 ms로 여유가 있는데 화면이 자꾸 멈추고 소리가 끊긴다. 측정해 보니 Wi-Fi 구간의 지터가 평균 30 ms, 손실률이 4%다. 가장 효과적인 첫 조치는?

지터 버퍼 시뮬레이터에서 지터 30 ms, 손실 4%로 놓고 버퍼와 FEC를 바꿔 보자.

지연 예산이 남아 있으니 문제는 지연이 아니라 손실과 지터다. 손실 4%는 버퍼를 아무리 키워도 남는다(시뮬레이터에서 FEC 없이 4% 아래로 안 내려간다). 원인 구간인 Wi-Fi를 고치는 것이 가장 효과적이다. 앱 쪽에서 버티려면 FEC를 켜고 버퍼를 약 95 ms 이상으로 키워야 1% 아래가 되는데, 그러면 지연이 55 ms 늘어 120 ms 예산이 175 ms로 넘친다. 버퍼를 줄이면 늦은 패킷이 모두 버려져 더 끊긴다. 해상도를 올리면 오히려 큐가 더 막힌다.
예측해 보기

뉴욕 친구와 통화하면 지연이 약 190 ms라 조금 어색하다. 지연 예산 시뮬레이터의 기본값에서 “뉴욕”만 고른 상태다. 다음 중 150 ms 아래로 내려 줄 수 있는 조치는?

지연 예산 시뮬레이터에서 “뉴욕”을 고르고 하나씩 바꿔 보자.

기본값 + 뉴욕은 약 193 ms다. 바다를 건너는 95 ms는 유리 속 빛의 속도(진공의 약 3분의 2)가 정한 바닥이라 장비로 줄일 수 없다(5장). 릴레이는 경유를 늘릴 뿐이다. 남은 수단은 휴대폰 안의 시간이다. 버퍼 −30, 인코딩 −10, 표시 −5 ms면 약 148 ms로 목표 안에 들어온다. 대신 버퍼가 얕아지면 지터에 약해진다. 먼 거리 통화가 늘 줄타기인 이유다. (중공 코어 광섬유처럼 빛이 공기 속을 지나게 해 지연을 약 30% 줄이는 연구도 있지만, 아직 대륙 간 해저 구간에 쓰는 단계는 아니다.)

이 책의 모든 층이 0.1초 안에 함께 일한다

영상 통화 한 번을 다시 펼쳐 보면, 이 책의 장들이 하나도 빠짐없이 그 0.1초 안에서 맡은 일을 하고 있다.

장영상 통화에서 맡은 일
01 네트워크두 휴대폰이 “망들의 망”을 거쳐 대역폭과 지연이라는 두 숫자로 연결된다.
02 신호빛(카메라) → 숫자 → 전기·빛·전파 → 숫자 → 빛(화면). 섀넌 한계가 각 링크의 최대 속도를 정한다.
03 계층RTP·UDP·IP·링크 헤더가 겹겹이 씌워지고 벗겨진다(캡슐화).
04 구리선공유기와 광 단말 사이의 랜선, 기지국과 장비 사이의 짧은 연결.
05 광통신FTTH(PON)와 서울-부산 백본, 뉴욕까지라면 해저 케이블.
06 이더넷공유기·국사·데이터센터 안의 모든 프레임과 스위치.
07 IP사설 주소, 카페 공유기 NAT와 통신사 CGNAT, 그리고 그것을 뚫는 STUN.
08 라우팅통신사 라우터들의 최장 접두사 일치, 통신사 사이의 BGP.
09 TCP/UDP영상은 UDP + RTP, 시그널링은 TCP, 그리고 혼잡 제어의 생각을 빌린 비트레이트 적응.
10 DNS·웹·스트리밍서버 이름 찾기, 코덱 압축, 스트리밍과 실시간 통신의 차이.
11 전파카페 안 5 GHz와 거리의 3.5 GHz 전파, 감쇠와 벽.
12 변조Wi-Fi와 5G 모두 OFDM, MIMO, 오류 정정 부호.
13 Wi-FiCSMA/CA로 순서 기다리기. 첫 번째 지터의 원천.
14 이동통신5G 코어의 GTP 터널, 기지국 스케줄러, 이동해도 끊기지 않는 핸드오버.
15 위성비행기·바다 위에서의 연결, 정지궤도와 저궤도의 지연 차이.
16 SerDes라우터·스위치·모뎀 칩 사이를 수십 Gbps로 잇는 직렬 링크.
17 네트워크 칩모든 라우터·스위치 안에서 ns 단위로 길을 고르는 스위칭 칩과 NIC.
18 RF 반도체두 휴대폰의 Wi-Fi·5G RF 칩: 증폭기, 필터, 믹서, 데이터 변환기.
19 광 반도체ONT와 백본의 레이저·광검출기, 데이터센터의 광 트랜시버.
20 데이터센터TURN·SFU·시그널링 서버가 있는 리프-스파인 망.
21 클라우드사용자와 가까운 리전에 릴레이를 두고, 로드밸런서로 나눈다.
22 보안TLS로 로그인, DTLS로 열쇠를 나누고 SRTP로 종단 간 암호화.
23 운영RTT·손실·지터 측정, 병목 구간 찾기.

그리고 이 여행에서 반복해서 나타난 큰 원리 몇 가지를 남겨 두자.

  1. 계층은 서로를 모른다. 통화 앱은 지금 패킷이 전파인지 빛인지 모르고, 백본 라우터는 그 안에 얼굴이 들었는지 모른다. 정해진 헤더만 읽고 넘기기 때문에 각 층이 따로 발전할 수 있다(3장).
  2. 모든 경계에서 신호가 바뀐다. 빛 → 전기 → 전파 → 전기 → 빛. 바뀌는 곳마다 반도체(16~19장)가 있다.
  3. 빛의 속도는 협상할 수 없다. 먼 통화의 지연은 거리가 정하고, 우리가 줄일 수 있는 것은 양 끝의 처리와 기다림이다.
  4. 실시간에서는 늦은 것이 없는 것이다. 그래서 재전송 대신 버퍼, FEC, 은닉, 적응으로 버틴다.
  5. 가까운 곳에 둔다. 릴레이, 서버, CDN, GPU를 사용자 가까이 둘수록 빨라진다(10·21장).
다음 걸음

25장에서는 봉화와 전신에서 6G와 양자 통신까지, 이 모든 층이 어떻게 하나씩 쌓여 왔는지 역사를 따라간다. 26장의 용어집과 종합 퀴즈로 전체를 점검할 수 있다. 직접 확인해 보고 싶다면, 영상 통화 중에 브라우저의 WebRTC 내부 통계 페이지(크롬의 chrome://webrtc-internals)를 열어 보자. 이 장에서 본 RTT, 지터, 손실, 비트레이트, 선택된 ICE 후보가 실시간으로 나온다.

핵심 정리

  1. 영상 통화 패킷은 카메라 → 코덱 → RTP/SRTP → UDP/IP → Wi-Fi → NAT → FTTH → 라우터·백본 → (필요하면 TURN) → 5G 코어·기지국 → RF 칩 → 지터 버퍼 → 디코더 → 화면을 지나며, 신호는 빛·전기·전파로 여러 번 모습을 바꾼다.
  2. 통화를 맺으려면 DNS·TLS로 서버에 붙고, SDP로 조건을 맞추는 시그널링을 한 뒤, STUN·TURN 후보를 ICE로 시험해 NAT를 통과할 길을 찾고, DTLS로 SRTP 열쇠를 나눈다.
  3. 대화가 자연스러우려면 입-귀 지연이 한쪽 150 ms 이내여야 한다. 국내 통화에서는 네트워크보다 휴대폰 안(캡처·인코딩·지터 버퍼·디코딩·표시)이 더 오래 걸리고, 먼 나라와의 통화는 빛의 속도가 바닥을 정한다.
  4. 실시간 미디어는 늦은 패킷을 버린다. 지터 버퍼는 지연과 끊김을 맞바꾸고, FEC·손실 은닉·비트레이트 적응이 나쁜 네트워크를 견디게 한다.
  5. 720p 통화는 한 방향 약 2 Mbps, 1시간 양방향 약 1.8 GB 수준이다. 정지궤도 위성은 거리 때문에, AI 챗봇은 데이터센터 안의 계산 때문에 병목의 위치가 달라진다.

확인 퀴즈

영상 통화의 영상 패킷을 TCP가 아닌 UDP로 보내는 가장 큰 이유는?

실시간 미디어에서는 늦은 것이 없는 것이다. 순서와 시각 정보는 RTP가 붙이고, 손실은 FEC·은닉으로 메운다(9장).

STUN 서버가 하는 일로 옳은 것은?

STUN은 “거울”이다. 중계는 TURN, 이름 찾기는 DNS의 일이다. ICE가 이 후보들을 모아 시험해 최선의 길을 고른다.

서울-부산 영상 통화의 한쪽 지연 약 100 ms 가운데 가장 큰 몫을 차지하는 것은 보통 어디인가?

400 km 광섬유는 약 2 ms다. 국내 통화에서는 네트워크 전체가 20 ms 안팎이고, 나머지 대부분은 휴대폰 안에서 쓰인다.

지터 버퍼를 깊게(예: 40 → 150 ms) 하면 일어나는 일은?

버퍼는 지연과 끊김을 맞바꾼다. 네트워크에서 아예 사라진 패킷은 버퍼로 되살릴 수 없고, FEC나 은닉이 필요하다.

카페 Wi-Fi가 붐벼서 대역폭이 갑자기 줄었는데도 앱이 같은 비트레이트로 계속 보내면 가장 먼저 나타나는 현상은?

그래서 WebRTC의 혼잡 제어는 지연이 늘기 시작하는 순간을 감지해 큐가 넘치기 전에 비트레이트를 낮춘다(9장의 혼잡 제어와 같은 생각).

정지궤도 위성을 쓰는 비행기 Wi-Fi에서 영상 통화가 어색한 주된 이유는?

병목이 대역폭이 아니라 거리다. 저궤도 위성군(고도 수백 km)은 이 문제를 크게 줄인다(15장).