WebRtc
1. webRtc
화상채팅, 음성채팅 비대면 사회에 많이 사용되는 소통 방법이다. 이번에 제작할 프로젝트 게임에 음성채팅 기능이 들어가기에 서버 트래픽(비용)이 적은 방법을 찾고자 했다.
webrtc(web real-time communication)는 웹 브라우저간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API이다.
webRtc는 peer to peer지만 서버가 필요하다. 방화벽이 있거나 NAT상황에서 직접적인 시그널링이 불가능하기에 연결하기 위해서는 각 peer의 정보를 교환 해줄 수 있는 서버가 필요하다. 이 서버를 시그널링 서버라고 부른다. NAT 종류에 따라 시그널링 서버가 해야하는 역할이 다를 수 있는데 먼저 NAT의 정의와 종류를 설명하고자 한다.
2. NAT
NAT은 IP패킷의 TCP/UDP포트 숫자와 소스 및 목적지의 IP주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. 주로 NAT를 이용하는 이유는 사설 네트워크(ex 공유기)에 속한 여러개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위함이다.
NAT는 4종류로 나눌 수 있다.
1. Full Cone NAT
2. Restricted Cone NAT
3. Port Restricted Cone NAT
4. Symmetric NAT
Full Cone은 별도의 IP/Port를 검증하지않고 내부에 있는 PC가 서버와 통신을 할경우 생성된 Public IP/Port를 통해 외부와 계속 통신할 수 있다.
Restricted Cone은 Full Cone방식에서 IP검증이 추가 되었다. NAT Table이 생성될 때 사용된 목적지 IP에 대해서만 허용된다. 다른 서버에서 해당 IP/Port를 사용하지못한다.
Port Restricted Cone은 Restricted Cone에서 Port 검증까지 추가 되었다. IP만이아니라 같은 Port로 통신이 되어야한다.
Symmetric은 Nat 라우터의 변환 테이블은 private network의 IP Host 에서 시작된 연결이다.
트래픽 교환은 먼저 데이터를 보낸사람이 private network에 있는 host일 때 허용된다. port Restricted Cone와의 차이점은 다른 ip, port 일 때 새로운 매핑이 Nat table에 추가된다는 것이다.
위와 같이 NAT종류가 다양해 그냥 연결을 시도하면 장소에따라 연결 되기도 하고 안되기도하는 상황이 생긴다. 따라서 Relay Server의 경우 NAT의 종류 먼저 알아야하며, 이문제를 해결할 수 있는 방법은 STUN이다.
3. STUN 서버
stun 은 Session Traversal Utilities for NAT의 약자이다.
NAT 환경에서는 private ip를 별도로 가지고 있기에 p2p(peer to peer)통신이 불가능 하다.
따라서 클라이언트는 자신의 public ip를 확인하기 위해 stun서버로 요청을 보내고 서버로부터 자신의 public ip를 받는다. 이때 받은 ip를 사용하여 시그널링을 시도한다.
4. TURN 서버
Turn 서버는 클라이언트가 통신할 때 public 망에 존재하는 turn 서버를 경유하여 통신한다.
클라이언트는 자신의 private ip가 포함된 메시지를 turn 서버에 보낸다. turn 서버는 메시지에 포함된 network layer ip 와 transport layer 의 udp 포트 넘버와의 차이를 확인하고 클라이언트의 public ip 로 응답한다. 이때 NAT는 매핑 테이블에 기록되어 있는 정보에 따라서 내부 네트워크에 있는 private ip로 정보를 전송한다.
Turn 서버는 ICE의 일부로 사용될 수 있도록 되어 있다.
5. ICE
ice는 client가 모든 통신 가능한 주소를 식별하는 것을 의미한다. 클라이언트는 STUN 메시지를 TURN 서버로 요청 및 응답 과정에서 3가지 주소를 확인한다.
- Relayed Address : Turn 서버가 패킷 릴레이를 위해 할당하는 주소
- server Reflexive Address : NAT 가 매핑한 클라이언트의 공인망 (public ip , port)
- local Address : 클라이언트의 사설주소(private ip, port)
Connectivity Checks
위에서 구한 3가지 주소를 가지고 시그널링 채널을 이용하여 sdp(멀티미디어 세션 등 에 대한 정보를 기술하는 포맷 관련프로토콜) 안에 포함하여 전송한다. 수신도 3개의 candidate 주소를 확보한 후에 sdp로 송신 클라이언트에게 전송한다. 아래의 그림과 같은 교환이 되었을 때 candidate가 교환되는 것이다.
위의 두 그림 은 candidate 후에 통신 과정을 그린 그림이다.
6. STUN과 TURN 정리
STUN은 단말이 자신의 공인 IP 주소와 포트를 확인하는 과정을 명시한 프로토콜이고, TURN은 단말이 패킷 릴레이를 위한 서버를 할당 받기 위한 과정을 명시한 프로토콜이다.
STUN 서버는 주소 바인딩을 하고, TURN 서버는 릴레이 주소를 할당(allocation)한다.
[1~6]https://andonekwon.tistory.com/59
[2]https://program-factory.tistory.com/8
[5]https://emong.tistory.com/140
'Programming Tech > Web-RTC' 카테고리의 다른 글
AWS EC2 / COTURN 서버 (2) | 2021.10.10 |
---|
댓글