본문 바로가기
Stove Dev Camp

WebRTC란? (STUN과 TURN 서버의 이해) (2)

by AndoneKwon 2020. 12. 29.

이전 글 복습

NAT 환경

중간에 방화벽이 존재하거나 NAT 환경에 놓여 있는 경우에는 각 Peer에 대한 직접적인 시그널링이 불가능하다고 이야기하였다. 

그렇기 떄문에 시그널링을 하고 연결을 하기 위해서는 무언가 다른 방법이 필요하다.

이러한 방식을 UDP Hole Punching 방식이라고 하는데 중간에 무언가 중개해줘야할 누군가가 필요하다.

그래서 두가지 방식이 존재한다.

 

1. STUN 서버

stun 은 Session Traversal Uilities for NAT의 약자이다.

아까 위에서 설명했듯이 NAT환경에서는 Private IP를 별도로 가지고 있기 때문에 Peer to Peer(이하 P2P) 통신이 불가능 하다. 따라서 클라이언트는 자신의 Public IP를 확인하기 위해 STUN 서버로 요청을 보내고 서버로 부터 자신의 Public IP를 받는다. 그래서 이때부터 클라이언트는 자신이 받은 Public IP를 이용하여 시그널링을 할때 받은 그 정보를 이용해서 시그널링을 하게 한다.

 

다만 이 STUN으로 모든걸 해결할 수는 없는데 바로 두 Client가 같은 네트워크에 존재하고 있을때는 이것으로는 해결이 되지 않는다. 또한, NAT 환경에서는 Symmetirc NAT의 경우는 어플리케이션이 달라지면 NAT의 매핑테이블이 바뀔 수 있기 때문이다.

 

2. TURN 서버

TURN 서버는 클라이언트들이 통신할 때 Public 망에 존재하는 TURN 서버를 경유하여 통신하게 된다.

클라이언트는 자신의 Private IP가 포함된 TURN 메세지를 턴서버로 보낸다. 그러면 TURN 서버는 메세지에 포함된 Network Layer IP 주소와 Transport Layer의 UDP 포트 넘버와의 차이를 확인하고 클라이언트의 Public IP로 응답하게 된다. 이때 NAT는 NAT 매핑테이블에 기록되어 있는 정보에 따라서 내부 네트워크에 있는 클라이언트의 Private IP 로 메세지를 전송한다.

TURN 서버는 ICE의 일부로 사용될 수 있도록 디자인 되었다. ICE는 무엇일까?

 

TURN 서버 동작 그림

 

3. ICE(Interactive Connectivity Establishment)

ICE는 Client가 모든 통신 가능한 주소를 식별하는 것을 의미하는데 클라이언트는 STUN 메세지를 TURN 서버로 요청 및 응답과정에서 다음 3가지의 주소를 확인 하게 된다.

 

  • Relayed Address : TURN 서버가 패킷 릴레이를 위해 할당하는 주소
  • Server Reflexive Address : NAT 가 매핑한 클라이언트의 공인망(Public IP, Port)
  • Local Address : 클라이언트의 사설주소(Private IP, Port)

따라서, STUN 서버는 Server Reflexive Address 만을 응답하지만 TURN 서버는 Relayed Address와 Server Reflexive Address 를 모두 응답한다.

 

Candidate라는 개념이 추가로 존재하는데 이것은 IP와 포트의 조합으로 표시된 주소이며 이제 이 확보된것을 통해서 연결을 해야한다.

3가지 연결을 지원한다.

ICE 연결방식

  • Direct Connection : Host 같의 직접적인 미디어 송수신
  • Server Reflexive Connection : Server Reflexive Candidate를 이용한 미디어 송수신
  • TURN Relay Connection : Relay Candidate를 이용한 미디어 송수신

이제 이렇게 확보된 3개의 주소들의 우선순위를 정하여 SDP내에 포함시켜 전송한다.

Connection을 체크한 후 Connection이 완료되면 RTP 및 RTCP 패킷을 전송하여 통화가 가능하게 된다.

 

RTP란 실시간 전송 프로토콜(Real-time Transport Protocol, RTP)은 IP 네트워크 상에서 오디오와 비디오를 전달하기 위한 통신 프로토콜이다.

 

그래서 STUN 서버랑 TURN서버의 차이가 뭔데?

STUN서버와 TURN서버의 개념은 사실 굉장히 힘들다.. 나도 얼마전까지 계속 햇갈렸다.

TURN서버는 STUN서버의 개념을 포함하고 있는 Super Set이며 STUN서버 처럼 단순히 라우팅 테이블을 통해서 private ip와 public ip를 연결하는데에서 그치지 않는다.

WebRTC를 예로 들면 미디어 데이터를 1:1로 보내준다고 했을때 그 모든 데이터는 TURN 서버를 Relay 서버로 하여 데이터를 원하는 Peer에게 전달해주게 된다.

 

하지만, 만약 1:N 통신으로 스트리밍하는 서비스라면 중간에 Media 서버를 두어 중계하지 않으면 모든 Peer가 매쉬 구조로 연결되게 되어 각 Peer에 엄청난 부담을 주게 되고 네트워크 자원도 너무 많이 사용하게 된다.

따라서, 이것을 해결하는 MCU와 SFU 방식이 있으며 이것에 대해선 다음글에서 자세히 설명하도록 한다.

아무튼 결론적을 이런 서비스에서는 TURN 서버는 단순히 STUN서버의 역할을 할 가능성이 크다.

왜냐하면 Client와 Media 서버가 서로 Peer관계를 맺어 단순 송신 혹은 수신을 하게 됨으로 TURN서버를 Relay 서버로 하여 거칠 이유가 없기 때문이다.

 

 

-------

Reference

brunch.co.kr/@linecard/156#comment

 

30장. ICE의 이해

1. ICE의 개요 ICE는 Interactive Connectivity Establishment의 약어로 RFC  5245  A protocol for Network Address Translator (NAT) Traversal for Off/Answer Protocols에 정의되었습니다. ICE는 두 단말이 서로 통신할 수 있는 최적

brunch.co.kr

emong.tistory.com/140

 

NAT Traversal의 종결자, ICE

시작하며 UC 엔지니어들에게 NAT Traversal은 망의 복잡도 증가시키고 B2B 서비스와 같은 상호 연동에 고민거리로 항상 남는 기술입니다. NAT Traversal 은 IPv4가 사라지고 IPv6가 오면 사라지는 기술이

emong.tistory.com

 

다음은 본격적으로 WebRTC가 무엇인지 Media서버가 무엇인지에 대해서 작성하겠다.

'Stove Dev Camp' 카테고리의 다른 글

SCTP 프로토콜(기존 프로토콜 TCP, UDP)(1)  (0) 2021.01.25
WebRTC Data Channel  (0) 2021.01.18
WebRTC란? (1)  (0) 2020.12.22
Project #2 Authorization  (0) 2020.12.22
Stove Dev Camp Project#1 Url Shortner  (0) 2020.12.22