문제

에 대한 일반적인 프로토콜은 메시지 교환,를 허용할 수 있는 몇 가지 패킷 손실이다.얼마나 더 효율적인 UDP TCP?

도움이 되었습니까?

해결책

UDP 보다 빠르 TCP,간단한 이유 때문에 그것의 존재하지 않는 인정하는 패킷(ACK)는 것을 허용하는 지속적인 패킷 스트림에 대 TCP 는 인정의 설정 패킷을 사용하여 계산됩 TCP window 크기와 라운드 여행 시간 RTT().

자세한 내용은주 간단하지만,매우 이해 Skullbox 설명(TCP 대UDP)

다른 팁

사람들이 말하는 중요한 것 TCP 은 당신이 신뢰성이다.하지만 정말 사실입니다.가장 중요한 것은 TCP 당신은 혼잡 제어:를 실행할 수 있습 100TCP 연결을 통해 DSL 링크는 모든 것에는 최대 속도,그리고 모든 100 개의 연결은 생산적이기 때문에,그들은 모두"의미"를 사용할 수 있는 대역폭이 있습니다.도는 약 100 여 개 UDP 응용 프로그램,모든 밀어 패킷을 한 빨리 그들은 갈 수 있습니다,얼마나 잘 볼 것들을 밖으로 작동한다.

큰 규모로,TCP 이 동작을 유지하는 것이 인터넷에서 잠금으로"혼잡 collapse".

일 경향이 있는 푸시 응용 프로그램으로 UDP:

  • 그룹 전달의 의미:그것은 가능한 신뢰할 수 있는 배달하는 그룹의 사람들 보다 훨씬 더 효율적으로 TCP 의 포인트-투-포인트 인정합니다.

  • Out-of-order 납품:에 많이 응용 프로그램의는 한,당신은 모든 데이터를 얻을,당신은 걱정하지 않는 어떤 순서로 도착에서;을 줄일 수 있는 응용 프로그램-수준의 지연에 의해 수락하기 위해 블록입니다.

  • 불친절 때문에 마음이:LAN 에서 당신은 당신에 대해 관여하지 않을 수도 있습는 경우 웹 브라우저의 기능을 멋지게 만큼 당신이 블리팅 업데이트 네트워크를 최대한 빨리 당신이 가능하게 할 수 있습니다.

하지만 경우에 당신의 성능,당신은 아마도 가고 싶지 않으로 UDP:

  • 당신이 후크에 대한 신뢰도,지금은 많은 것을 수도 있습을 구현하기 위해 수행하는 신뢰할 수 있는 끝나 느린 것보다 이미 TCP 않습니다.

  • 지금 당신은 당신 네트워크-비우호적인 문제를 일으킬 수 있는 공유되는 환경입니다.

  • 가장 중요한 것은,방화벽 차단 됩니다.

할 수 있는 잠재적으로 일부를 극복하기 위해 TCP 성능과 지연 문제점으로"중계"여러 TCP 연결이 함께;iSCSI 이 주변에 얻을 혼잡 제어에 로컬 영역 네트워크,하지만 당신은 또한 그것을 만드 대기 시간이 짧은"긴급한 메시지"채널(TCP 의"긴급한"행동은 완전히 깨진).

일부 애플리케이션에서 TCP 은 빨리(처리)보다 UDP.

이 경우 수행 할 때 많은 작은 씁니다 상대적 MTU 크기입니다.예를 들어,내가 읽는 실험이 있는 스트림의 300 바이트 패킷을 전송되었 over Ethernet(1500 바이트 MTU)및 TCP 었다 50%더 빠르게 UDP.

는 이유이기 때문에 TCP 시도하고 데이터를 버퍼링하고 채우는 전체 네트워크 세그먼트에 따라서 더 효율적으로 사용할 수 있는 대역폭.

UDP 에서 다른 손을 넣 패킷 와이어에 즉시 따라서 충혈되는 네트워크의 많은 작은 하나입니다.

당신은 아마 없을 UDP 를 사용하지 않는 한 당신은 매우 특별한 이유입니다.특히 이후 줄 수 있는 TCP 같은 종류의 지연으로 UDP 화 Nagle algorithm (예를 들어 당신은 전송 실시간 센서 데이터와 당신에 대해 걱정하지 않 충혈되는 네트워크의 작은 패킷).

