WebRTC : P2P
peer끼리 직접 연결하여 데이터를 송수신해 서버에 부하가 적다. 하지만 연결이 많아지면 클라이언트에 과부하가 간다.
- peer? 통신을 수행하는 두 클라이언트 단말
P2P 방식으로 구현하려면 ...
signalling : 두 peer 간 통신 방법을 찾는 과정
- 이 과정을 관리하기 위해 signalling server가 필요하다.
signalling server
ICE(Interactive Connectivity Establishment)
브라우저가 peer를 통해 통신할 수 있는 최적의 경로를 찾게 돕는 프레임워크.

ICE는 클라이언트가 모든 통신 가능한 주소를 식별하는 것을 의미하며 3가지의 주소를 확인한다.
1. Relayed Address : TURN 서버가 패킷 릴레이를 위해 할당하는 주소
2. Server Reflexive Address : NAT 가 매핑한 클라이언트의 공인망(Public IP, Port)
3. Local Address : 클라이언트의 사설주소(Private IP, Port)
Candidate: IP + 포트의 조합으로 표시된 주소, Candidate를 통해 연결을 지원


모든 단말은 다양한 환경(사무실 내부망, 학교 내부망, 집의 네트워크 등)을 가지기에 peer A에서 peer B까지 단순하게 연결되지 않는다.
- 방화벽이 존재하면 방화벽 통과 필요
- 단말의 Public IP가 없으면 유일한 주소값 할당 필요
- 라우터가 peer간 직접 연결을 허용하지 않으면 데이터 릴레이 필요
peer간 연결이 작동하도록 STUN과 TURN 서버를 상황에 따라 둘 다 혹은 하나만 사용한다.

- STUN(Session Traversal Utilities for NAT) 서버
- 클라이언트가 자신의 Public IP 주소를 알게 해주며, Public IP를 통해 다른 peer와 연결을 시도한다.
- 하지만 STUN만으로 모든 네트워크 문제를 해결할 수 없다.
- 예: NAT 환경에서 두 클라이언트가 동일 네트워크 내에 위치한 경우
- NAT(Network Address Transilation)?
- 단말에 Private IP를 1대 1로 대응시켜 Public IP 주소로 변환해 할당
- 각각의 단말이 유일한 공개 IP 없이 인터넷 상 검색이 가능해짐
- 몇몇 라우터는 Symmetric NAT(제한 NAT)을 사용해 같은 Private IP와 포트 번호 조합에서 발신된 요청에 대해 고유한 Public IP와 포트 번호를 할당한다. 요청을 보낼 때 각각 다른 Public IP를 사용하게 하여 STUN 서버만으로는 연결 설정이 어렵다.

- TURN(Traversal Using Relays around NAT) 서버
- Symmetric NAT 제한을 우회한다.
- TURN 서버와 연결한 후 모든 peer들에게 서버에 모든 패킷을 보내고 다시 TURN 서버에 전달한다.
- 오버헤드(간접적으로 발생하는 추가 자원)가 발생하므로 대안이 없는 경우에만 사용한다.
STUN 서버와 TURN 서버의 차이?
- STUN 서버는 라우팅 테이블을 통해 Private와 Public IP를 연결한다.
- TURN 서버는 STUN 서버의 개념을 포함하는 Super Set으로 단순히 연결하는데 그치지 않고, 모든 데이터를 TURN 서버를 우회하여(Relay 서버) 원하는 peer에게 전달한다.
(참고)
봄나라인님: NAT, ICE, STUN, TURN 이란?
죠현졍님: [WebRTC] P2P
millo님: WebRTC 이론 정리하기
AndoneKwon님:WebRTC란? (STUN과 TURN 서버의 이해) (2)
alnova2님: [WebRTC] STUN 과 TURN 에 대하여 #1 - 개요
출처: https://alnova2.tistory.com/1110 [몽상가:티스토리]