2. NAT traversal(NAT 트래버설)

김신영·2024년 11월 14일

WebRTC

목록 보기
3/4

NAT 트래버설은 NAT(Network Address Translation) 환경에서 P2P(Peer-to-Peer) 통신을 가능하게 하는 기술이다.

NAT 트래버설이 필요한 이유

NAT는 내부 네트워크의 여러 기기가 하나의 공인 IP 주소를 공유하여 외부와 통신하도록 돕는 기술입니다. 하지만 NAT는 보안을 위해 외부에서 내부 네트워크로 들어오는 연결을 제한하는 기능을 가지고 있어, P2P처럼 서로 연결된 두 기기가 직접 통신하기 어렵게 만듭니다.
NAT 트래버설은 이러한 NAT의 제한을 극복하고 P2P 통신을 가능하게 하기 위해 필요합니다.

NAT 트래버설 동작방식

NAT 트래버설은 크게 STUN(Session Traversal Utilities for NAT), TURN(Traversal Using Relays around NAT), ICE(Interactive Connectivity Establishment) 등의 프로토콜을 사용합니다.  

  • STUN: NAT 뒤에 있는 호스트가 자신의 공용 IP 주소와 포트 번호를 알아내는 데 사용됩니다.
  • TURN: STUN으로도 연결이 불가능한 경우, 중계 서버를 이용하여 연결을 설정합니다.
  • ICE: STUN과 TURN을 모두 사용하여 가장 적합한 연결 방법을 찾는 프로토콜입니다.

NAT 트래버설의 일반적인 과정:

  1. 두 개의 호스트가 연결을 시도: 서로 연결하려는 두 호스트가 STUN 서버를 통해 자신의 공용 IP 주소와 포트 번호를 알아냅니다.
  2. 직접 연결 시도: 각 호스트는 상대방의 공용 IP 주소와 포트 번호를 이용하여 직접 연결을 시도합니다.
  3. NAT 문제 발생 시: 직접 연결이 실패하면 TURN 서버를 이용하여 중계 연결을 시도합니다.
  4. 최적의 연결 경로 선택: ICE는 STUN과 TURN을 통해 얻은 정보를 바탕으로 가장 적합한 연결 경로를 선택합니다.

NAT 트래버설이 중요한 이유

  • P2P 애플리케이션 구현: 화상 회의, 온라인 게임, 파일 공유 등 P2P 기반의 다양한 애플리케이션을 구현하는 데 필수적입니다.
  • WebRTC: WebRTC는 NAT 트래버설을 기반으로 웹 브라우저에서 실시간 통신을 가능하게 합니다.
  • IoT: IoT 기기 간의 P2P 통신을 위해 NAT 트래버설이 필요합니다.

NAT 트래버설이 적용된 서비스의 예시

  1. 화상 회의 서비스
    Zoom, Google Meet, Microsoft Teams: 이러한 서비스들은 사용자 간의 실시간 영상 및 음성 통신을 위해 NAT 트래버설을 활용합니다. 참여자들의 네트워크 환경이 다르더라도 원활한 통화를 가능하게 합니다.
  2. 온라인 게임
    많은 온라인 게임: 특히 실시간 전략 게임이나 1인칭 슈팅 게임은 낮은 지연 시간이 중요하며, NAT 트래버설을 통해 다수의 플레이어가 안정적으로 연결되어 게임을 즐길 수 있도록 합니다.
  3. 원격 지원 서비스
    TeamViewer, AnyDesk: 원격으로 다른 사람의 컴퓨터를 제어하거나 지원하는 서비스에서도 NAT 트래버설이 사용됩니다. 실시간으로 화면을 공유하고 파일을 전송하기 위해 안정적인 연결이 필요하기 때문입니다.
  4. 실시간 협업 도구
    Google Docs, Miro: 여러 사람이 동시에 문서를 편집하거나 화이트보드에 그림을 그리는 등의 협업 작업을 할 때 NAT 트래버설을 통해 실시간으로 변경 사항을 공유합니다.
  5. WebRTC 기반 서비스
    WebRTC를 활용한 모든 서비스: WebRTC는 웹 브라우저에서 실시간 통신을 가능하게 하는 기술로, NAT 트래버설을 기반으로 동작합니다. 화상 채팅, 화면 공유, 파일 전송 등 다양한 기능을 제공하는 웹 애플리케이션에서 활용됩니다.
  6. P2P 파일 공유 서비스
    BitTorrent, WeTransfer: 대용량 파일을 여러 사용자와 공유하는 P2P 파일 공유 서비스 역시 NAT 트래버설을 활용하여 빠르고 효율적인 파일 전송을 지원합니다.

위에서 언급된 서비스 외에도, 실시간 통신이 필요한 대부분의 서비스에서 NAT 트래버설이 활용되고 있습니다.

