본문 바로가기
TYLER SONGBlog
← Blog index
CS10 min read

WAN: 원거리 네트워크를 연결하는 광역 통신망

광역 통신망(Wide Area Network, WAN)은 도시, 국가, 대륙처럼 넓은 지역에 분산된 네트워크를 연결한다. 패킷은 여러 라우터와 통신 사업자 네트워크를 거치며, 경로의 거리와 혼잡도에 따라 지연 시간과 처리량이 달라진다. 인터넷은 여러 자율 시스템(Autonomous System, AS)이 상호 연결된 대표적인 공용 WAN이다.

By 송민성

1. 개념

광역 통신망(Wide Area Network, WAN)은 물리적으로 떨어진 근거리 통신망(Local Area Network, LAN)이나 개별 장치를 연결하는 네트워크다.

회사의 서울 사무실과 부산 데이터센터를 전용 회선으로 연결하거나, 국내 사용자가 해외 클라우드 서버에 접속하는 통신이 WAN에 해당한다.

WAN은 다음 형태로 구성할 수 있다.

  • 인터넷을 이용하는 공용 WAN
  • 통신 사업자의 전용 회선(leased line)
  • 다중 프로토콜 레이블 스위칭(Multiprotocol Label Switching, MPLS) 망
  • 인터넷 위에 암호화 터널을 구성하는 가상 사설망(Virtual Private Network, VPN)
  • 여러 회선을 소프트웨어 정책으로 제어하는 소프트웨어 정의 WAN(Software-Defined WAN, SD-WAN)

인터넷은 대표적인 WAN이지만 모든 WAN이 인터넷인 것은 아니다. 특정 조직만 사용하는 폐쇄형 전용망도 WAN이다.

2. 왜 사용하는가

WAN은 서로 다른 위치의 네트워크와 서비스를 연결하기 위해 사용한다.

  • 지사와 본사의 내부 시스템 연결
  • 사용자와 원격 웹 서버 연결
  • 서로 다른 클라우드 리전(region) 간 데이터 전송
  • 데이터센터와 클라우드를 연결하는 하이브리드 클라우드 구성
  • 원격 근무자의 사내 네트워크 접속
  • 장애에 대비한 다중 회선과 우회 경로 구성

LAN에서는 조직이 스위치, 케이블, 무선 접근 지점(access point)을 직접 관리할 수 있다. WAN에서는 통신 사업자, 인터넷 교환 지점(Internet Exchange Point, IXP), 다른 자율 시스템 등 외부 네트워크를 거치는 경우가 많다.

따라서 WAN 설계에서는 연결 여부뿐 아니라 지연 시간(latency), 처리량(throughput), 패킷 손실(packet loss), 비용, 보안, 가용성(availability)을 함께 고려한다.

3. 동작 원리

라우터를 통한 패킷 전달

호스트는 목적지 인터넷 프로토콜 주소(IP address)가 자신의 서브넷에 속하지 않으면 패킷을 기본 게이트웨이(default gateway)로 보낸다.

라우터는 목적지 IP 주소를 라우팅 테이블(routing table)과 비교해 다음 홉(next hop)을 선택한다. 각 라우터는 패킷의 전체 경로가 아니라 자신이 전달할 다음 구간을 결정한다.

text
사용자 장치
    ↓
가정 또는 회사 라우터
    ↓
인터넷 서비스 제공자
    ↓
중간 통신망
    ↓
서버 측 통신 사업자
    ↓
목적지 서버

패킷은 각 구간에서 새로운 링크 계층 프레임(frame)에 담긴다. 출발지와 목적지 IP 주소는 일반적으로 유지되지만, 이더넷 매체 접근 제어 주소(MAC address)는 구간마다 달라진다. 네트워크 주소 변환(Network Address Translation, NAT)이 적용되면 IP 주소나 포트 번호도 변경될 수 있다.

자율 시스템 간 라우팅

인터넷은 하나의 조직이 관리하지 않는다. 인터넷 서비스 제공자, 클라우드 사업자, 대학, 대기업 등이 각각 자율 시스템(Autonomous System, AS)을 운영한다.

서로 다른 자율 시스템은 경계 경로 프로토콜(Border Gateway Protocol, BGP)을 사용해 도달 가능한 IP 프리픽스(prefix)와 경로 정보를 교환한다.

BGP 경로는 물리적으로 가장 짧은 경로만으로 결정되지 않는다. 사업자 간 계약, 라우팅 정책, 경로 속성도 선택에 영향을 준다. 따라서 지리적으로 가까운 서버라도 네트워크 경로가 길어질 수 있다.

캡슐화와 터널

VPN은 기존 WAN 위에 논리적인 터널을 만든다. 원래 패킷을 다른 패킷 안에 캡슐화(encapsulation)하고 필요하면 암호화한다.

text
외부 IP 헤더
암호화 또는 터널 헤더
원래 IP 헤더
전송 계층 데이터

터널은 공용 인터넷을 통해 사설 네트워크를 연결할 수 있게 한다. 대신 추가 헤더로 실제 전송 가능한 최대 데이터 크기가 줄어들고, 암호화 처리 비용이 발생한다.

