본문 바로가기

MS/P2P

P2P network library project



Downdload link : http://code.google.com/p/p2pnt/

Current verstion : v0.7

개발자 : http://cafe.naver.com/jzsdn/17520 (추정)

출처 : http://purematter.blog.me/


PJLIB Downdload link : http://www.pjsip.org/download.htm


프로젝트의 구성


 개요

샘플코드는 PJNATH 모듈을 내장한 p2pnt 라이브러리와 그 밖의 라이브러리들, 테스트를 수행하기 위한 서버와 클라이언트 프로그램들로 구성되어 있습니다. p2pnt를 사용하여 구현된 P2P 클라이언트는, rendezvous 라이브러리를 사용하여 구현된 랑데부서버와 TURN서버의 서비스를 받아 원격 피어와 P2P세션수립을 테스트합니다. 이 피어도 역시 P2P 클라이언트입니다. 랑데부서버는 다수의 클라이언트에 대한 세션디스크립터를 관리하며 (rendezvous 라이브러리를 사용해서) P2P네트워크 그룹을 생성하도록 지원합니다. TURN 서버는 NAT뒤에 있는 클라이언트가 P2P세션수립을 위한 라우팅경로를 발견하지 못했을 때 패킷을 중계해주는 서비스를 제공합니다. STUN의 확장인 TURN서버는 STUN서버의 역할을 수행할 수 있습니다. 따라서 샘플코드에 STUN 프로젝트는 없습니다. 그냥 TURN 서버만 있으면 문제없습니다.

테스트 프로그램 구성

샘플소스코드의 위치는 /samplecode/nattraversal 이며 이곳에는 비주얼스튜디오솔루션파일이 있습니다. p2psample.sln 파일입니다. 오픈하면 10개의 프로젝트가 포함되어 있는 것을 확인할 수 있습니다.

1. sample-rendezvous-server

랑데부서버입니다. 이 서버는 클라이언트들간의 P2P세션그룹을 생성하는 것을 지원합니다. 랑데부서버에서 사용하는 rendezvous 라이브러리에는 랑데부기능을 위한 로직이 구현되어 있습니다.

2. sample-p2p-client

P2P클라이언트 프로그램입니다. P2P통신을 담당하는 p2pnt라이브러리를 사용합니다. 프로그램은 p2pnt라이브러리에 sample-rendezvous-server, STUN, TURN 서버주소를 인자로 넘겨주어야 합니다.

3. p2pnt

오픈소스 STUN, TURN, ICE 구현인 PJNATH를 기반으로 구현된 NAT기반 P2P네트워크 라이브러리입니다. 이 라이브러리는 공유기로 인한 제약을 극복하는 로직을 담고 있습니다. P2P클라이언트에서 사용합니다.

4. rdv-msg

랑데부서버(sample-rendezvous-server)P2P클라이언트(sample-p2p-client)간에 사용하는 메시지 프로토콜 라이브러리입니다. 랑데부메시지는 ENet을 통해 서버로 전송됩니다. p2pnt는 클라이언트와 피어간의 통신을 담당합니다.

5. TURN-server

TURN 서버입니다. 클라이언트와 피어간에 다이렉트통신이 안될 경우 패킷을중계해주는 역할을 합니다. TURN 서버는 STUN 서버의 역할도 할 수 있습니다. TURN STUN을 확장한 것이기 때문입니다.

6. enet

오픈소스 UDP 네트워크 라이브러리입니다. UDP 패킷의 전송을 보장할 수 있도록 신뢰성(reliable)을 추가할 수 있습니다.

7. pjlib

오픈소스 SIP 스택인 PJSIP(pjsip.org)에 포함된 OS 추상 프레임워크입니다. pjnath 라이브러리에서 의존하고 있기때문에 사용합니다.

8. pjlib_util

역시 오픈소스 SIP 스택인 PJSIP(pjsip.org)에 포함되어 있습니다. pjnath 라이브러리에서 의존하고 있기때문에 사용합니다. pjlib 에 의존합니다.

9. pjnath

역시 오픈소스 SIP 스택인 PJSIP(pjsip.org)에 포함되어 있습니다. STUN, TURN, ICE 프로토콜을 구현한 라이브러리입니다. VoIP 프로그램 개발에 사용하기 위해 포함된 것이지만 다른 프로그램에서도 사용할 수 있도록 되어 있습니다. 계층형 아키텍처로서 디자인되어 있기 때문입니다.

위 그림은 랑데부서버와 P2P클라이언트가 사용하는 라이브러리들의 구성을 나타내고 있습니다. P2PNT PJNATH, PJLIB-UTIL, PJLIB에 사용(의존)한다는 것을 보여줍니다. 상하로(위아래로) 맞닿은 면은 의존관계를 나타냅니다.

테스트 실행 방법

클라이언트들을 실행하기 전에 랑데부서버/STUN/TURN 서버를 실행해야 합니다.

랑데부서버 실행

) samplecode\nattraversal\bin\sample-rendezvous-server.exe 2

랑데부서버는 1개의 인자를 받습니다. 이것은 테스트에 참여하는 클라이언트의 최대 수를 지정합니다. 이러한 인자는 원래 필요한 것은 아니며 테스트를 위한 용도입니다. 지정된 최대 수만큼 클라이언트가 로그인하면 서버는 자동적으로 모든 클라이언트들이 서로간에 P2P세션연결을 시도하도록 메시지를 전송합니다.

STUN & TURN 서버 실행

) samplecode\nattraversal\bin\pjturn_srv.exe

TURN 서버는 인자없이 실행하면 됩니다.

클라이언트의 실행

) samplecode\nattraversal\bin\ sample-p2p-client.exe -r -c 1 s 127.0.0.1:34780 -t 127.0.0.1:34780 127.0.0.1:51014

-s STUN 서버의 주소를 지정합니다.
-t
TURN 서버의 주소를 지정합니다
.
-r
P2P연결이 수립되었을 때 Round-trip time을 체크여부를 지정합니다
.
-c
는 최대 피어수를 지정합니다. (이 값은 서버에서 지정하는 최대 클라이언트 개수보다 1작은 값입니다
)
옵션이 지정되지 않는 인자는 랑데부서버의 주소를 의미합니다.

테스트를 쉽게 하기 위해 배치파일을 만드는 것도 좋습니다. bin 디렉토리에는 이를위한 배치파일이 포함되어 있습니다.

Note : NAT Traversal를 위해서 NAT의 타입을 구분할 필요는 없습니다. IETF 표준 NAT Traversal 솔루션인 ICE(Interactive Communication Environment)도 타입구분을 정의하고 있지 않습니다.



'MS > P2P' 카테고리의 다른 글

TURN - Server (Relay server)  (0) 2012.11.07
샘플 코드 (Client)  (0) 2012.11.07
PJNATH - TURN 전송 모듈  (0) 2012.11.07
PJNATH - TURN 세션 모듈  (0) 2012.11.07
PJLib - APIs  (0) 2012.11.07