반응형
WebRTC 란?
WebRTC(Web Real-Time Communication)
웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림 할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술이다.
P2P (Peer to Peer) 절차
- WebRTC는 P2P 방식의 커뮤니케이션이기 때문에 각각의 웹 브라우저는 다음과 같은 절차를 밟아야한다.
- 각 브라우저가 P2P 커뮤니케이션에 동의
- 서로의 주소를 공유
- 보안 사항 및 방화벽 우회
- 멀티미디어 데이터를 실시간으로 교환
- 일반적인 웹 개발의 접근 방법으로는 해결하기 어렵다. 왜냐하면 브라우저는 웹 서버가 아니기 때문에, 외부에서 접근할 수 있는 주소가 없기 때문이다.
보안을 위한 네트워크 설계
- 네트워크 보안상의 이유로 일반적으로 컴퓨터에는 public IP가 할당되어 있지 않으며 private IP를 이용한다.
- private IP 주소 범위에 있는 컴퓨터는 인터넷 라우터를 통과할 수 없다. 그래서 외부의 컴퓨터는 이 주소 범위에 있는 컴퓨터에 접근할 수가 없다. 하지만, 이 주소의 컴퓨터도 외부 인터넷으로 나갈 수가 없다.
- private IP 주소만으로는 외부망에 직접 통신할 수 없어 공유기/라우터 등을 통해 NAT 방식으로 public IP로 변환한 후 인터넷에 접속한다.
NAT (Network Address Translation)
- NAT(Network Address Translation)은 private IP를 public IP로 변경에 필요한 주소 변환 서비스이다. 풀어 설명하자면 라우터(router) 등의 장비를 사용하여 다수의 private IP를 하나의 public IP 주소로 변환하는 기술이다.
- NAT 를 사용하는 가장 큰 이유는 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해서이다.
- 예를 들어 인터넷 회선을 하나 개통하고 인터넷 공유기를 달아서 여러 PC 를 연결하여 사용 하는데, 이 것이 가능한 이유가 인터넷 공유기에 NAT 기능이 탑재되어 있기 때문이다.
- 예를 들어 인터넷 회선을 하나 개통하고 인터넷 공유기를 달아서 여러 PC 를 연결하여 사용 하는데, 이 것이 가능한 이유가 인터넷 공유기에 NAT 기능이 탑재되어 있기 때문이다.
NAT Traversal
- 특정한 사용자를 지칭하기 위해서는 public IP 뿐 만 아니라 해당 네트워크에 연결된 private IP 주소까지 알아내야한다.
- 일반적으로는 라우터가 NAT 역할을 한다. 외부에서 접근하는 public IP와 포트 번호를 확인하여 현재 네트워크 내의 private IP들을 적절히 매핑시켜준다. 그러니까 어떤 브라우저 두 개가 서로 직접 통신을 하려면, 각자 현재 연결된 라우터의 public IP 주소와 포트를 먼저 알아내야 한다.
- 하지만 어떤 라우터들은 특정 주소나 포트와의 연결을 차단하는 방화벽 설정이 되어 있을 수도 있다. 이처럼 라우터를 통과해서 연결할 방법을 찾는 과정을 NAT 트래버셜 (NAT traversal) 이라고 한다.
STUN (Session Traversal Utilities for NAT)
- NAT 트래버셜 작업은 STUN(Session Traversal Utilities for NAT) 서버에 의해 이루어진다.
- STUN 방식은 단말이 자신의 public IP 주소와 포트를 확인하는 과정에 대한 프로토콜이다.
- 즉, WebRTC 연결을 시작하기 전에 STUN 서버를 향해 요청을 보내면, STUN 서버는 NAT 뒤에 있는 피어(Peer)들이 서로 연결할 수 있도록 public IP와 포트를 찾아준다.
- 하지만 STUN 서버를 이용하더라도 항상 자신의 정보를 알아낼 수 있는 것은 아니다.
- 어떤 라우터들은 방화벽 정책을 달리 할 수도 있고, 이전에 연결된 적이 있는 네트워크만 연결할 수 있게 제한을 걸기도 한다.
- STUN 서버를 통해 자기 자신의 주소를 찾아내지 못했을 경우, TURN(Traversal Using Relay NAT) 서버를 대안으로 이용한다.
TURN (Traversal Using Relay NAT)
- TURN 방식은 네트워크 미디어를 중개하는 서버를 이용하는 것이다.
- TURN 서버는 인터넷 망에 위치하고 각 단말들이 private IP 안에서 통신한다. 각 단말들이 직접 통신하는 것이 아니라 릴레이 역할을 하는 TURN 서버를 사용하여 경유한다.
- TURN 방식은 중간에 서버를 한 번 거치기 때문에, 엄밀히 이야기하자면 P2P 통신이 아니게 되며 구조상의 지연이 필연적으로 발생한다.
- 보안 정책이 엄격한 개인 NAT 내부에 위치한 브라우저와 P2P 통신을 할 수 있는 유일한 방법이다.
ICE (Interactive Connectivity Establishment) 와 Candidate
- 지금까지 이야기한 STUN, TURN 서버를 이용해서 획득했던 IP 주소와 프로토콜, 포트의 조합으로 구성된 연결 가능한 네트워크 주소들을 후보(Candidate)라고 부른다.
- 그리고 이들을 찾는 과정을 후보 찾기(Finding Candidate)라고 부른다.
- 이렇게 후보들을 수집하면 일반적으로 3개의 주소를 얻게 된다.
- 자신의 사설 IP와 포트 넘버
- 자신의 공인 IP와 포트 넘버 (STUN, TURN 서버로부터 획득 가능)
- TURN 서버의 IP와 포트 넘버 (TURN 서버로부터 획득 가능)
- 이 모든 과정은 ICE(Interactive Connectivity Establishment) 라는 프레임워크 위에서 이루어진다.
- ICE는 두 개의 단말이 P2P 연결을 가능하게 하도록 최적의 경로를 찾아주는 프레임워크이다.
- ICE는 두 개의 단말이 P2P 연결을 가능하게 하도록 최적의 경로를 찾아주는 프레임워크이다.
참고
반응형