문서 링크
초록
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 버전 |
'Tech Study > Network' 카테고리의 다른 글
RFC 8489 - Session Traversal Utilities for NAT (STUN) 기초 분석 (0) | 2024.10.07 |
---|