Download presentation
Presentation is loading. Please wait.
1
P2P를 연결을 위한 여러기술 휴즈플로우 이재동 예전에 간략하게 크로스 플랫폼 p2p를 이야기한적이 있었는데요
그래서 어떻게 하면 TeamViewer나 다른 P2P와 같이 같은 네트워크상에 있지 않은 기기끼리 통신을 할수 있는지에 대해 조사를 해보았습니다.
2
어떻게 통신할까? 자 생각해봅시다. 데이터를 전송할 방법은 여러가지가 있습니다.
가장 쉬운방법은 같은 NAT 를 거치지 않은 Public ip를 이용해서만 통신하는 방법이 있습니다. 예를 들면 이라는 public ip가 각각 있으면 그냥 서로 ip를 입력해서 접근할수 있습니다. 하지만 NAT 환경 공유기를 거친 환경이거나 혹은 3g를 이용한 핸드폰이라면 어떨까요? 초보라면 저 컴퓨터에 ip를 확인해서 접속 할려고 시도도 해볼것입니다. 하지만 private ip라서 접근이 불가능하죠 이런경우 어떻게 통신을 할까요… 이제부터 많은 방법중에 많은 사람들이 이용하는 방법을 보겠습니다.
3
Relaying 첫번째로 relaying 방식 입니다.
NAT를 넘나드는 가장 확실한 (그러나 가장 비효과적인) P2P 통신 방법은 중계(relaying)를 통해서 간단하게 표준 클라이언트/서버 모델 처럼 만드는 것 이다. 예전 이노티브 다닐때에도 제가 서버팀이였을때 이방법을 사용했었고 현재 레드카펫도 이렇게 연결을 하고 있는것으로 알고 있습니다. 한마디로 중계를 이용한 방법이지요 이기법의 단점은 서버의 프로세싱 파워와 네트워크 대역폭을 소모한다는 것입니다. 또한 아무리 서버가 잘 연결되어 있다 하더라도 두 클라이언트 사이의 통신 지연이 늘어날 가능성이 있다. 그럼에도 불구하고, 모든 NAT들을 상대로 확실히 동작하는 효과적인 기법이 없기 때문에, 최대의 확실성이 요구된다면 중계는 유용한 대책이다
4
Hole Punching 홀펀칭이라고 들어보셨나요? 아마 지숙이는 알텐데요
A4 용지 파일을 정리할때 구멍을 뚫는 펀칭도구를 홀펀칭이라고 부르지요? 말그대로 NAT로 인해 막혀있는 홀( 포트? )를 네트워크 패킷이 지나갈 수 있게 뚫는 것입니다. 이게 필요한 이유는 p2p 기반의 게임이나 통신방식에서 클라이언트끼리 직접 연결을 맺고 통신을 진행 하여야 하는데 직접 연결이 불가능하기때문에 유무선 공유기가 일반화된 환경에서 p2p 서비스를 제공하려는 경우에 필수적인 기술입니다
5
Hole Punching Server Client A Client B
홀펀칭에 대해서 막 복잡한 이론이 존재하지만 제가 간략하게 정리하자면 이렇습니다. Client A와 B가 서버에게 작은 dummy Data를 보냅니다. Server는 받은 Data를 분석해서 ip와 port정보를 얻어 냅니다. 그정보를 가지고 A와 B 클라이언트들에게 정보를 주면 A와 B는 다이렉트로 통신을 시작하게 됩니다. 이때 udp통신을 하게 되는데 통신이 끊기지 않도록 주기적으로 keep-alive 를 해야합니다. 이와 같은걸 홀펀칭이라고 하는데요 이기술을 통해서 80% 통신이 가능하고 만약 이렇게해서 통신이 안될경우 relaying 기법을 이용한다면 98% 까지 통신이 가능하다고 합니다. 그래서 나중에 정식적으로 프로그래밍을 짤때는 기본적으로 홀펀칭을 쓰고 홀펀칭이 먹히지 않을 경우에는 relaying 으로 전환하는 방법을 쓰시면 될꺼 같습니다. 물론 TCP로도 가능은 한데 좀더 어렵고 확률이 낮아진다고 하네요 Client A Client B
6
샘플 시연
Similar presentations