Tech Study/Network2024. 11. 27. 17:19

문서 링크

 

초록

NAT의 환경에 따라 P2P 직접 연결이 불가능 한 경우가 있다.
이럴 경우 relay로 쓰이는 서비스에 대한 규격을 정의한 문서이다.
최초 ICE를 위한 규격이었으나, ICE와 독립적으로 사용 가능하다.

개요

양쪽 peer의 NAT가 address-dependent mapping 혹은 (address 및 port)-dependent mapping behavior(RFC4787)를 가질 경우 홀펀칭이 불가능하여 즉, P2P 직접 통신이 되지 않음. 이를 해결하기 위해 퍼블릭망에 relay를 구성하여 peer 간의 간접통신이 되도록 함. 그 외 자신의 IP 주소가 노출되는 것을 원치 않는 유저가 relay를 이용할 수도 있음.

TURN 규격은 이런 relay를 제공하기 위한 규격임.

TURN 서버는 아래의 기능을 제공할 수 있음

  • 클라이언트가 상대방과의 통신 경로를 arrange할 수 있도록 함
  • 클라이언트가 relay 완료 상태를 제어
  • 클라이언트는 ralayed transport address라는 TURN서버에서 할당해주는 주소를 통해 relay 진행
  • 피어가 relayed transport address로 패킷을 보내면 TURN서버는 연결된 다른 peer에게 해당 패킷을 중계
  • 반대 방향의 패킷들은 TURN헤더로 캡슐화되어 어떤 피어에게 온 데이터인지 알 수 있게 해줌
  • ICMP 에러도 반환 가능

클라이언트가 TURN 서버를 통해 relay를 하려면 상대방의 주소를 획득하고 이용하는 방법이 있어야 한다. 이 방법에 대한 기술은 본 규격과 무관하다. 응용하려는 분야에 맞게 규칙 및 구조를 구현해야 한다. (단순한 예로, peer 간에 이메일로 IP주소 주고 받기)

TURN은 STUN(RFC8489)의 확장이다.

 

용어

명칭 설명
TURN STUN의 확장으로 TURN 서버/클라이언트 간 통신 규약
Peer TURN 클라이언트가 통신하고자 하는 상대방
Transport Address IP주소와 port로 이루어진 통신 주소
Host Transport Address 클라이언트 및 상대방의 주소. NAT 아래에 존재하는 단말이라면 로컬 주소를 뜻한다.
Server-Reflexive Transport Address NAT장비에서 클라이언트에게 할당해준 실제 인터넷 상에서 사용할 주소. TURN 서버는 이 주소를 통해 client 및 peer 등을 식별함
Relayed Transport Address TURN 서버에서 peer 간 릴레이에 사용되는 주소
TURN Server Transport Address TURN 서버와 시그널링을 하기 위한 주소
Peer Transport Address TURN 서버에서 보이는 TURN client(peer)의 주소. 일반적으로 Server-Reflexive Transport Address와 동일하다.
Allocation Relayed Transport Address를 'Allocate' 시그널 요청한 클라이언트에게 할당
5-tuple src ip/port, dst ip/port, protocol로 이루어진 정보. 퍼블릭 망에서 5개의 정보가 모여 global uniqueness가 보장됨. 때문에 네트워크 스위칭 등에도 많이 쓰이는 정보
Channel 클라이언트가 특정 peer와 통신하기 위해 사용하는 채널 번호와 TURN서버에서 실제 통신하는 peer 주소를 해당 채널 번호와 매핑해 놓은 것
Permission 생성된 allocation에 대한 특정 peer의 이용 권한을 나타냄. 일종의 ACL (Access Contact List)
Realm/Nonce 인증에 사용되는 문자열들
(D)TLS TLS의 UDP 버전

 

Posted by JMAN