2013년 9월 12일 목요일

강좌 : 화상 통화 시스템 개발 프로젝트 Video Call System Development Project - ICE

출처 : 필고 개발자 스터디 그룹 http://www.philgo.com

 

ICE 는 생각보다 많은 일을 합니다.

ICE 가 하는 주요한 일이 바로 Hole Punching 입니다. P2P 가 방화벽이나 NAT 에 막혀 있을 때 그러한 장벽을 뚫고 두 개체를 연결 시키는 역활을 하죠.

본 글에서는 ICE 의 STUN 부분에 대해서만 설명을 하고 있습니다.

차차 더 많은 정보를 올리도록 하겠습니다.

 

가능하다면 필고에서 오프라인 모임을 통해서 실제로 화상 통화 프로그램 제작을 선 보이며 소스 파일에 하나 하나 타이핑해서 완성하는 모습을 보여드리고 싶습니다.

 

 

ICE

http://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment

서로 Session Description 을 교환 했으면 hole punching 을 통해서 P2P 상의 두 개체를 연결시켜야 한다.

이것이러한 hole punching 작업을 ICE 가 담당한다.

먼저 STUN 으로 가능한지 보고 그렇지 않다면 TURN 으로 두 개체를 연결한다.

사진 : ICE 동작 방식

Transport Address 를 얻고 Offer 와 Answer 과정을 잘 살펴보기 바란다.

위 사진에서 TURN 의 기능은 빠져 있다.

가장 먼저 하는 것이 offer 를 하는 caller 가 자신의 transport address 를 STUN 서버를 통해서 확인하는 것이다. 이것이 모든 P2P 에서 가장 먼저 하는 것이다.

callee 의 경우 ( Signaling 과정 중에서 ) session request 가 들어오자 마자 (caller 가 보내는 offer 를 받자 마자) 곧 바로 callee 자신의 transport address 정보를 STUN 서버를 통해서 확인한다.

Transport Address 는 다른 말로 Candidate Address 라고도 한다.

Candidate Address 에는 총 4가지가 있다.

  • Host
    이 candidate address 는 로컬 네트웍에서 사용이 된다.

  • Server Reflexive ( srflx 로 표기 )
    이 candidate address 는 STUN 에 의해서 얻어지는 것으로 현재 브라우저가 있는 최근방의 Public IP 정보를 가지고 있다.

  • Peer Reflexive ( prflx 로 표기 )
    이 candidate address 는 STUN 에 의해서 얻어지는 것으로 현재 브라우저가 아닌 연결을 하려는 상대방의 연결 정보를 가지고 있다.

  • Relayed
    이 candidate address 는 TURN 의 주소 정보를 가지고 있다.


( 사진 : SDP 의 예 )

Foundation(s) 그룹을 표시하는 문자열이다.

typ srflx (server reflexive) 는 STUN 서버로 부터 받은 (브라우저의) transport address 정보이다.

typ relay 는 Relay (TURN) Server 의 transport address 정보이다.

host candidate 는 내부 네트워크이므로 IP 정보는 해당 브라우저의 IP 정보와 동일하다.

댓글 없음:

댓글 쓰기