들어가며: '됐다 안 됐다' 하는 네트워크, 그 원인은 PMTUD 블랙홀

Slack은 잘 되는데 갑자기 대용량 파일 업로드나 화상 회의만 시작하면 연결이 뚝 끊긴 경험, 한 번쯤 있으시죠? 대부분의 사용자는 '와이파이가 느린가 보다' 하고 넘기지만, 실제 원인은 PMTUD(Path MTU Discovery) 블랙홀이라는 네트워크 계층의 고질적인 문제일 때가 많습니다.

MTU(Maximum Transmission Unit)는 네트워크에서 한 번에 보낼 수 있는 최대 패킷 크기를 의미합니다. 일반 이더넷에서는 1500바이트가 표준이지만, LTE/5G, 위성 통신, 혹은 오래된 회사 내부망에서는 이보다 작은 MTU(예: 1300바이트)를 강제하는 경우가 많습니다. 문제는 이렇게 작은 MTU를 가진 라우터가 큰 패킷을 받았을 때, 원래는 '이 패킷 너무 커서 못 보내'라는 ICMP 메시지를 보내야 하는데, 방화벽이나 미들박스가 이 ICMP 메시지를 조용히 버려버리면서 송신자는 계속 큰 패킷만 던지고 응답은 없는 '블랙홀' 상태에 빠집니다.

이 문제는 특히 사용자가 통제할 수 없는 네트워크(호텔, 공항, 이동통신사 망)를 사용할 때 더 자주 발생합니다. Cloudflare One Client는 이 문제를 해결하기 위해 수동적인 관찰자에서 능동적인 경로 탐색자로 진화했습니다. 핵심은 RFC 8899 기반의 Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) 구현입니다.

Diagram showing network path MTU discovery probe packets between Cloudflare One client and edge server Development Concept Image

해결책: Cloudflare One의 능동적 PMTUD 동작 원리

Cloudflare One Client는 MASQUE 프로토콜(Cloudflare의 오픈소스 QUIC 라이브러리 기반)을 사용하여 클라이언트-엣지 간 종단 간 능동 프로빙을 수행합니다. 더 이상 ICMP 오류 메시지를 기다리지 않습니다.

동작 순서

  1. 초기 연결 설정 시: 클라이언트가 지원 가능한 MTU 상한(예: 1500바이트)부터 중간값까지 다양한 크기의 암호화된 프로브 패킷을 Cloudflare 엣지로 전송합니다.
  2. 이진 탐색(Binary Search): 엣지가 특정 크기의 프로브를 수신하면 ACK를 보내고, 손실이 발생하면 해당 크기는 사용 불가능한 것으로 간주합니다. 이를 통해 정확한 MTU 값을 수 초 내에 특정합니다.
  3. 동적 재조정: 연결이 수립된 후에도 주기적으로 경로 용량을 재검증하여, 사용자가 1500 MTU Wi-Fi에서 1300 MTU 셀룰러 망으로 이동해도 애플리케이션 세션이 끊기지 않도록 가상 인터페이스 MTU를 실시간으로 변경합니다.
# 의사 코드: Cloudflare One PMTUD 동작 개념
# 실제 구현은 C/Rust 기반이지만, 로직 이해를 위한 Python 예시

def discover_mtu(client, edge, max_mtu=1500, min_mtu=1200):
    """
    클라이언트가 엣지로 프로브를 보내 최적 MTU를 찾는 함수
    """
    low = min_mtu
    high = max_mtu
    
    while low <= high:
        mid = (low + high) // 2
        # 지정된 크기의 암호화된 프로브 패킷 전송
        ack = client.send_probe(edge, size=mid)
        
        if ack:
            # 성공: 더 큰 MTU 시도
            low = mid + 1
        else:
            # 실패: 더 작은 MTU 시도
            high = mid - 1
    
    # 최종 MTU는 high 값
    return high

# 사용 예: 사용자가 1500 MTU 네트워크에서 1300 MTU 네트워크로 이동
current_mtu = discover_mtu(client, edge, max_mtu=1500)
client.set_virtual_interface_mtu(current_mtu)  # 동적 재조정

