1.ProudNet의 통신 기능의 특성

Edit

다음은 ProudNet의 통신 기능의 특성을 설명합니다.

1.1ProudNet의 P2P 통신 성능

ProudNet의 P2P 통신은 강력합니다! 보편화된 홀펀칭 및 릴레이 기법 이상의 기능을 보유하고 있습니다.

ProudNet은

ProudNet에서는 사용자가 P2P 통신 연결을 요청( Proud.CNetServer.CreateP2PGroup 이나 Proud.CNetServer.JoinP2PGroup )한 직후부터 피어들간의 메시징을 바로 시행할 수 있습니다. 하지만, 아직 피어간 홀펀칭이 되어 있지 않은 경우에는 피어들간의 메시징은 서버를 통해 릴레이될 뿐입니다. 피어간 메시징이 시행되는 동안 백그라운드에서는 피어간 홀펀칭을 병행합니다. 그리고 홀펀칭이 성공하면 P2P 통신 경로는 릴레이로부터 직접(direct) 방식으로 바뀝니다. 이를 先 홀펀칭 後 릴레이라고 부릅니다. 이러한 특징을 갖고 있어서 ProudNet 응용 프로그램은 게임 방 시작시 대기 시간을 요구하지 않습니다. 또한 MMORPG 게임에서 가시 영역 근처의 캐릭터끼리의 P2P를 이용한 위치 동기화를 위해 잦은 P2P 연결/연결 해제를 해도 안정적입니다.

NAT 장치들 중 일부 기종은 같은 내부 주소에 대한 외부 주소 매핑을 잘못 관리함으로 인한 주소 매핑 유실을 합니다. ProudNet은 이에 대한 내성을 갖기 위해 피어간 서로 다른 UDP socket을 두고 있습니다.

ADSL or ADSL2+등 다운로드 속도에 비해 업로드 속도가 느린 가정용 컴퓨터 환경에서는 홀펀칭이 되더라도 과다한 송신량을 이기지 못하는 경우가 있습니다. 이러한 경우 송신을 하는 컴퓨터 혹은 송신측에 있는 NAT 장치가 정상 작동을 하지 못하게 되기도 합니다. ProudNet은 이에 대한 자체적인 해결책을 내장하고 있습니다. 만약 많은 수의 피어를 상대로 멀티캐스트하는 피어가 송신량이 과다해지면, ProudNet은 이를 감지하여 멀티캐스트를 릴레이 서버에게 배분합니다.

NAT 홀펀칭을 위한 전략으로 '포트 예측 기법'이 알려져 있습니다. 이 기법은 symmetric NAT 장치간 홀펀칭을 가능하게 해주지만 그 댓가로 과다한 포트 매핑으로 인한 부작용이 있습니다. ProudNet은 그 부작용을 최소화하기 위해 처음에는 과격한 홀펀칭을 자제하고 장시간동안 서서히 포트 예측 등 공격적인 홀펀칭 기법으로 전환합니다. 따라서 일부 NAT 장치에서는 direct P2P로 경로가 전환되는 시간이 오래 걸리지만(보통 수십초) 문제가 되지 않습니다. 왜냐하면 先 홀펀칭 後 릴레이 기법에 의해 당장 피어간 메시징을 시행하기 때문입니다.

ProudNet은 꼭 필요한 경우에만 홀펀칭을 시도합니다. 그렇기 때문에 주소 매핑 갯수가 제한된 NAT 장치에서의 매핑 정보 증발을 최소화합니다. 예를 들어 P2P 연결을 맺었지만 정작 P2P 통신을 하지 않을 경우 홀펀칭 과정을 수행하지 않습니다. Proud.CNetServer.CreateP2PGroup , Proud.CNetServer.JoinP2PGroup를 호출한 직후에 Proud.RmiContext.m_relayed, Proud.CNetClientInfo.m_RelayedP2P, Proud.CNetPeerInfo.m_RelayedP2P 값이 여전히 false인 이유가 여기에 있습니다. P2P 통신을 하기 시작한 후 잠시 뒤에 이 값은 true로 바뀔 것입니다.

1.2ProudNet의 UDP 통신 관련 성능

ProudNet은 UDP 프로토콜 사용시 통신 성능을 높이기 위해 다음과 같은 기법을 구사합니다.

•Coalesce

•MTU discovery fail 예방

ProudNet을 쓸 경우 레이턴시가 1밀리초 이하 수준의 LAN 환경에서의 소량 통신에서는 ProudNet의 통신 부하가 실제 RMI 데이터 용량보다 많이 나타납니다. 그러나 통신량을 증가시키거나 레이턴시가 높은 WAN 환경에서는 coalesce 기능으로 인해 통신 부하가 LAN에서 소량 통신을 할 때보다 줄어듭니다.

그림 1-1RMI 호출 횟수 증가에 따른 통신량 관계

100km 이상의 거리의 인터넷 통신에서는 많은 수의 다양한 기종의 Gateway 장치를 패킷이 지나가야 합니다. 각 Gateway는 서로 다른 감당 가능한 MTU size가 지정되어 있습니다. 하지만 패킷을 송신하는 측에서 정의된 MTU 크기를 초과할 경우 ICMP packet fragment 패킷이 발생합니다. 하지만 일부 유저들은 ICMP 공격을 두려워하여 모든 종류의 ICMP 패킷을 차단하도록 자신의 컴퓨터를 설정하기도 합니다. 이러한 경우 ICMP packet fragment 패킷을 처리하지 못해 MTU discovery가 실패합니다. 결국 두 호스트간의 UDP 통신이 두절됩니다. ProudNet은 이에 대한 예방 기능을 갖추고 있습니다.