:) OpenVidu로 WebRTC 기술을 사용하고 커스텀 했었는데 개념정리 해볼게욥
목적: NAT는 많은 장치들이 공용 IP 주소를 공유할 수 있게 해주는 네트워크 기술이다. 주로 가정이나 기업의 라우터에 사용되며, 내부 네트워크(사설 IP 주소)와 외부 인터넷(공용 IP 주소) 간의 통신을 가능하게 한다.
작동 방식:
- IP 주소 변환: NAT는 내부 네트워크에서 외부 네트워크로 나가는 패킷의 소스 IP 주소를 라우터의 공용 IP 주소로 변경한다. 반대로, 외부에서 들어오는 패킷의 대상 IP 주소를 내부 네트워크의 해당 장치의 사설 IP 주소로 변경한다.
- 포트 매핑: NAT는 각 연결에 대해 고유한 포트 번호를 할당하여, 여러 장치가 동일한 공용 IP 주소를 사용하면서도 서로 다른 연결을 유지할 수 있도록 한다.
WebRTC와의 관계:
- 연결 문제: NAT의 존재는 P2P 연결을 복잡하게 만든다. 특히, 두 피어가 모두 NAT 뒤에 있을 때, 각자의 실제 공용 IP 주소와 포트를 알아내고 이를 서로에게 전달해야 한다.
- 해결책: WebRTC는 STUN과 TURN 서버를 사용한다. STUN 서버는 피어의 공용 IP 주소와 포트를 찾는 데 도움을 주고, TURN 서버는 NAT 뒤에 있는 피어들 간의 연결을 중계하는 역할을 한다.
시그널링 (Signaling): 이 단계에서는 두 피어(통신을 원하는 두 장치)가 서로 연결을 시작하고, 통신에 필요한 정보를 교환한다.
이 정보에는 미디어 형식, 암호화 방식, 각 피어의 네트워크 정보 등이 포함된다. WebRTC는 시그널링 프로토콜을 직접 제공하지 않기 때문에, WebSocket, XMPP, SIP 등의 외부 시그널링 메커니즘을 사용해야 한다.
NAT 트래버설 (NAT Traversal): 대부분의 장치들은 NAT(Network Address Translation) 뒤에 숨어 있기 때문에, 다른 피어와 직접 연결을 위해서는 NAT 트래버설이 필요하다.
이를 위해 WebRTC는 STUN(Session Traversal Utilities for NAT) 서버를 사용하여 피어의 공용 IP 주소를 찾아내고, 필요한 경우 TURN(Traversal Using Relays around NAT) 서버를 사용하여 피어 간의 연결을 중계한다.
미디어 캡처 (Media Capture): 이 단계에서는 피어의 카메라, 마이크 등에서 오디오 및 비디오 스트림을 캡처한다. 이는 getUserMedia() API를 통해 수행된다.
P2P 연결 설정 (P2P Connection Setup): RTCDataChannel과 RTCPeerConnection을 사용하여 피어 간의 직접적인 연결을 설정한다. 이 연결을 통해 데이터와 미디어 스트림이 실시간으로 전송됨.
데이터 교환 (Data Exchange): 마지막 단계로, 암호화된 연결을 통해 실시간으로 데이터 및 미디어 스트림이 교환된다. 이를 통해 높은 수준의 보안과 신뢰성 있는 통신이 이루어진다.