UDP +가 소프트웨어 신뢰할 수있는 주문 시스템이 TCP보다 빠른 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1200901

  •  05-07-2019
  •  | 
  •  

문제

오늘날 일부 게임은 UDP를 통해 메시지를 전송하는 네트워크 시스템을 사용하고 메시지를 신뢰할 수 있고 주문하도록합니다.

예를 들어, Raknet 인기있는 게임 네트워크 엔진입니다. 연결에 UDP 만 사용하며 전체 시스템이있어서 선택한 경우 패킷을 신뢰할 수 있고 주문할 수 있도록 할 수 있습니다.

내 기본적인 질문은, 그게 무슨 일이야? TCP가 주문한 신뢰할 수있는 UDP와 동일하지 않습니까? 사람들이 기본적으로 바퀴를 재창조 해야하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

일반/전문화

  1. TCP는 범용 신뢰할 수있는 시스템입니다
  2. UDP +특별한 목적 신뢰할 수있는 시스템이 무엇이든.

전문화 된 것들은 일반적으로 그들이 전문화 된 것보다 범용적인 것보다 낫습니다.

스트림 / 메시지

  1. TCP는 스트림 기반입니다
  2. UDP는 메시지 기반입니다

이산 게임 정보 맵을 일반적으로 메시지 기반 패러다임으로 더 나은 전송합니다. 스트림을 통해 그것을 보내는 것은 가능하지만 끔찍하게 비효율적입니다. 엄청난 양의 데이터 (파일 전송)를 안정적으로 보내려면 TCP가 매우 효과적입니다. 그렇기 때문에 Bit-Torrent가 제어 메시지에는 UDP를 사용하고 데이터 전송에는 TCP를 사용합니다.

다른 팁

우리는 약 1 년 전 "리그 오브 레전드 (League of Legends)"에서 신뢰할 수없는 것으로 전환했습니다.

1) 오래된 정보는 관련이 없습니다. 건강 패킷을 보내고 도착하지 않으면 ... 변경된 것을 알 때 동일한 건강 패킷이 재현 될 때까지 기다릴 필요가 없습니다.

2) 주문이 때때로 필요하지 않습니다. 다른 시스템에 다른 메시지를 보내는 경우 해당 메시지를 순서대로 가져 오지 않아도됩니다. 나는 고객이 순서 메시지를 기다리도록 강요하지 않습니다.

3) 신뢰할 수없는 메시지는 메시지로 백업되지 않습니다 ... 즉, 승인을 기다리는 것을 기다리는 것은 손실 스파이크를 훨씬 더 빨리 해결할 수 있음을 의미합니다.

4) 반드시 더 효율적으로 재현을 제어 할 수 있습니다. 다른 패킷으로 보내지 않은 것을 재 포장하는 것과 같은. (TCP는 재 포장을하지만 프로그램의 작동 방식에 대한 지식으로 더 효율적으로 수행 할 수 있습니다.)

5) 네트워크가 갑자기 스파이크 될 때 덜 관련성이없는 메시지를 버리는 것과 같은 메시지의 흐름 제어. 네트워크 시스템은 손실 스파이크가있을 때 관련 메시지를 덜 재현하지 않도록 선택할 수 있습니다. TCP를 사용하면 여전히 우선 순위가 낮을 수있는 재판매를 시도하는 메시지 대기열이 있습니다.

6) 더 작은 헤더 패킷 ... 실제로 그것에 대해 많이 말할 필요는 없습니다.

신뢰성과 시퀀싱보다 UDP와 TCP 사이에는 훨씬 더 많은 차이가 있습니다.

문제의 핵심은 UDP가 연결이 없습니다 TCP는입니다 연결. 이 간단한 차이는 여기에 합리적으로 요약 할 수없는 다른 많은 차이점으로 이어집니다. 훨씬 자세한 내용은 아래 분석을 읽을 수 있습니다.

TCP- UDP 비교 분석

내 의견으로는 두 단어 : "정체 제어".

TCP는 경로의 대역폭을 관리하기 위해 큰 길이로 이동합니다.이를 최대한 활용하지만 다른 응용 프로그램을위한 공간이 있는지 확인합니다. 이것은 매우 어려운 작업이며 본질적으로 100%의 100%를 100% 사용하는 것은 불가능합니다.

반면에 UDP를 사용하면 패킷을 원하는만큼 빠르게 와이어로 전송하기 위해 자체 프로토콜을 만들 수 있습니다. 이는 프로토콜이 다른 응용 프로그램에 매우 친절하게 만들어 지지만 단기간에 더 많은 "성능"을 얻을 수 있습니다. 반면에 조건이 적절한 경우 이러한 종류의 프로토콜이 혼잡 붕괴.

TCP는 스트림 지향 프로토콜 인 반면 UDP는 메시지 지향 프로토콜입니다. 따라서 TCP는 신뢰성과 주문 이상의 기능을 수행합니다. 보다 이 게시물 자세한 사항은. 기본적으로 Raknet 개발자는 신뢰성과 주문을 추가하면서 메시지 지향 프로토콜로 유지하면서 결과는 TCP보다 가벼웠습니다 (더 많은 일을해야 함).

이 작은 기사는 오래되었지만 게임과 관련하여 여전히 사실입니다. 그것은 두 프로토콜을 설명하고,이 사람들은 멀티 플레이어 인터넷 게임을 개발하려고 노력했습니다. "X- 윙 대 타이 전투기"

배운 교훈 (인터넷은 짜증납니다)

그래도 이에 대한 경고가 하나 있습니다. 멀티 플레이어 게임을 실행/개발했으며 둘 다 사용했습니다. UDP는 내 앱에 훨씬 더 좋았지 만 많은 사람들이 UDP를 가지고 놀 수 없었습니다. 라우터와 그러한 연결이 차단되었습니다. 그래서 나는 "신뢰할 수있는"TCP로 변경되었습니다. 글쎄 ... 신뢰할 수 있습니까? 나는 그렇게 생각하지 않습니다. 패킷을 보내거나 오류가없고 다른 것을 보내고 패킷 중간에 충돌 (예외)을 보내십시오. 이제 어떤 패킷을 만들었습니까? 따라서 TCP 위에 신뢰할 수있는 프로토콜을 작성하여 UDP를 시뮬레이션하지만 충돌 할 때 새로운 연결을 지속적으로 설정합니다. 비효율적입니다.

UDP + 중지 및 기다려 arw = 좋습니다

UDP + 슬라이딩 윈도우 프로토콜 = 더 나은

다시 연결된 TCP + 슬라이딩 윈도우 프로토콜? = 무가치 한 벌크웨어. (IMHO)

다른 부작용은 다중 스레드 애플리케이션입니다. TCP는 각 객실이 자체 스레드 일 수 있으므로 대화방 유형에 적합합니다. 방은 60-100 명을 수용 할 수 있으며 방 스레드에는 각 참가자의 소켓이 포함되어 있기 때문에 잘 작동합니다.

반면에 UDP는 하나의 스레드로 가장 잘 제공되지만 (IMO), 패킷을 얻을 때 (정보를 보내거나 RemoteEndPoint를 통해) 누가 나온지 파악하고 해당 데이터를 채팅방 스레드로 전달해야합니다. 스레드 안전 방식으로.

실제로 TCP와 동일하게 수행해야하지만 Connect에서만 수행해야합니다.

마지막 요점. TCP는 언제든지 오류가 발생하고 연결을 제거하지만 약 0.5 초 안에 다시 연결하여 동일한 정보를 보낼 수 있습니다. 내가 함께 일한 것 중 대부분의 비즈웨어.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top