과 함께 손실 관대한

당신은"의 손실을 가진 허용"?

기본적으로,UDP 지 않은"손실 관".을 보낼 수 있습 100 패킷을 사람들을받을 수 있습니 95 그들의 패킷으며,일부 수 있습니까?

같은 것들에 대한 비디오 스트리밍 및 멀티 플레이어 게임을,그것은 더 나은 미 패킷하는 것보다 지연이 모든 다른 패킷의 뒤에 그것을,이것은 분명한 선택

대부분의 다른 일을 하지만,누락 또는'재배열'패킷은 중요합니다.당신이 쓰는 몇 가지 추가 코드에서 실행하는 최고의 UDP 하는 경우 다시 시도 일어 놓친,적용하고 올바른 순서를 지정할 수 있습니다.이것은 추가 작은 비트는 오버헤드의 특정 장소에서.

다행히도,아주 아주 똑똑한 사람들이 이런 짓을했는지,그리고 그들은 그것 TCP.

이런 식으로 생각:는 경우에는 패킷가 누락,오히려 그냥 다음의 패킷으로 가능한 한 빨리 그리고 계속(사용 UDP),또는 당신은 실제로는 누락된 데이터(TCP).오버헤드를 중요하지 않을 것이지 않는 한 당신이 정말로 가장자리-case scenario.

는 프로토콜 수행하는 더 나은(측면에서의 처리)-UDP,TCP 에 따라 달라집 네트워크적 특성 및 네트워크 트래픽이 있습니다.Robert S.Barnes,예를 들어,포인트는 시나리오 TCP 수행하는 더 나은(작은 크기의 씁니다).지금,시나리오를 생각해 보십시오 네트워크는 혼잡하고 있는 TCP 와 UDP 트래픽이다.보내는 사람이 네트워크를 사용하고 있는 TCP,을 감는'정체'와 줄이려는 그들의 전송 요금입니다.그러나,UDP 없는 혼잡을 회피 또는 혼잡 제어 메커니즘,그리고 보낸 사람을 사용하여 UDP 계속 펌프에서 데이터에서 동일한 비율.점차적으로,TCP 보낸 사람을 줄일 것이 자신의 전송 요금을 최소한으면 UDP 를 보낸 사람은 충분한 데이터를 전송 네트워크를 통해,그들이 돼지의 대부분은 대역폭을 사용할 수 있습니다.그래서,그와 같은 경우에,UDP 보낸 사람을 더욱 처리량으로,그들은 큰 파이 네트워크의 대역폭이 있습니다.사실,이 활성 연구 주제를 개선하는 방법 TCP 처리 속에서 존재의 UDP 트래픽이다.방법 중 하나,내가 알고 있는 사용,TCP 응용 프로그램 처리량을 향상 시킬 수 있는 열 여러 TCP 연결이 있습니다.는 방법도 하지만,각 TCP 연결의 처리량을 제한 될 수 있습니다,의 총액의 처리량 모든 TCP 연결이 보다 큰 수 있습에 대한 처리량을 사용하여 응용 프로그램 UDP.

각 TCP 연결이 필요하는 초기 데이터 교환하기 전에 데이터가 전송됩니다.또한,TCP 헤더를 포함한 많은 오버헤드도에 대한 다양한 신호와 메시지가 전달을 탐지합니다.에 대한 메시지 교환,UDP 것입니다 아마도 충분할 경우 작은 실패할 확률이 허용됩니다.는 경우에는 영수증 확인해야 합니다,TCP 는 당신의 최선의 선택입니다.

@앤드류, 에,나는 다릅니다.UDP 를 선택에서 어떤 종류의 응용 프로그램 때문에 성능 요구 사항입니다.그 중에는 비디오 회의.이러한 종류의 응용 프로그램을 잘 반응하지 않는 TCP 제어합니다.

다른 측면에서 고려하려면 필요한 멀티 캐스트입니다.그렇다면 UDP 를 사용 합니다.

의 말할 때 무엇인가"빠른"-적어도 두 개의 매우 다양한 측면:처리량 및 대기 시간이 길어집니다.

