일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리뷰
- go언어
- c++
- C
- write
- API
- install
- http
- tcp
- window
- Callback
- mutex
- Python
- FOR
- Golang
- Linux
- windows
- GO 언어
- Close
- json
- bitcoin
- Sync
- JavaScript
- 영화
- package
- channel
- File
- 책
- go
- range
- Today
- Total
Code Habit
WebRTC 본문
WebRTC는 'web real-time communication'을 뜻하며 따로 서버를 구성할 필요 없이 peer-to-peer방식으로 peer간 media 데이터를 교환할 수 있게 해준다. 데이터를 교환하기 전 서로 연결을 위해 '시그널링' 이라는 과정이 필요한데 이때는 서버가 필요하긴 하나 일단 연결이 이루어지고 나면 peer간 통신에 서버는 더이상 관여하지 않는다.
P2P(peer-to-peer)연결은 중개 서버를 거치지 않기 때문에 빠른 속도가 보장되며, HTTPS가 강제되기 때문에 보안이 보장된다.
WebRTC를 이해하는데 필요한 몇몇 용어들을 간단히 정리해보겠다.
- ICE
Interactive Connectivity Establishment ( ICE )은 웹브라우저 간 서로 연결을 도와주는 프레임워크다. 하지만 피어 간의 연결을 위해서는 서로의 주소정보(IP)를 알아야 하는데 보통 우리가 사용하는 디바이스는 공용 IP를 가지고 있지 않은 경우가 대부분이다. 그 원인으로는 방화벽, 여러대의 컴퓨터가 하나의 IP를 공유하는 NAT, 유휴상태의 IP를 일시적으로 임대받는 DHCP 때문이다. 그래서 ICE는 이 문제를 해결하기 위해 STUN 혹은 TURN 서버를 사용한다.
- STUN
Session Traversal Utilities for NAT ( STUN )은 피어간의 연결을 방해하는 라우터의 제한사항들을 알아내거나 당신의 공인주소를 찾는데 사용되는 서버다.
클라이언트는 인터넷상에 스턴서버에게 요청을 보내고 서버는 라우터의 NAT뒤에 있는 클라이언트에 접속할 수 있는지, 또 클라의 공인 주소를 알려준다.
- NAT
Network Address Translation ( NAT )은 단말에 공개 IP주소를 할당하기 위해 사용된다. 일반적으로 라우터가 NAT역할을 한다. 외부에서 접근하는 공인 IP와 포트 번호를 확인하여 현재 네트워크 내의 사설 IP들을 적절히 매핑시켜준다. 그러니 어떤 브라우저 두 개가 서로 직접 통신 하려면, 각자 현재 연결된 라우터의 공인 IP 주소와 포트를 먼저 알아내야 한다. 몇몇 라우터들은 네트워크에 연결하는데 제한을 갖고 있다. STUN 서버에 의해 공개 IP 주소를 발견한다고 해도 모두가 연결할 수 있는 것은 아니다. 이를 위해 TURN 서버가 필요하다.
- TURN
몇몇 라우터들은 'Symmetric NAT'이라 불리는 제한을 채택한다. 이는 이전에 연결 됬었던 피어들의 연결만 받아들인다는 의미이다. Traversal Using Relays around NAT ( TURN )은 peer간의 연결에 중간에 TURN 서버를 둠으로써 'Symmetric NAT' 제한을 우회하는 것을 의미한다. 바로 연결이 아닌 서버를 거치기 때문에 엄밀히 말하면 이는 P2P방식이 아니며 중간에 지연이 발생할 수 있다. 하여 다른 대안이 없을때만 사용한다.
- SDP
Session Description Protocol ( SDP ) 은 해상도나 형식, 코덱 암호화 등의 멀티미디어 컨텐츠의 연결을 설명하기 위한 표준 프로토콜이다. 이는 peer들이 서로의 전송하고 있는 미디어 데이터를 이해하게 해준다.
- 참고 사이트
https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html
https://web.dev/webrtc-infrastructure/
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols