STUN은 실시간 음성, 비디오, 메시징 및 기타 대화형 통신 애플리케이션에서 NAT(Network Address Translation)을 통과하기 위한 네트워크 프로토콜을 포함한 표준화된 방법의 모음이라고 합니다. - Wikipedia
RFC 5389에 정의되어 있습니다.
WebRTC 등 사용 시 상대방을 찾기 위해 사용하게 됩니다. 네트워크 상에서 모두가 공개(Public) IP를 사용하는 것이 아니라 공유기나 라우터 뒤에 개인(사설, Private) IP를 사용하여 숨어있기 때문에 '나'의 공개 IP를 상대방에게 알리기 위해 사용합니다.
작동 순서는 아래와 같습니다.
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 그림입니다.
Reference
- developer.mozilla.org/ko/docs/Web/API/WebRTC_API/Protocols
'Acronym&Abbreviation' 카테고리의 다른 글
TURN (Traversal Using Relays around NAT) (0) | 2021.03.17 |
---|---|
NAT (Network Address Translation) (0) | 2021.03.17 |