WebRTC 네트워크 관련 용어

Signaling

다른 사용자에게 연결하기 위해서는 웹 상에서 상대가 어느 곳에 위치하는지 알아야한다.
다른 사용자와 통신하기 위해서 단순히 접근 정보를 교환하면 되고 나머지는 WebRTC가 해준다.
이렇게 다른 사용자와 연결하는 과정이 Signaling 이다.

Signaling은 다음과 같은 스텝들로 되어있다.

  • Peer connection을 위한 잠재적인 후보자(potential candidate) 목록을 생성한다.
  • 사용자나 애플리케이션이 연결할 다른 사용자(편의상 타겟으로 지칭)를 선택한다.
  • Signaling 계층은 타겟에게 누군가가 연결하고 싶어한다고 알린다.
    • 타겟은 이를 수락하거나 거절할 수 있다.
  • 연결할 사용자가 타겟이 연결 제안을 수락한 것에 대해 알림받는다.
  • 사용자는 타겟과 RTCPeerConnection을 시작한다.
  • 두 사용자는 소프트웨어, 하드웨어 정보를 signaling server를 통해 교환한다.
  • 연결이 성공되거나 실패된다.

WebRTC 명세에는 정보 교환에 대한 표준을 정의하고 있지 않다.
그렇기 때문에 위의 순서는 signaling의 하나의 예시이며 어떤 프로토콜, 기술을 사용해도 된다.

NAT (Network Address Translation)

내부망의 사설 IP는 외부 네트워크에서 접근할 수가 없다.
하지만 사설 IP를 사용하여도 웹사이트를 접속할 때 같이 서버에 요청을 하면 응답을 받을 수 있는 것은 NAT 덕분이다.

위와 같이 출발지의 IP를 사설 IP 그대로 서버(도착지)에게 보낸다면 서버는 수신자의 공인 IP를 알 수 없기 때문에 응답을 전해줄 수가 없다.

내부망에서 NAT가 활성화된 라우터나 방화벽을 통해 외부 인터넷망으로 요청을 보내면,
사설 IP를 해당 네트워크의 공인 IP로 변환하여 요청을 보내고 요청을 받은 서버는 요청자의 공인 IP로 응답을 보내게 된다.
응답을 받을 때는 요청을 보낼 때와는 반대로,
라우터나 방화벽이 도착지 IP의 공인 IP를 사설 IP로 변환하여 요청자가 응답을 받을 수 있다.

NAT 기능을 수행하는 라우터나 방화벽에서 매핑 테이블을 생성하여 사설 IP와 공인 IP를 매핑한 정보를 갖고 있는데,
이 매핑 테이블은 내부에서 외부 네트워크로 패킷을 보낼 때 생성된다.
하지만 내부망에서 요청을 보내지 않은 외부 네트워크에서 내부망으로 패킷을 보낼때는 NAT 매핑 테이블이 없으므로 해당 패킷을 폐기한다.

NAT Traversal

인터넷을 통해 P2P로 서로 통신을 하게 되면 NAT로 인해 문제가 발생한다.
사설망에서 외부 네트워크로의 시그널링은 정상적으로 이뤄지지만,
반대로 외부 네트워크에서 사설망으로는 NAT 매핑 테이블이 없으므로 방화벽을 투과할 수 없다.
NAT 환경에서 이런 문제 없이 통신이 잘 되도록 하는 기술을 NAT Traversal이라고 한다.

ICE (Interactive Connectivity Establishment)

ICE는 두 사용자가 서로 통신할 수 있는 방법을 찾기위한 컴퓨터 네트워킹 기술이다.
우선 연결 가능한 접속 경로를 수집하고, 해당 경로를 통해 패킷을 송수신하여 경로들 중 품질이 우수한 경로를 사용한다.

STUN (Session Traversal Utilities for NAT)

STUN은 클라이언트-서버 프로토콜로 클라이언트는 사설망에, STUN 서버는 인터넷망에 위치하게되고,
클라이언트는 자신의 공인 IP를 확인하기 위해 STUN 서버에게 요청하고, 서버는 요청한 클라이언트의 공인 IP를 응답해주는 프로토콜이다.

클라이언트는 자신의 공인 IP와 라우터의 NAT 뒤에 있는 자신에게 접속 가능 여부를 알기 위해 STUN 서버에 요청을 보내 묻는다.

하지만 두 단말이 같은 환경에 있는 경우 STUN은 동작하지 않고 또,
일부 라우터들은 네트워크를 통해 기기에 접속 하려는 경우에 제약을 가하는 경우가 있는데,
이런 경우 STUN 서버를 통해 공인 IP를 받았다더라도 연결을 할 수 없다.
이런 상황에서는 TURN을 사용해야 한다.

TURN (Traversal Using Relays around NAT)

Peer간 직접 통신이 실패할 경우 Peer 사이에 데이터 릴레이를 수행하는 TURN server를 사용한다.
TURN 클라이언트는 통신할 피어들과 직접 통신하는 것이 아니라 릴레이(약자에도 Relay가 들어간다) 서버인 TURN 서버를 경유하여 통신하게된다.

SDP (Session Description Protocol)

연결된 멀티미디어 데이터의 해상도, 형식, 코덱 등을 기술하는 표준이다.
P2P로 서로 전송될 데이터를 이해하는데 사용되며 미디어 자체라기 보단 메타데이터라고 볼 수 있다.


참고
https://brunch.co.kr/@linecard/155
https://www.nexpert.net/91
http://hacks.mozilla.or.kr/2013/08/webrtc-and-the-ocean-of-acronyms/
https://webrtcglossary.com/ice/
https://m.blog.naver.com/PostView.nhn?blogId=itperson&logNo=220952200651&proxyReferer=https%3A%2F%2Fwww.google.com%2F
https://www.html5rocks.com/ko/tutorials/webrtc/infrastructure/
https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API/Signaling_and_video_calling
https://www.tutorialspoint.com/webrtc/webrtc_signaling

Share