2011-04-08 2 views
5

내 질문의 핵심은 클라이언트와 서버 간의 통신에 TCP와 UDP를 모두 사용하도록 허용되는지 묻는 것입니다.동일한 appliation에서 TCP와 UDP를 사용하는 데 문제가 있습니까?

통신 (예 : 로그인 등)을 보장해야하는 실시간 클라이언트 서버 게임을 만들고 있지만 다른 부분은 패킷 손실 (상태 업데이트 등)이 잘 될 것입니다. 그래서 대부분의 데이터 통신에 UDP를 사용하고 싶지만 내 제어 통신 (로그인)을 보장하기 위해 자체 프레임 워크를 구현하고 싶지 않습니다.

처음에는 TCP를 사용하여 연결을 관리하고 별도의 포트에서 데이터 통신 팩을 보내고받는 것이 합리적입니까?

답변

5

다른 통신 작업을 수행하려면 TCP와 UDP를 사용해야합니다. 그리고 두 개의 다른 포트를 사용할 필요조차 없습니다. One will suffice. 동일한 포트에서 두 개의 서로 다른 프로토콜을들을 수 있습니다.

0

널리 받아 들여지지 만 널리 사용됩니다. 좋은 예를 들어, BATS Exchangemarket data 배포 시스템에서이 방법을 사용하여 복구 메커니즘을 구현합니다.

2

매우 합리적이며 이미 주류에 사용됩니다. 웹을 탐색 할 때에도 DNS 작업은 UDP 기반이며 HTTP 연결은 TCP 기반입니다.

두 연결 유형을 완전히 독립적으로 고려하거나 상호 의존성을 적절히 처리하기 위해 추가 측정을 사용해야합니다. TCP 연결은 OS 및 네트워크 수준에서 타이밍 문제가 발생할 수 있으며 UDP 연결에는 패킷 손실 문제가 있습니다. 응용 프로그램의 TCP 부분이 중단되거나 UDP 패킷이 손실되면 교착 상태 및 성능 문제를 피하기 위해 특정 조치를 취해야합니다.

+0

그들은 어떻게 서로 문제를 일으킬 수 있습니까? –

+1

@ gamernb : 만약 그들이 독립적이라면, TCP 서버가 UDP 부분으로부터 데이터를 보내기위한 통지를 기다린다면 패킷 손실을 처리하지 않을 경우 영원히 기다릴 수 있습니다. – thkala

+0

알겠습니다. 이해합니다. 나는 그들을 서로 기다리게 할 계획이 없다. UDP 부분은 상태 업데이트 패킷을 끝없이 기다리는 무언가 일뿐입니다. 수신되면 현재 클라이언트 상태에 적용됩니다. –

관련 문제