클라이언트 대응 (Client Behavior)
- 기본적인 STUN BINDING 사용 규칙은 RFC8489를 따름
- 서버의 RESPONSE-PORT 속성 지원은 선택적이기 때문에 420 에러 응답에 대응해야 함
- OTHER-ADDRESS와 CHANGE-REQUEST는 경우에 따라 다름
- 필수 지원 : SRV 레코드가 등록되어 있을 때 (아래 서버 탐색(Discovery)절 확인)
- 선택 지원 : 그 외의 경우
- CHANGE-REQUEST 속성은 경우에 따라 선택적이기 때문에 420 에러 대응 필요
- 애플리케이션이 본 기술의 패킷과 다른 패킷들을 멀티플렉싱하여 함께 처리하려 할 때,
- STUN 메시지를 완벽히 구분하기 어렵다면 *FINGERPRINT 속성을 포함하길 권함
- PADDING 속성을 이용한다면 그 크기는 장비의 MTU 사이즈와 같게 하는게 좋음
- ALTERNATE-SERVER 속성은 무시해야 한다. STUN 서버 제공자의 인증을 이용하지 못하면 제공자는 테스트를 위한 토폴로지 요구사항을 안다.
*FINGERPRINT : 클라이언트에서 만드는 CRC32값으로 메시지들을 하나의 세션으로 grouping하는데 쓰인다. 즉, 메시지 멀티플렉싱 시 힌트가 될 수 있다. 자세한 내용은 RFC8489의 해당 섹션 참조
서버 탐색 (Discovery)
- STUN서버의 실제 주소를 모를 경우, STUN서버 제공자의 도메인 네임을 이용 (이들의 획득 방법은 규격 밖임을 명시)
- 도메인 네임과 **SRV 절차를 통해 서버 주소를 찾을 수 있음
- service name은 UDP와 TCP에 대해 'stun-behavior'
- TLS에 대해 'stun-behaviors'
**SRV(RFC2782) : 일반적인 DNS는 IP주소만 resolve한다. 반면, SRV는 주소(또다른 도메인 이름)와 포트를 resolve한다. 예를 들어 NAT특성을 탐지할 수 있는 UDP STUN서버를 서버제공자로부터 알아내고자 할 경우에, 만약 제공자의 도메인이 happy-stun.com 이라면 stun-behavior._udp.happy-stun.com 문자열을 만들어 질의하는 것이다.
보안 (Security)
- STUN서버와 통신 시 필요한 인증정보 획득 방법은 본 규격 밖이라는 점 명시
- 인증으로 인해 통신 실패 시 인증정보를 획득 시도할지, 테스트를 종료할지 정해야 한다는 점 기술
서버 대응 (Server Behavior)
추후 분석