728x90

WebRTC Overview

  • Stands for Web Real-Time Communication
  • 라이브 스트리밍, 라이브 채팅을 위해 Peer to Peer 방식으로 연결한다.
  • P2P방식은 매우 빠르며 브라우저간 대용량 커뮤니케이션을 가능하게 해준다.
  • WebRTC는 표준화 된 API를 제공한다.
  • 브라우저간 통신뿐만 아니라 mobile, IOT 디바이스 간에도 통신을 제공한다.
  • P2P 통신
    • 지연 시간이 존재한다.
    • 역 프록시던 TURN 허브던 상관없이 트래픽 프로세스를 보고 트래픽을 복호화 하여 상대 리소스에 접근한다.

 

 

WebRTC 통신 과정

  1. A wants to connect to B
  2. A는 B의 Public 주소로 연결할 수 있는 방법을 탐색한다.
  3. B는 A의 Public 주소로 연결할 수 있는 방법을 탐색한다.
    • 보안상의 이유로 바로 라우팅할 수 없기에 따라서 Public IP로 접속한다.
    • A와 B는 세션 정보를 주고 받는다.
      • WhatsApp, QR, Tweet, WebSockets, HTTP Fetch, xhr 등이 여기에 사용된다.
  4. A는 B와 가장 효율적인 경로를 통해 연결한다.
  5. A와 B는 각각의 미디어와 보안 정보를 교환한다.

 

 

 


WebRTC 이해에 필요한 용어들

  1. NAT
  2. STUN, TURN
  3. ICE
  4. SDP
  5. 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

  1. One to One NAT(Full-cone NAT)
  2. Address restricted NAT
  3. Port restricted NAT
  4. 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