Tech Study/Network
RFC 8656 - Traversal Using Relays around NAT (TURN) 기초 분석 1
swJman
2024. 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 버전 |