관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] WebRTC - 개념 (STUN, NAT, TURN, MediaStream, RTCPeerConnection, RTCDataChannel) 본문

iOS 응용 (swift)

[iOS - swift] WebRTC - 개념 (STUN, NAT, TURN, MediaStream, RTCPeerConnection, RTCDataChannel)

jake-kim 2022. 4. 18. 22:06

사전 지식 1) IP 라우팅

  • 라우팅: OSI(Open Systems Interconnection) 중 3계층에서 라우팅을 사용하는데, 용어 그대로 전기적 신호의 경로를 결정하는 것이 라우팅

https://www.imperva.com/learn/application-security/osi-model/

  • 라우팅에서 사용하는게 IP를 가지고 경로를 결정하는데, 인터넷을 사용하는 기기에는 고유한 IP를 부여받는 형태
    (IP는 MAC주소와 다르게 고유하지 않고 변경이 가능한점에 유의)
  • 노트북과 폰 모두 IP주소를 가지고 있지만, 이 IP주소의 보안을 위해서 오픈하지 않고 중간 중재자 공유기를 통해 관리
  • 공유기는 public IP를 가지고, 노트북과 폰은 private IP를 가지고 있는 형태

사전 지식 2) WebSocket

아래가 WebSocket

  • 보통 서버와 클라이언트가 있을 때 Request/Response를 통해 서로 데이터를 교환하지만, 느린 방식이므로 아예 서버와 클라이언트 사이 Connection을 두어 하나의 link를 통해 데이터를 주고받는것

WebRTC 개념

  • Web(or App) Real Time Communication
  • WebRTC는 통신하는 동안 서버가 중간에 없이 P2P(peer to peer)가 가능한 인터넷 프로토콜
  • 제 3자 소프트웨어 설치 없이 종단 간 데이터 공유 및 화상 회의를 가능하게 하는 방법
  • ex) 실시간 음성, 화상 회의, 파일 교환

Signaling

  • peer to peer 연결을 위해서 처음에는 서버 중개자가 존재
  • A가 B와 통신하고 싶은 경우, 서버에 video인지 chat인지 결정하고 서버에 요청
  • 이 서버를 Signaling Server라고 하고, A와 B가 OK하면 IP정보를 교환
    • 원래 IP정보는 보안에 민감하여 서로 바로 교환하면 안되므로 Signaling Server가 관리해주는 역할
  • 코드에서는 PeerConnection이라고 부르고, PeerConnection을 통해 SessionDescription을 서로 주고받아 이 다음부터는 서버 없이 connection이 되는 구조

Signaling Server - Stun, NAT, Turn

  • Stun Server
    • Publis IP를 저장하고 있고 Peer간의 직접 연결을 막는 등의 라우터의 제한을 결정하는 프로토콜
    • 클라이언트는 Stun Server에 접근 가능한지 물어보는 요청을하는 형태
  • NAT (Network Address Translation)
    • 라우터는 Public IP와 각각의 단말들의 Private IP를 가지고 있는데, 이 때 단말들에 Public IP를 알려줄때 사용되는 용어
  • Turn Server
    • 일종의 보험용도로, Public IP를 각각 단말기가 가지고 있고 각 P2P연결을 시도하려고 하지만 실패한 경우 Turn 서버라는 곳이 중개하여 다시 연결해줄수 있도록 하는 역할

WebRTC 핵심 API

  • MediaStream
    • 카메라와 마이크 등의 데이터 스트림에 접근
    • getUserMedia() 메소드를 통해 액세스
  • RTCPeerConnection
    • 암호화 및 대역폭 관리, 오디오, 비디오 연결
    • getUserMedia에서 스트림을 연결하고 peer 커넥션으로 연결
    • RTCPeerConnection을 이용하여 getUserMedia로 호출한 비디오를 전달
  • RTCDataChannel
    • WebSocket과 같은 비슷한 역할로 데이터를 P2P 통신

* 참고

https://www.imperva.com/learn/application-security/osi-model/

https://medium.com/@hyun.sang/webrtc-webrtc%EB%9E%80-43df68cbe511

https://www.html5rocks.com/ko/tutorials/webrtc/infrastructure/

https://inspirit941.tistory.com/346

https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API

Comments