작성일 :

네트워크 지연은 어디서 발생하는가

“느리다”는 말은 흔히 듣지만, 정확히 무엇이 느린 걸까요?


네트워크 성능을 개선하려면 먼저 지연의 원인을 이해해야 합니다.


지연 시간의 정의

Latency (지연)

데이터가 출발지에서 목적지까지 가는 데 걸리는 단방향(One-way) 지연 시간입니다.


RTT (Round Trip Time)

데이터가 왕복하는 데 걸리는 시간입니다.


1
2
3
4
5
6
7
8
9
10
클라이언트 ──────► 서버
           요청
    시간 t1          │
                    │
                    ▼
클라이언트 ◄────── 서버
           응답
    시간 t2

RTT = t2 - t1


대부분의 프로토콜이 요청-응답 패턴을 따르므로, RTT가 실제 사용자 경험에 직접적인 영향을 줍니다.


측정 방법

1
2
3
4
# ping으로 RTT 측정
ping google.com
# 64 bytes from 142.250.185.46: icmp_seq=1 ttl=116 time=32.5 ms
#                                                        ↑ RTT

지연의 4가지 구성 요소

총 지연 = 전파 지연 + 전송 지연 + 처리 지연 + 큐잉 지연


1
2
3
4
5
6
7
8
9
10
11
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   출발지  ─────────────────────────────────────►  목적지   │
│                                                             │
│   ├──전송지연──┤                           ├──처리지연──┤  │
│                ├────────전파지연────────┤               │  │
│                                                             │
│              └─큐잉지연─┘        └─큐잉지연─┘              │
│                (각 홉)             (각 홉)                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

전파 지연 (Propagation Delay)

신호가 매체를 통해 물리적으로 이동하는 시간입니다.


1
전파 지연 = 거리 / 전파 속도


빛의 속도 한계

진공에서 빛의 속도: 약 300,000 km/s

광섬유에서: 약 200,000 km/s (굴절률 때문에 느려짐)


1
2
3
4
5
6
7
8
9
10
11
서울 → 부산 (약 400km):
전파 지연 ≈ 400km / 200,000 km/s = 2ms (단방향)
RTT ≈ 4ms

서울 → 미국 서부 (약 10,000km):
전파 지연 ≈ 10,000km / 200,000 km/s = 50ms (단방향)
RTT ≈ 100ms

서울 → 유럽 (약 9,000km):
전파 지연 ≈ 9,000km / 200,000 km/s = 45ms (단방향)
RTT ≈ 90ms


줄일 수 없는 한계

전파 지연은 물리 법칙에 의해 결정됩니다.

아무리 좋은 광섬유를 사용해도 빛의 속도보다 빨라질 수는 없습니다.


대안:

  • CDN으로 콘텐츠를 사용자 가까이에 배치
  • 에지 컴퓨팅
  • 왕복 횟수 줄이기 (프로토콜 최적화)

전송 지연 (Transmission Delay)

데이터를 링크에 밀어넣는 시간입니다.


1
전송 지연 = 패킷 크기 / 링크 대역폭


예시:

1
2
3
4
5
6
7
8
9
10
1500바이트 패킷:

100 Mbps 링크:
전송 지연 = 1500 × 8 / 100,000,000 = 0.12ms

1 Gbps 링크:
전송 지연 = 1500 × 8 / 1,000,000,000 = 0.012ms

10 Gbps 링크:
전송 지연 = 1500 × 8 / 10,000,000,000 = 0.0012ms


대역폭이 높을수록 전송 지연이 줄어들지만, 전파 지연은 그대로 유지됩니다.


처리 지연 (Processing Delay)

라우터/스위치가 패킷을 처리하는 시간입니다.


처리 내용:

  • 헤더 검사
  • 체크섬 확인
  • 라우팅 테이블 조회
  • QoS 분류
  • NAT 변환
  • 방화벽 규칙 검사


현대 네트워크 장비는 하드웨어 가속을 통해 마이크로초 단위의 처리가 가능합니다.

반면, 소프트웨어 기반 처리는 이보다 느릴 수 있습니다.


큐잉 지연 (Queuing Delay)

패킷이 버퍼에서 대기하는 시간입니다.


가장 가변적인 요소입니다.


1
2
3
4
5
6
7
트래픽 적음:         트래픽 많음:
┌─────────────┐      ┌─────────────┐
│ 버퍼       │      │ █████████████│
│   ○        │      │ █████████████│
│            │      │ █████████████│
└─────────────┘      └─────────────┘
큐잉 지연: 작음       큐잉 지연: 큼


큐잉 이론

도착률 λ, 서비스율 μ


이용률(Utilization) ρ = λ/μ


ρ가 1에 가까워질수록:

  • 평균 큐 길이가 급격히 증가
  • 지연도 급격히 증가


1
2
3
4
5
6
7
8
9
10
평균
지연
 │        ┌
 │       /
 │      /
 │     /
 │    /
 │___/
 └───────────────── 이용률 (ρ)
    0%           100%