는 경우에 대해 말하기 처리량 -TCP 의 흐름제어(에서 언급했듯이 다른 답변),은 매우 중요하고도 비교 UDP,확실히 가능한 것,큰 두통(tm).결과적으로 사용하 UDP 필요할 때 처리량, 거의 자격으로 좋은 생각이 아니다(당신이 원하지 않는 부당한 이익을 얻으 TCP).

그러나,경우에 대해 말하기 대기 시간 -모든 것은 완전히 다른 것입니다.면의 부재에서 패킷 손실에는 TCP 와 UDP 행동하는 매우 유사한(어떤 차이,어떤 경우는 한계)-후면 패킷 분실,전체 패턴이 크게 변화.

후에도 패킷을 상실,TCP 대기전에 최소한 200ms(1sec 절당의 2.4RFC6298 지만,실제 현대적인 구현하는 경향이 있기 위하여 그것을 감소시키십시오 200ms).또한,TCP,심지어는 패킷았다 목적지에 도달트-이 전달되지 않는 앱까지 누락된 패킷이 수신(예,전체적인 통신이 지연된 때에는~200ms)-BTW,이 효과로 알려진 머리의-라인을 차단하는 고유한 모든 믿을 수 있는 주문 스트림,TCP 또는지 여부를 신뢰할 수 있+주문 UDP.상황이 더 악화 할 경우 재전송 패킷은 또한 분실,다음 우리는 우리 것에 대해 말하는 지연의~600ms(으로 인해 소위 지수 백오프,1st 재전송은 200ms,그리고 두 번째는 200*2=400ms).는 경우 우리의 채널은 1%패킷 손실(이 나쁘지 않은 오늘날의 기준),그리고 우리는 게임으로 20 업데이트를 초당 등 600ms 지연이 발생에 평균 8 분 거리에 있습니다.로 600ms 은 더 이상 얻을 충분히 당신을 죽에서 빠르게 진행되는 게임-만,그것은 나쁜 것에 대한 게임입니다.이러한 효과는 이유를 정확하게 gamedevs 자주아보세요 UDP TCP.

그러나 사용하는 경우 UDP 을 줄이는 대기 시간다-그것을 깨닫는 것이 중요하다는 단순한"사용 UDP"충분하지 않을 얻을 상당한 지연,개선하는 방법에 대한 모든 것입 당신이 사용하 UDP.특히,동 RUDP 라이브러리는 일반적으로 피하는"지수 backoff"사용 짧은 다시 전송 시간-는 경우에는 그 사용을"믿을 수 있는 주문한"스트림,그들은 여전히 고통을 겪어야에서의 헤드 라인을 차단(의 경우에는 그래서 더블 패킷을 상실,대신 600ms 리 약 1.5*2*RTT-또는 아주 좋은 80ms RTT,그것은~250ms 지연하는 개선이지만,그것은 여전히 가능하지 더 낫다).다른 한편,사용하는 경우 기술 설명서 http://gafferongames.com/networked-physics/snapshot-compression/ 그리고/또는 http://ithare.com/udp-from-mog-perspective/#low-latency-compression 능을 제거하의 헤드 라인을 차단 전적으로(그래서 더블 패킷을 상실한 게임과 함께 20 업데이트/초,지연 될 것입니다 100ms 에 관계없이 RTT).

과로 측 참고-당신은 당신의 일에만 액세스할 수 있습니다 TCP 하지만 UDP(와 같은 브라우저에서,또는 당신의 클라이언트의 6-9%의 추악한 방화벽을 차단하는 UDP)-가 을 구현하는 방법 UDP over-TCP 을 들이지 않고 너무 대기 시간,여기를 참조하십시오: http://ithare.com/almost-zero-additional-latency-udp-over-tcp/ (를 읽을 수 있는지 확인한 의견도(!)).

필요한 경우 빠르게 메시지가 그물에 걸쳐 두는 IP 지도 않은 이야기는 아직 후,UDP 도착할 것입니다 3 배 이상 빠르게,일반적으로 5 배나 더 빨라졌습니다.

UDP 를 약간 더 빨리 내 경험에 의지할 수있는 매우 간단한 방법입니다.선택하지 말아야에 만들어진 성능 하지만 메시지 내용을 압축 기술이 있습니다.

