728x90
WebRTC Overview
- Stands for Web Real-Time Communication
- 라이브 스트리밍, 라이브 채팅을 위해 Peer to Peer 방식으로 연결한다.
- P2P방식은 매우 빠르며 브라우저간 대용량 커뮤니케이션을 가능하게 해준다.
- WebRTC는 표준화 된 API를 제공한다.
- 브라우저간 통신뿐만 아니라 mobile, IOT 디바이스 간에도 통신을 제공한다.
- P2P 통신
- 지연 시간이 존재한다.
- 역 프록시던 TURN 허브던 상관없이 트래픽 프로세스를 보고 트래픽을 복호화 하여 상대 리소스에 접근한다.
WebRTC 통신 과정
- A wants to connect to B
- A는 B의 Public 주소로 연결할 수 있는 방법을 탐색한다.
- B는 A의 Public 주소로 연결할 수 있는 방법을 탐색한다.
- 보안상의 이유로 바로 라우팅할 수 없기에 따라서 Public IP로 접속한다.
- A와 B는 세션 정보를 주고 받는다.
- WhatsApp, QR, Tweet, WebSockets, HTTP Fetch, xhr 등이 여기에 사용된다.
- A는 B와 가장 효율적인 경로를 통해 연결한다.
- A와 B는 각각의 미디어와 보안 정보를 교환한다.
WebRTC 이해에 필요한 용어들
- NAT
- STUN, TURN
- ICE
- SDP
- Signaling the SDP
NAT(Network Address Translation)
- 노출된 Public IP가 있는 경우 문제가 없다.
- -> 웹 서버와 같은 포트에서 바로 연결이 가능하다
- 누군가 공개 IP 주소로 포트를 연결하면 누군가가 직접 연결할 것이다.
- 이것이 aws ec2 인스턴스 연결시 public copy error 가 발생하는 이유이다.
- Mac 또는 Windows가 라우터를 가지고 있고 Wi-Fi 또는 Lan에 연결되어 있으면 라우터는 Public IP를 가지고 있다.
- 서브넷 마스킹을 통해 통신한다.
- 같은 네트워크 상에 있지 않으므로 상대방과 직접적인 통신을 할 수 없다.
- 따라서 게이트웨이를 통해 도움을 받는다.
- ARP Request 와 MAC IP Address를 게이트웨이를 통해 전송한다.
Overall NAT Process
Example Case
- 라우터의 Public IP : 5.5.5.5
- 라우터의 Private IP : 10.0.0.1 (게이트 웨이)
- Process 1 :
src
->dest
GET 요청을 보낸다.
- Process 2 : 게이트웨이가 Private IP를 Public IP로 바꿔서
dest
에 GET 요청을 보낸다.- 게이트웨이는 Private IP, Public IP를 담은 NAT 테이블을 생성한다.
- 해당 NAT 테이블을 통해 게이트웨이를 거쳐서 전송한다.
src
->dest
- NAT 테이블 해석 : Private IP (10.0.0.2:8992) -> 게이트 웨이의 Public IP(5.5.5.5:3333) -> 상대방 IP(4.4.4.4:80)
- Process 3 : Counter Part로 부터
200 OK
응답 받음 200 OK
응답을 받으면 다시 NAT 테이블에서 Private IP 값을 찾아, 변환한다.
NAT Translations Method
- One to One NAT(Full-cone NAT)
- Address restricted NAT
- Port restricted NAT
- Symmetric NAT
- ⭐️ WebRTC는 1, 2, 3 방식으로 작동한다!
- 제한 정도 : 1 < 2 < 3 < 4
1. One to One NAT(Full-cone NAT)
- 외부 IP로의 패킷 : 라우터의 포트는 항상 내부 IP에 매핑된다.
이런식으로 NAT 테이블이 구성되어있다고 할 때, 위의 4개 패킷은 모두 라우터를 통과한다. -> OK response
2. Address restricted NAT
- 외부 IP 패킷 : 라우터의 포트는 항상 내부 IP와 매핑된다.
- 포트에 관계없이 들어오는 주소는 테이블에 있는 주소와 매치된다.
- 몇몇의 라우터는 주소를 제한할 수 있다.
- 이전에 실제로 통신을 했다면 신뢰하는 주소로 알고 통신을 진행한다.
Case 4의 경우, 테이블 내에 없음 -> 이전에 통신을 했던 주소가 아님 (따라서 통신하지 않는다.)
3. Port restricted NAT
- Address restricted NAT 에서 발전된 형태로 IP주소뿐만 아니라 포트까지 제한한다.
- "Destination IP - Destination Port"가 "테이블의 IP-Port"와 동일해야한다.
4. Symmetric NAT
- 가장 제한적인 NAT 방법
- NAT 테이블 내에서 정확히
Source IP-Port
쌍과Destination IP-Port
쌍 둘 다 일치해야한다.
STUN
- Session Traversal Utilities for NAT
- STUN server port 3478, 5349 for TLS
- 전송 계층 보안(TLS) : 개인 정보 보호 및 안전한 전송을 위해 이메일을 암호화하는 표준 인터넷 프로토콜
- NAT 를 통해 내 Public IP/Port를 알아낸다.
- "내가 너랑 통신할 거니까 내 Public IP/Port를 알려줘"
- 단순히 Public IP/Port를 알기 위한 서버로 서버비용이 싼 편이다.
- 단순히 상대방과 통신하기 위해 만들어진 Public IP로 다른 곳에서는 사용할 수 없다.
- 당연히 상대방과, 내가 완전히 대칭되는 경우는 내가 같은 상대방과 통신하는 경우 밖에 없음
- 아무런 정보에 대한 요청 및 응답이 없으므로 서버 비용이 싸다.
- 다른 이와 통신하기 위해 Public Address가 필요하다.
- 과거에는 공개 IP 주소를 가지고 있었지만 현재에는 따로 가지고 있지 않으므로 해당 STUN 서버가 필요하다.
⭐️ 라우터의 내 Public 주소를 알아내기 위한 용도!
STUN Server Process
- PC1 -> Router
- Private Address에 임의의 포트를 만들어서 보낸다.
- Router -> STUN Server
라우터로 부터 STUN Server가 Public IP/port를 받았으면 다시 스턴서버는 PC1에게로 Public 주소에 대한 패킷을 만들어서 응답을 보낸다.
- 라우터는 다시 NAT 테이블과 비교하여 해당 응답을 받고 PC1에게 전해준다.
- 이렇게 응답 패킷을 받은 PC1은 자신의 Public IP를 알게된다.
- 이 둘은 Full cone NAT 이므로 둘 간의 통신이 가능하다.
- 이렇게 통신을 하면 각자의 주소가 라우터에 저장이된다.
- 각자의 주소가 라우터 테이블내에 저장이 됐으므로 이제 완전한 통신이 가능하다.
- 맨 처음에는 이렇게 연결을 해주어야 이후 통신을 할때 원활하게 할 수 있다.
- 이렇게 통신을 하면 각자의 주소가 라우터에 저장이된다.
Reference
728x90
'🏠 Framework > Node.js' 카테고리의 다른 글
[WebRTC] mediasoup로 webRTC SFU 구현하기 (2) | 2022.10.02 |
---|---|
[Socket.io] WebSocket 동작 원리(직접 구현) (0) | 2021.10.30 |
[Socket.io] WebSocket 개발 환경 세팅 (0) | 2021.10.28 |
[Authentication] OAuth2.0 작동 원리 (feat. Google API) (0) | 2021.09.25 |