네트워크를 100% 가까이 사용하면 지연이 급격히 증가합니다.


Bandwidth-Delay Product (BDP)

BDP는 네트워크 “파이프”에 들어갈 수 있는 데이터 양입니다.


1
BDP = 대역폭 × RTT


예시:

1
2
3
4
5
100 Mbps 링크, RTT 100ms:
BDP = 100 Mbps × 0.1s = 10 Mbit = 1.25 MB

1 Gbps 링크, RTT 100ms:
BDP = 1000 Mbps × 0.1s = 100 Mbit = 12.5 MB


TCP와 BDP

TCP는 윈도우로 flow control을 합니다.


1
2
3
4
5
6
7
8
송신자              수신자
  │                   │
  │ ───데이터1────► │
  │ ───데이터2────► │ 윈도우 크기만큼
  │ ───데이터3────► │ ACK 없이 전송
  │                   │
  │ ◄────ACK1────── │
  │                   │


윈도우 크기가 BDP보다 작으면?


1
2
3
4
BDP = 12.5 MB
윈도우 = 64 KB (기본값)

파이프 용량의 0.5%만 사용!


긴 뚱뚱한 파이프 (LFN: Long Fat Network)

높은 대역폭 + 높은 지연 = 큰 BDP


위성 링크:

  • 대역폭: 100 Mbps
  • RTT: 600ms (정지궤도 위성)
  • BDP: 7.5 MB


기본 16비트 윈도우(64KB)로는 부족하므로, TCP 윈도우 스케일링(Window Scaling)이 필요합니다.


버퍼블로트 (Bufferbloat)

과도한 버퍼링이 오히려 문제가 됩니다.


왜 버퍼가 문제인가?

네트워크 장비 제조사들은 패킷 손실을 줄이려고 큰 버퍼를 넣었습니다.


1
2
3
4
5
6
7
버퍼 작음:
높은 부하 → 패킷 손실 → TCP가 속도 줄임 → 혼잡 해소 (빠름)

버퍼 큼:
높은 부하 → 버퍼에 쌓임 → 손실 없음 → TCP가 속도 유지
         → 버퍼 계속 증가 → 지연 증가 → 결국 손실
         → 지연이 엄청 길어진 후에야 혼잡 해소


버퍼블로트의 증상

1
2
3
4
5
6
7
# 유휴 상태
ping google.com
# time=20 ms

# 대용량 다운로드 중
ping google.com
# time=500 ms  ← 버퍼에 패킷이 쌓여서 지연 증가


실시간 애플리케이션(VoIP, 게임)에 치명적입니다.


해결책: AQM (Active Queue Management)

버퍼가 차기 전에 미리 패킷을 드롭하거나 마킹합니다.


CoDel (Controlled Delay):

  • 패킷이 큐에 머무른 시간(sojourn time) 측정
  • 임계값(5ms) 초과 시 패킷 드롭
  • Linux 커널에 포함


fq_codel (Fair Queuing CoDel):

  • CoDel + 흐름별 공정 큐잉
  • 각 연결에 공정한 대역폭 배분
  • Linux 기본 큐잉 discipline


1
2
3
# fq_codel 확인
tc qdisc show
# qdisc fq_codel 0: dev eth0 root ...

지연의 실제 구성

서울에서 미국 서버로 HTTP 요청:


1
2
3
4
5
6
7
8
9
10
11
12
구성 요소          시간
─────────────────────────────
DNS 조회           ~50ms (캐시 미스 시)
TCP 핸드셰이크     ~100ms (1 RTT)
TLS 핸드셰이크     ~200ms (2 RTT, TLS 1.2)
HTTP 요청/응답     ~100ms (1 RTT)
─────────────────────────────
총                 ~450ms

TLS 1.3 사용 시:   ~350ms (TLS 1 RTT)
HTTP/2 사용 시:    연결 재사용으로 이후 요청 빠름
HTTP/3 사용 시:    0-RTT 가능


대부분의 지연은 왕복 횟수에 의존합니다.

따라서 RTT 자체를 줄이거나, 왕복 횟수를 줄이는 것이 핵심입니다.


정리: 지연은 줄이기 어렵다

지연의 구성 요소 요약:


구성 요소 제어 가능 최적화 방법
전파 지연 거의 불가능 CDN, 지리적 분산
전송 지연 대역폭 증가 링크 업그레이드
처리 지연 장비 성능 하드웨어 가속
큐잉 지연 트래픽 관리 AQM, 용량 계획


빛의 속도는 불변이므로, 지리적 거리에 의한 지연은 줄일 수 없습니다.


Part 2에서는 TCP 혼잡 제어 알고리즘의 발전을 살펴봅니다.


관련 글

Tags: BDP, Latency, 네트워크, 버퍼블로트, 성능, 지연시간

Categories: ,