전송 제어 프로토콜의 동작

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 패킷 손실과 혼잡에 대응해 전송 속도를 조절한다.

TCP 연결을 시작할 때는 3방향 핸드셰이크(three-way handshake)가 필요하다. 전송 계층 보안(Transport Layer Security, TLS)을 사용하면 암호화 연결을 위한 추가 메시지 교환도 발생한다.

왕복 시간(Round-Trip Time, RTT)이 큰 WAN에서는 다음 작업의 지연이 커진다.

  • TCP 연결 수립
  • TLS 연결 수립
  • 요청과 응답 교환
  • 손실된 패킷의 재전송
  • 여러 번의 순차적인 응용 프로그램 요청

4. 코드 예제

다음 코드는 도메인 이름 시스템(Domain Name System, DNS) 조회, TCP 또는 TLS 연결, 첫 응답 바이트, 전체 응답 시간을 측정한다. Node.js 내장 모듈만 사용한다.

typescript
import dns from "node:dns/promises"; import net from "node:net"; import tls from "node:tls"; import http from "node:http"; import https from "node:https"; import { performance } from "node:perf_hooks"; function elapsed(start: number): string { return `${(performance.now() - start).toFixed(1)}ms`; } async function measureConnection(url: URL): Promise<void> { const port = Number(url.port) || (url.protocol === "https:" ? 443 : 80); const start = performance.now(); await new Promise<void>((resolve, reject) => { if (url.protocol === "https:") { const socket = tls.connect( { host: url.hostname, port, servername: url.hostname, }, () => { console.log(`TCP 및 TLS 연결: ${elapsed(start)}`); socket.end(); resolve(); }, ); socket.once("error", reject); return; } const socket = net.connect( { host: url.hostname, port, }, () => { console.log(`TCP 연결: ${elapsed(start)}`); socket.end(); resolve(); }, ); socket.once("error", reject); }); } async function measureHttp(url: URL): Promise<void> { const client = url.protocol === "https:" ? https : http; const start = performance.now(); await new Promise<void>((resolve, reject) => { const request = client.get( url, { headers: { "user-agent": "wan-probe/1.0", }, }, (response) => { console.log(`첫 응답 바이트: ${elapsed(start)}`); let receivedBytes = 0; response.on("data", (chunk: Buffer) => { receivedBytes += chunk.length; }); response.on("end", () => { console.log(`전체 응답: ${elapsed(start)}`); console.log(`상태 코드: ${response.statusCode}`); console.log(`수신 크기: ${receivedBytes}바이트`); resolve(); }); }, ); request.once("error", reject); }); } async function main(): Promise<void> { const input = process.argv[2]; if (!input) { throw new Error("사용법: npx tsx wan-probe.ts <URL>"); } const url = new URL(input); const dnsStart = performance.now(); const address = await dns.lookup(url.hostname); console.log(`대상 주소: ${address.address}`); console.log(`DNS 조회: ${elapsed(dnsStart)}`); await measureConnection(url); await measureHttp(url); } main().catch((error: unknown) => { const message = error instanceof Error ? error.message : String(error); console.error(message); process.exitCode = 1; });

파일을 wan-probe.ts로 저장한 뒤 실행한다.

shell
npx tsx wan-probe.ts https://example.com

각 측정은 독립된 연결을 사용한다. DNS 캐시, 서버 처리 시간, 연결 재사용 여부, 프록시 환경에 따라 결과가 달라질 수 있다.

경로에 포함된 라우터와 각 홉의 응답 시간을 확인하려면 운영체제의 경로 추적 도구를 사용할 수 있다.

shell
traceroute example.com

윈도우에서는 다음 명령을 사용한다.

shell
tracert example.com

경로 추적 결과의 별표는 해당 라우터가 만료된 패킷에 응답하지 않았다는 뜻일 수 있다. 실제 데이터 전달 실패를 의미하지는 않는다.

5. 시간 복잡도 또는 성능 특성

WAN 성능은 알고리즘의 시간 복잡도보다 지연 시간, 대역폭, 패킷 손실, 혼잡, 경로 특성의 영향을 크게 받는다.

전파 지연

전파 지연(propagation delay)은 신호가 물리적 매체를 이동하는 데 걸리는 시간이다.

text
전파 지연 = 거리 / 매체에서의 신호 전파 속도

거리가 멀수록 최소 지연 시간이 증가한다. 광섬유 안의 신호 속도는 진공에서의 빛의 속도보다 느리며, 실제 경로도 두 지점 사이의 직선과 일치하지 않는다.

직렬화 지연

크기가 L비트인 패킷을 초당 R비트의 링크로 전송할 때 직렬화 지연(serialization delay)은 다음과 같다.

text
직렬화 지연 = L / R

12,000비트 크기의 데이터를 100 Mbit/s 링크에 올리는 데 필요한 직렬화 지연은 다음과 같다.

text
12,000 / 100,000,000 = 0.00012초 = 0.12밀리초

대역폭-지연 곱

