Acronym&Abbreviation

TURN (Traversal Using Relays around NAT)

dpswlsldj 2021. 3. 17. 19:00
728x90

TURN은 NAT 또는 방화벽의 통과를 지원하는 프로토콜이며 TURN 서버는 relay 서버입니다.

 

STUN 기술로는 같은 NAT 내에 존재하거나 Symmetric NAT 을 사용하는 클라이언트 끼리의 통신을 지원할 수 없는 문제가 있기 때문에 이를 해결하기 위해 TURN을 사용합니다.

 

TURN은 RFC-5766에 정의되어 있습니다.

 

두 클라이언트(peer)가 서로 통신을 하려고 하는데 자신의 Public IP를 통해 상대방이 통신할 수 없을 때, TURN 서버를 사용하여 relay하는 방식으로 통신을 하게 됩니다.

 

직접 통신하지 않고 relay 함으로 인해 오버헤드 및 지연이 발생하지만 이 방법이 아니면 통신할 수 없으므로 어쩔 수 없을 경우 사용합니다.

 

클라이언트와 TURN 서버 간의 통신은 UDP를 이용하지만 STUN의 사용과 동일하게 TCP 및 TLS의 지원도 이루어지고 있습니다.

 

아래 그림에서 Peer A는 STUN 서버를 통해 본인의 Public IP를 가지고 오지만, Symmetric NAT를 사용하기 때문에 다른 클라이언트나 서버와 통신(=애플리케이션이 다른 경우)할 때에는 NAT Mapping Table(Private IP, Port)가 변경되기 때문에 STUN을 통해 바인딩한 정보를 사용할 수 없게 됩니다.

 

https://mdn.mozillademos.org/files/6117/webrtc-turn.png

 

RFC-5766 문서의 Figure 1을 보면,

 

1. TURN Client 는 Private IP 10.1.1.2:49721 를 가지고 Public IP 192.0.2.1:7000 을 가집니다.

2. Peer A는 Private IP 192.168.100.2:49582 를 가지고 Public IP 192.0.2.150:32102 를 가집니다.

3. Peer B는 NAT를 사용하지 않으므로 Public IP 192.0.2.210:49191 을 가집니다.

4. TURN Client는 TURN Server의 알려진 주소 192.0.2.15:3478 로 TURN 메시지를 보냅니다.

   클라이언트는 TURN Command를 통해 Relayed Transport Address가 포함된 ALLOCATION이라는 자료 구조를 설정합니다.

5. ALLOCATION이 생성되면 클라이언트는 TURN 서버의 relay를 통해 상대 peer로 데이터를 전송할 수 있게 됩니다.

 

Peer가 NAT 뒤에 있으면(192.168.100.2:49582) 클라이언트는 상대 peer의 Public IP(192.0.2.150:32102)를 지정하여 relay를 요청해야 합니다. (** 아마도 TURN을 사용하기 전 이미 STUN을 통해 Public IP를 획득하고, Symmetric NAT로 인해 직접 통신을 할 수 없는 환경이기 때문에 Public IP는 이미 알고있을 것입니다.)

 

클라이언트는 동시에 여러 개의 서버 ALLOCATION을 가질 수 있습니다.

 

https://tools.ietf.org/html/rfc5766

 

 

Google에서 WebRTC 설명 시 정리해준 TURN 그림입니다.

Reference

  - en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT

  - developer.mozilla.org/ko/docs/Web/API/WebRTC_API/Protocols

  - tools.ietf.org/html/rfc5766

'Acronym&Abbreviation' 카테고리의 다른 글

STUN (Session Traversal Utilities for NAT)  (0) 2021.03.17
NAT (Network Address Translation)  (0) 2021.03.17