는 경우에 그 프로토콜지 exchange, 에,나는 아주 약간의 성능 저하와 함께 TCP 보다 더 가치가있다.당신은 주어진 사이의 연결을 두 가지 엔드 포인트를 줄 것이다 당신은 모든 것이 당신이 필요합니다.하려고하지 않고 제조하 당신 자신의 믿을 수 있는 방법을 두 프로토콜에서 상단의 UDP 지 않는 한 당신은 정말,정말 자신 사업이다.

음을 유의하 TCP 일반적으로 유지하 여러 메시지에서 와이어입니다.을 구현하려는 경우 이에 UDP 당신은 확실히 많은 작업을 수행하려는 경우 안정적으로 그것.귀하의 솔루션 중 하나가 될 것은 신뢰성,더 적은 빠르게 또는 엄청난 양의 작동합니다.가 유효한 응용 프로그램의 UDP,하지만 경우에 당신은 이 질문을 당신은 아마 없습니다.

나는 그냥 만들 것이 분명하다. TCP/UDP 은 두 개의 자동차가 구동되는 것에 도로입니다.가는 교통 표지판 및 장애물에는 오류 TCP 에 대한 관심이 교통 표지판 측면 주위의 모든 것을.천천히 운전하기 때문에 뭔가가 발생할 수 있습니다.동 UDP 그냥 드라이브,전체 속도를 존중하는 거리 표지판입니다.아무것도 미친 드라이버입니다. UDP 가 없는 오류 복구가 있는 경우에 장애물,그것은 단지와 충돌 그 다음 계속합니다.동 TCP 모든 패킷을 전송 및 수신은 완벽하게,오류가 없다,그래서,자동차로 전달 장애물 없이에 충돌.이 좋은 예를 들어 당신을 위한 이유 UDP 은 선호도 있습니다.게임의 요구 속도입니다. TCP 은 기본서 다운로드,또는 다운로드 한 파일이 손상될 수 있습니다.

가 있었다 몇 가지 작업을 수행하도록 허용하는 프로그래머의 장점을 가지고 있습니다.

SCTP

그것은 독립적 인 전송 계층 protolol 지만,그것으로 사용할 수 있는 라이브러리 제공하는 추가적인 레이어를 UDP.기본적인 단위의 커뮤니케이션 메시지(매핑을 하나 이상의 UDP 패킷).이 혼잡 제어에 내장되어 있습니다.프로토콜는 손잡이 및 twiddles 전환

  • 기 위해서 메시지를 전달하고
  • 자동 재전송 손실 메시지와 함께,사용자 정의된 매개변수

이 모든 이에 필요한 특정 응용 프로그램.

하나의 문제는 연결이 설립은 복잡한(그리고 그러므로 느리 프로세스)

기타 유사한 물건

하나 더 많은 유사한 독자적인 실험적인 일

이것은 또한 개선하려고 트리플 방법으로 핸드쉐이크의 TCP 및 변경 혼잡을 제어하는 더 나은 거래를 빠르게 라인입니다.

그것은 의미에 대해 이야기 TCP 또는 UDP 하지 않고 네트워크 조건이 있습니다.네트워크 사이에 두 개의 지점을 매우 높은 품질,UDP 은 절대적으로보다 더 빨리 TCP,그러나 일부 다른 경우 같은 GPRS 네트워크,TCP 수 있었다 더 빠르고 신뢰성보다 UDP.

네트워크 설정은 매우 중요한 측정합니다.그것은 큰 차이를 만들고,있다면 의사 소통을 통해 소켓는 로컬 컴퓨터에서 또 다른 세상의 끝.

세 가지를 추가할 토론:

  1. 찾을 수 있습니다 매우 좋은 기사에 대한 TCP 대UDP 에 컨텍스트의 게임 개발.
  2. 또한, iperf (jperf 강화 iperf 로 GUI)가 매우 좋은 도구에 대한 질문에 대답하여 자신을 측정 합니다.
  3. 내가 구현한 벤치마크에서는 파이썬(참조하십시오 이렇게 질문).에서는 평균의 10^6 번 반복의 차이를 보내 8 바이트가 약 1~2 마이크로초 단위로 UDP.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top