기본 행위(General Behavior)
TURN은 STUN의 확장이며, ChannelData 메시지를 제외한 모든 메시지는 STUN 규약(RFC8489)을 따른다.
TURN 서버와 클라이언트는 STUN 인증 규약인 'long-term credential mechanism'을 구비해야 한다.
Allocate 요청마다 새로운 nonce 난수값을 생성하길 권하며 관련 권장 규격은 RFC4086 이다.
nonce의 만료시간은 최대 한 시간을 권장한다.
유효한 유저가 잘못된 인증 정보를 이용했을 때는 441(Wrong Credentials) 에러를 응답해야 한다.
'할당'을 이용하려는 유저가 허용되지 않은 유저인 경우, 요청에 대해서는 437(Allocation Mismatch) 에러를 응답하고, 알림 및 ChannelData명령인 경우에는 무시한다.
RFC8489에 정리된 SOFTWARE, FINGERPRINT 속성의 사용을 권장한다.
RFC8489에 정리된 하위호환성은 본 규격에서는 무시한다.
본 규격은 IPv4, IPv6 모두 지원하고 교차 릴레이가 가능하도록 한다.
TURN 서버는 STUN과 동일한 포트(3478 or 5349)를 기본으로 하지만, SRV 레코드 이름은 3478 -> turn, 5349 -> turns로 정의되어 있다. 물론 다른 포트를 이용해서도 서비스 가능하다.
TURN 서버는 UDP는 필수로 지원해야 하고, TCP 및 (D)TLS는 지원을 권한다.
UDP 필수 지원으로 인해 응답 유실에 필히 대응해야 한다. UDP 응답이 유실될 경우, 클라이언트는 재시도를 할 수 있는데, 이 때 서버는 멱등성(idempotency) 즉, 동일 요청에는 동일한 응답을 제공해야 할 의무가 있다. 본 규격에는 두가지 방법론을 설명하는데, 하나는 응답 메시지를 일정 시간 보관하는 것, 다른 하나는 동일한 형태의 요청에는 항상 동일한 응답을 할 수 있도록 결정적(deterministic) 구조를 가지는 것(stateless stack approach)이다. 그 외에 어떤 방법이든 멱등성만 보장하면 된다.
DOS 공격에 저항하기 위해 특정 유저에게 '할당' 가능 수 및 '할당'들의 대역폭을 제한하는 것을 권한다. (규격에는 recommend나 should 정도로 제한했지만, 상용 레벨에서는 must로 여겨야 하는 부분이다.)
'Tech Study > Network' 카테고리의 다른 글
RFC 8656 - Traversal Using Relays around NAT (TURN) 기초 분석 5 (0) | 2024.12.06 |
---|---|
RFC 8656 - Traversal Using Relays around NAT (TURN) 기초 분석 4 (0) | 2024.12.04 |
RFC 8656 - Traversal Using Relays around NAT (TURN) 기초 분석 2 (0) | 2024.11.28 |
RFC 8656 - Traversal Using Relays around NAT (TURN) 기초 분석 1 (1) | 2024.11.27 |
RFC 8489 - Session Traversal Utilities for NAT (STUN) 기초 분석 (0) | 2024.10.07 |