이 방식의 핵심 장점은 네트워크 경로의 변화를 사용자 인지 없이 매끄럽게 처리한다는 점입니다. 특히 긴급 구조대의 차량 탑재 라우터나 글로벌 하이브리드 워커의 호텔 네트워크처럼 NAT 트래버설과 우선순위 라우팅이 복잡하게 얽힌 환경에서 큰 효과를 냅니다.

Cloudflare One client security dashboard with FIPS compliance and encrypted tunnel status indicators System Abstract Visual

실제 영향: 응급 구조대부터 재택 근무자까지

사례 1: 응급 구조대 (FirstNet)

미국의 공공 안전망(FirstNet)은 차량 탑재 라우터가 타워 핸드오프 시 신호 변동을 겪으며 MTU가 급격히 줄어드는 경우가 잦습니다. PMTUD가 없으면 CAD(Computer Aided Dispatch) 시스템이 빈번히 연결 해제됩니다. Cloudflare One Client의 능동적 탐색 덕분에 현장 요원은 끊김 없는 통신을 유지할 수 있습니다.

사례 2: 글로벌 하이브리드 워커

해외 호텔에서 일하는 직원은 종종 10년 이상 된 미들박스와 이중 NAT 환경을 만납니다. PMTUD가 적용되면 화상 통화의 끊김이나 파일 전송 지연이 발생하기 전에 클라이언트가 병목을 감지하고 패킷 흐름을 최적화합니다.

국내 환경에서의 적용 맥락

한국은 세계 최고 수준의 초고속 인터넷 인프라를 갖추고 있지만, 여전히 구형 회선(특히 일부 중소기업 사내망, 공공기관 레거시 장비)에서는 MTU 제한이 존재합니다. 또한 재택근무가 보편화되면서 가정용 공유기의 MTU 설정이 표준(1500)이 아닌 경우(예: 일부 IPTV 공유기 1492)도 흔합니다. Cloudflare One Client는 이러한 국내 환경의 '보이지 않는' MTU 불일치 문제를 사용자 개입 없이 자동으로 해결해 줍니다.

이 기술의 한계 또는 주의사항

  • PMTUD는 클라이언트-엣지 구간에만 적용됩니다. 엣지 이후의 최종 서버까지의 경로는 보장하지 않습니다.
  • MASQUE 프로토콜을 사용해야 하므로, Cloudflare One Client의 구버전이나 타사 VPN 클라이언트에서는 동작하지 않습니다.
  • 프로빙 과정에서 소량의 추가 트래픽이 발생하지만, 일반적인 사용 환경에서는 체감하기 어려운 수준입니다.

Illustration of hybrid worker connecting from hotel Wi-Fi to corporate network via Cloudflare edge with seamless packet optimization

결론: 이제 네트워크 블랙홀은 과거의 일

Cloudflare One Client의 동적 PMTUD는 '현대 보안과 레거시 인프라의 충돌'이라는 오랜 숙제에 대한 실용적인 해답입니다. 더 이상 사용자가 MTU 값을 수동으로 찾아서 레지스트리를 건드릴 필요가 없습니다. 클라이언트가 스스로 경로를 학습하고 적응합니다.

다음 단계 학습 방향

  • Cloudflare One Client를 아직 사용하지 않는다면, 무료 티어(최초 50명)로 시작해 보세요.
  • PMTUD의 표준 스펙에 관심이 있다면 RFC 8899(DPLPMTUD)를 직접 읽어보는 것을 추천합니다.
  • 국내 클라우드/네트워크 엔지니어라면, 자사 제품에 유사한 MTU 최적화 로직을 적용할 수 있는지 검토해 보세요.

함께 보면 좋은 글

근거자료: 본 글의 기술적 내용은 Cloudflare 공식 블로그의 'Client Dynamic Path MTU Discovery' 포스트를 기반으로 작성되었습니다.

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.