대역폭-지연 곱(Bandwidth-Delay Product, BDP)은 한 번에 네트워크 경로 위에 존재할 수 있는 데이터 양을 나타낸다.

text
대역폭-지연 곱 = 병목 대역폭 × 왕복 시간

대역폭이 100 Mbit/s이고 RTT가 100ms라면 다음과 같다.

text
100,000,000bit/s × 0.1s = 10,000,000bit
10,000,000bit / 8 = 1,250,000byte

이 경로의 용량을 충분히 사용하려면 TCP 송신 측과 수신 측이 약 1.25MB 이상의 미확인 데이터를 처리할 수 있어야 한다.

패킷 손실과 혼잡

패킷 손실은 재전송을 발생시키고 TCP 혼잡 제어(congestion control)가 전송량을 줄이게 만들 수 있다. 대역폭이 높더라도 RTT와 손실률이 크면 단일 TCP 연결의 처리량이 제한될 수 있다.

홉 수만으로 성능을 판단할 수는 없다. 각 홉의 링크 속도, 혼잡 상태, 큐잉 지연(queueing delay), 라우팅 경로가 함께 영향을 준다.

6. 실무 사용 사례

다중 리전 웹 서비스

웹 서비스를 여러 클라우드 리전에 배치하면 사용자와 가까운 리전에서 요청을 처리할 수 있다. 도메인 이름 시스템 기반 라우팅, 애니캐스트(anycast), 전역 부하 분산(global load balancing) 등을 사용한다.

리전 간 데이터베이스 복제에는 WAN 지연이 직접 영향을 준다. 동기 복제(synchronous replication)는 원격 리전의 응답을 기다려야 하므로 쓰기 지연이 증가한다. 비동기 복제(asynchronous replication)는 응답 지연을 줄이지만 장애 시 아직 복제되지 않은 데이터가 손실될 수 있다.

지사 네트워크 연결

기업은 전용 회선, MPLS, VPN, SD-WAN을 이용해 지사와 본사를 연결한다. 중요한 업무 트래픽에는 높은 우선순위를 주고, 일반 인터넷 트래픽은 별도 회선으로 보낼 수 있다.

콘텐츠 전송 네트워크

콘텐츠 전송 네트워크(Content Delivery Network, CDN)는 여러 지역의 엣지 서버(edge server)에 정적 파일과 캐시 가능한 응답을 배치한다. 사용자와 원본 서버 사이의 WAN 거리를 줄여 지연 시간과 원본 서버 부하를 낮춘다.

하이브리드 클라우드

사내 데이터센터와 클라우드를 VPN이나 전용 연결로 묶을 수 있다. 라우팅 테이블, 중복되지 않는 IP 주소 범위, 최대 전송 단위(Maximum Transmission Unit, MTU), 장애 시 우회 경로를 함께 설계해야 한다.

7. 주의할 점

  • 높은 대역폭이 낮은 지연 시간을 의미하지 않는다. 대역폭은 단위 시간당 전송량이고, 지연 시간은 데이터가 목적지까지 이동하는 시간이다.
  • 핑(ping) 결과만으로 애플리케이션 성능을 판단하면 안 된다. 일부 네트워크는 인터넷 제어 메시지 프로토콜(Internet Control Message Protocol, ICMP)을 제한하며, 실제 요청에는 DNS, TCP, TLS, 서버 처리 시간이 추가된다.
  • VPN과 터널은 헤더를 추가한다. 경로 MTU보다 큰 패킷이 생성되면 단편화(fragmentation)되거나 폐기될 수 있다.
  • 인터넷 경로는 비대칭일 수 있다. 요청과 응답이 서로 다른 라우터와 통신 사업자를 거칠 수 있다.
  • 경로 추적에서 특정 홉의 응답 시간이 높아도 이후 홉이 정상이라면 해당 라우터의 제어 메시지 응답 우선순위가 낮은 것일 수 있다.
  • WAN을 신뢰할 수 있는 내부망으로 가정하면 안 된다. 전송 구간 암호화, 인증, 방화벽, 최소 권한 정책이 필요하다.
  • 네트워크 재시도에는 제한 횟수, 지수 백오프(exponential backoff), 타임아웃을 적용해야 한다. 무제한 재시도는 장애 상황의 트래픽을 증가시킨다.

8. 핵심 정리

  • WAN은 서로 멀리 떨어진 LAN과 장치를 연결하는 광역 통신망(Wide Area Network)이다.
  • 패킷은 여러 라우터를 거치며, 각 라우터는 라우팅 테이블을 이용해 다음 홉을 선택한다.
  • 인터넷의 자율 시스템은 BGP를 사용해 IP 프리픽스와 경로 정보를 교환한다.
  • WAN 성능은 대역폭뿐 아니라 RTT, 패킷 손실, 혼잡, 라우팅 경로의 영향을 받는다.
  • CDN, 다중 리전 배치, 연결 재사용, 압축, 캐싱은 WAN 구간의 지연과 전송량을 줄이는 데 사용된다.
  • 운영 환경에서는 연결 시간, 첫 응답 바이트, 전체 응답 시간, 손실률을 구분해 측정해야 한다.