Acronym&Abbreviation

STUN (Session Traversal Utilities for NAT)

dpswlsldj 2021. 3. 17. 18:20
728x90

STUN은 실시간 음성, 비디오, 메시징 및 기타 대화형 통신 애플리케이션에서 NAT(Network Address Translation)을 통과하기 위한 네트워크 프로토콜을 포함한 표준화된 방법의 모음이라고 합니다. - Wikipedia

 

RFC 5389에 정의되어 있습니다.

 

WebRTC 등 사용 시 상대방을 찾기 위해 사용하게 됩니다. 네트워크 상에서 모두가 공개(Public) IP를 사용하는 것이 아니라 공유기나 라우터 뒤에 개인(사설, Private) IP를 사용하여 숨어있기 때문에 '나'의 공개 IP를 상대방에게 알리기 위해 사용합니다.

 

https://mdn.mozillademos.org/files/6115/webrtc-stun.png

 

 

작동 순서는 아래와 같습니다.

 

1. Private network 내의 클라이언트는 Public network의 STUN 서버에 바인딩 요청을 보냅니다. 이 때 바인딩하는 요소는 클라이언트 Private IP와 port 정보와 Public IP, port 정보입니다.

2. STUN 서버는 클라이언트의 IP, Port를 확인한 후 success response를 보냅니다.

 

Public IP의 할당은 NAT의 방화벽을 지나면서 이루어지기 때문에 Private network 내에 있는 클라이언트는 자신의 Public IP를 알 수 없습니다. 그렇기 때문에 STUN 서버에 자신의 Public IP를 문의하는 것입니다.

 

클라이언트와 STUN 간 정보 확인 시 프로토콜은 UDP를 사용합니다.

 

TCP를 사용하는 경우도 있지만 일부 지연이 발생할 수 있습니다. 보안이 민감한 서비스의 경우 TLS(Transport Layer Security)를 사용하여 암호화할 수도 있습니다.

 

 

 

STUN에 대한 간단한 예로, 네이버에서 '내 ip 주소'를 검색해서 보여주는 서비스를 생각해볼 수 있습니다.

 

커맨드 창에서 ipconfig 로 확인한 ip 주소와 네이버에서 검색한 주소가 다름을 알 수 있습니다.

 

 

STUN은 동일한 NAT 내의 두 단말을 연결할 때는 사용되지 않습니다. 그리고 Symmetric NAT으로 동작하는 환경에서는 NAT 매핑 테이블이 변경되기 때문에 STUN으로 상대방을 특정할 수 없습니다.

 

상대방 특정이 어려운 경우는 서로 간의 통신을 위해 TURN(Traversal Using Relays around NAT) 서버를 사용하게 됩니다.

 

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

 

http://io13webrtc.appspot.com/#48

Reference

- en.wikipedia.org/wiki/STUN

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

- tools.ietf.org/html/rfc5389

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

TURN (Traversal Using Relays around NAT)  (0) 2021.03.17
NAT (Network Address Translation)  (0) 2021.03.17