NAT 트래버설 구현 시 어려움

  1. NAT 종류와 설정의 다양성:
  • 대칭 NAT, 포트 제한 NAT 등: NAT에는 다양한 종류가 있으며, 각각의 NAT가 가지는 특징과 제한이 다릅니다. 이러한 다양한 NAT 환경에서 안정적인 P2P 연결을 구축하는 것은 쉽지 않습니다.
  • 공유기 설정: 각 가정이나 기업에서 사용하는 공유기의 설정이 다르기 때문에, 일관된 NAT 트래버설 동작을 보장하기 어렵습니다.
  1. 네트워크 환경의 불안정성:
  • 패킷 손실, 지연: 네트워크 환경에 따라 패킷 손실이나 지연이 발생할 수 있으며, 이는 P2P 연결의 품질을 저하시킵니다.
  • 방화벽 규칙: 방화벽 규칙에 의해 특정 포트나 프로토콜이 차단될 수 있습니다.
  1. 보안 문제:
  • 공격에 노출: NAT 트래버설을 위해 열려 있는 포트는 해킹 시도에 노출될 수 있습니다.
  • 개인정보 유출: P2P 통신 과정에서 개인정보가 유출될 위험이 있습니다.
  1. ICE 프로토콜의 복잡성:
  • 다양한 후보: ICE는 STUN, TURN 등 다양한 후보를 평가하여 최적의 연결 경로를 선택해야 하므로 구현이 복잡합니다.
  • 실시간 변경: 네트워크 환경이 변화함에 따라 연결 경로를 동적으로 변경해야 합니다.
  1. NAT 변화에 대한 적응:
  • 동적 IP: 공인 IP 주소가 자주 변경되는 동적 IP 환경에서는 연결을 유지하기 위해 추가적인 메커니즘이 필요합니다.
  1. NAT 홀 펀칭 문제:
  • 대칭 NAT: 대칭 NAT 환경에서는 외부에서 들어오는 연결 요청에 응답하기 어려워 홀 펀칭이 복잡해집니다.
NAT 트래버설과 홀펀칭

NAT 트래버설과 홀펀칭은 종종 같은 의미로 사용되기도 하지만, 엄밀히 말하면 약간 다른 의미를 가지고 있습니다.

NAT 트래버설 (NAT traversal)

  • 넓은 의미: NAT 환경에서 P2P 통신을 가능하게 하는 모든 기술을 통칭하는 포괄적인 개념입니다.
  • 다양한 기법 포함: STUN, TURN, ICE 등 다양한 프로토콜과 기술을 포함합니다.
  • 목표: NAT 뒤에 있는 호스트들이 서로 연결하여 통신할 수 있도록 하는 것

홀펀칭 (Hole Punching)

  • 좁은 의미: NAT에 일종의 '구멍'을 뚫어 직접적인 P2P 연결을 가능하게 하는 특정한 기술입니다.
  • STUN 활용: 주로 STUN 프로토콜을 이용하여 NAT에 정보를 전달하고, NAT가 응답 패킷을 허용하도록 유도합니다.
  • 목표: NAT의 제한을 우회하여 직접적인 P2P 연결을 수립하는 것
    즉, 홀펀칭은 NAT 트래버설의 한 종류라고 볼 수 있습니다. NAT 트래버설이 더 포괄적인 개념이고, 홀펀칭은 그 안에 포함되는 구체적인 기술 중 하나인 것입니다.

왜 홀펀칭이 중요할까?

  • 직접 연결: 중계 서버를 거치지 않고 직접 연결하기 때문에 지연 시간이 짧고 성능이 좋습니다.
  • 비용 절감: 중계 서버를 사용하지 않아 비용을 절감할 수 있습니다.
    하지만 홀펀칭이 항상 가능한 것은 아닙니다. NAT의 종류나 설정에 따라 홀펀칭이 불가능할 수도 있습니다. 이럴 때는 TURN 서버와 같은 중계 서버를 이용해야 합니다.

NAT 트래버설을 위한 오픈 소스 라이브러리

WebRTC

가장 널리 사용되는 실시간 통신 기술 중 하나이며, NAT 트래버설을 위한 STUN, TURN, ICE 프로토콜을 완벽하게 지원합니다.
장점: 표준 기반, 다양한 브라우저 지원, 활발한 커뮤니티
단점: 복잡한 API, 학습 곡선이 가파를 수 있음
LibP2P

고성능 P2P 네트워킹 스택으로, NAT 트래버설 외에도 다양한 기능을 제공합니다.
장점: 확장성이 뛰어나고, 다양한 네트워크 환경에 적합
단점: WebRTC에 비해 상대적으로 커뮤니티가 작을 수 있음
Janus Gateway

WebRTC 서버로, STUN/TURN 서버를 내장하고 있어 별도의 구성 없이 사용할 수 있습니다.
장점: 사용이 간편하고, 다양한 미디어 서버 기능을 제공
단점: 대규모 시스템에는 적합하지 않을 수 있음
Coturn

STUN, TURN 서버를 위한 오픈 소스 프로젝트로, 높은 성능과 안정성을 자랑합니다.
장점: 성능이 우수하고, 커스터마이징이 용이함
단점: 단순한 STUN/TURN 서버 기능만 제공

라이브러리 선택 시 고려 사항

  • 프로젝트 규모: 소규모 프로젝트라면 Janus Gateway와 같은 간편한 솔루션이 적합할 수 있으며, 대규모 프로젝트라면 LibP2P나 Coturn을 고려해볼 수 있습니다.
  • 기능: 필요한 기능에 따라 라이브러리를 선택해야 합니다. 예를 들어, 단순한 STUN/TURN 기능만 필요하다면 Coturn이 적합하고, 다양한 미디어 서버 기능이 필요하다면 Janus Gateway가 적합합니다.
  • 성능: 실시간 통신 서비스에서는 낮은 지연 시간과 높은 처리량이 중요하므로, 성능 벤치마크 결과를 참고하여 라이브러리를 선택해야 합니다.
  • 커뮤니티: 활발한 커뮤니티를 가진 라이브러리를 선택하면 문제 해결이나 추가 기능 개발 시 도움을 받기 쉽습니다.
profile
공부합시다.

0개의 댓글