965. NAT 횡단 (NAT Traversal) - 사설 IP 공인 IP 공유기 뚫기 STUN TURN ICE 프로토콜 VoIP 화상 통신 P2P 통신망 차단 우회 연결망 통제 모델
핵심 인사이트: 철수와 영희가 화상 통화(P2P)를 하려는데, 철수도 집구석 와이파이(공유기 192.168.0.2)를 쓰고 영희도 카페 와이파이(192.168.0.5)를 쓴다. 둘 다 사설 IP라 가짜 주소다. 밖에서 철수 집 공유기를 두드리면 공유기(NAT/방화벽)가 "내부의 누구를 찾는진 모르겠고, 넌 못 들어가!" 하고 쾅 막아버린다(통신 단절). "야! 안쪽에서 밖으로 나가는 문은 열어주잖아! 철수가 밖(STUN 서버)으로 문을 빼꼼 열고 나갈 때, 그 뚫린 구멍(포트)을 재빨리 돌멩이로 괴어 놓고 영희한테 카톡 쏴! '영희야 나 방금 1024번 구멍으로 나왔어. 이 구멍 타고 우리 집으로 역주행해서 들어와!'" 거대한 공유기 성벽을 뚫어버리는 양방향 터널 굴착 흑마법, NAT 횡단이다.
Ⅰ. NAT(Network Address Translation)의 거대한 벽 🌟
- NAT의 이중성: 가정용 공유기(NAT)는 부족한 IPv4 주소를 아껴주지만, 밖(인터넷)에서 집 안(사설 IP)으로 들어오는 연결은 보안상 철저하게 차단(Drop)해버리는 단방향 철문 방어막입니다.
- 재앙의 시작: 웹서핑(클라이언트가 먼저 밖으로 요청)은 문제없지만, 두 대의 컴퓨터가 직접 붙어야 하는 스카이프(음성 통화), 화상 회의(WebRTC), P2P 파일 전송 시스템에서는 양쪽 다 NAT 벽 안에 갇혀 서로에게 전화를 걸 수 없는 최악의 통신 먹통 사태가 터집니다.
Ⅱ. NAT 횡단 (NAT Traversal)의 개념과 마법 (홀 펀칭) 🌟
- 개념: 두 단말기가 모두 사설 IP 대역(공유기 밑)에 숨어 있을 때, 가운데 중계 서버(STUN/TURN)를 이용해 각자의 공유기(NAT) 방화벽 구멍을 강제로 열고 유지시켜, 두 단말 간에 직접적인(P2P) 통신 세션을 강제로 관통(횡단, Traversal)시키는 릴레이 통신 기술입니다.
- UDP 홀 펀칭 (Hole Punching): 안에서 밖으로 문을 밀고 나갈 때 방화벽에 잠깐 뚫리는 '임시 구멍(포트 매핑)'을 닫히기 전에 얼른 꿰뚫어 버리는 핵심 눈속임 기술입니다.
Ⅲ. NAT 횡단을 뚫어내는 3총사 (STUN, TURN, ICE) 🌟 빈출 🌟
웹 브라우저로 줌(Zoom) 화상 회의를 하는 WebRTC 기술의 뼈대입니다.
1. STUN (거울아 거울아 내 공인 IP가 뭐니?) 🌟
가장 가볍고 먼저 시도하는 기술입니다.
- 집 안의 폰(철수)은 자기 바깥쪽 대문(공유기)의 진짜 공인 IP 주소가 뭔지 모릅니다.
- 폰이 바깥세상 하늘에 떠 있는 **STUN 서버(거울)**에게 패킷을 쏩니다. "거울아, 방금 날아온 내 겉면 얼굴(공인 IP랑 뚫린 포트 번호)이 어떻게 생겼니?"
- STUN 서버가 "너네 집 공유기 공인 IP는
1.1.1.1이고, 뚫고 나온 구멍(포트)은5000번이다!"라고 알려줍니다. - 철수는 이 번호를 영희에게 카톡(시그널링)으로 보내고, 영희가 철수 집
1.1.1.1:5000으로 돌진해서 뚫려있는 구멍으로 쏙 들어가(홀 펀칭) 통화가 연결됩니다.
2. TURN (도저히 구멍이 안 뚫릴 때의 용병 서버) 🌟
치명적인 한계의 구원 투수입니다.
- 회사(Symmetric NAT)처럼 보안이 극도로 빡센 방화벽은, STUN으로 알아낸 5000번 구멍으로 영희가 몰래 들어오려 하면 "이 구멍은 STUN 서버 전용 구멍이야! 다른 년(영희)이 어딜 들어와!" 하고 칼같이 모가지를 자릅니다(STUN 실패).
- 이때 최후의 수단으로 폰은 **TURN 서버(중계 릴레이 기지국)**에게 붙습니다. 철수도 TURN 서버에 접속하고, 영희도 밖에서 TURN 서버에 접속해서, 가운데 위치한 서버가 100% 데이터를 릴레이(중계 대행)해서 토스해 줍니다.
- 구멍 뚫기엔 성공하지만, 중앙 서버에 미친 듯한 대역폭 트래픽 부하가 걸려서 돈이 엄청 깨집니다.
3. ICE (최종 조율사 마스터)
- 개발자는 폰에 ICE 프레임워크를 심어둡니다.
- "야, 철수야. 일단 직통 랜선(로컬)부터 찔러보고 ➜ 안 되면 STUN(홀 펀칭) 찔러봐서 뚫어보고 ➜ 도저히 방화벽이 안 뚫려서 멸망할 것 같으면 마지막에 눈물을 머금고 비싼 TURN(릴레이) 서버 써라!" 라며 가장 빠른 직통 연결 방법을 우선순위대로 1초 만에 자동 선택해 주는 오케스트레이터(지휘자) 알고리즘입니다.
📢 섹션 요약 비유: P2P 화상 통화에서 NAT 횡단(NAT Traversal)은 '양쪽 철창 감옥에 갇힌 두 죄수의 실 전화기 연결 작전'입니다. 죄수(사설 IP)들은 창문 없는 독방에 갇혀 상대방 감옥의 주소(공인 IP)를 전혀 모릅니다(통신 단절). 이를 뚫기 위해 **STUN 서버(마법 거울)**가 등장합니다. 죄수가 환풍구 틈새로 손을 뻗어 하늘의 거울을 비춰보면 "오! 내 뻗은 손의 밖에서 본 주소는 5동 1번 창살 틈(공유기 포트)이구나!" 하고 깨닫고, 간수 몰래 쪽지로 상대방에게 내 창살 틈 번호를 알려주어 그 구멍으로 실을 꿰어 통화합니다(홀 펀칭). 만약 감옥 경비가 너무 삼엄해 틈새로 넣은 실을 가위로 잘라버린다면(강력한 방화벽), 마지막 수단으로 두 죄수는 하늘에 떠 있는 **TURN 서버(심부름센터 드론)**에게 실을 매달아 하늘을 통해 소리를 간접적으로 중계받는 극악의 우회로를 뚫어내어 통신 단절을 완벽하게 부숴버립니다.