문제

왜 UDP가 TCP 대신 RTP에서 사용되는지 알고 싶었습니다. 주요 VoIP 도구는 일부 VoIP OSS를 해킹하면서 UDP 만 사용했습니다.

도움이 되었습니까?

해결책

DJ가 지적한 바와 같이, TCP는 신뢰할 수있는 데이터 스트림을 얻는 것에 관한 것이며, 전송 속도를 늦추고,이를 달성하기 위해 손상된 패킷을 다시 전송합니다.

UDP는 통신의 신뢰성을 신경 쓰지 않으며 데이터 속도를 늦추거나 다시 전송하지 않습니다.

응용 프로그램에 신뢰할 수있는 데이터 스트림이 필요한 경우 웹 서버에서 파일을 검색하기 위해 TCP를 선택합니다.

응용 프로그램이 손상되거나 손실 된 패킷에 신경 쓰지 않고 추가 신뢰성을 제공하기 위해 추가 오버 헤드가 발생할 필요가 없다면 대신 UDP를 선택할 수 있습니다.

신뢰할 수있는 패킷 변속기에 의해 VoIP가 크게 향상되지 않으며, 실제로 재전송 및 지수 백 오프와 같은 TCP의 경우 실제로 VoIP 품질을 손상시킬 수 있습니다. 따라서 UDP는 더 나은 선택이었습니다.

다른 팁

많은 좋은 답변이 주어졌지만, 한 가지를 명시 적으로 지적하고 싶습니다.

기본적으로 완전한 데이터 스트림은 실시간 오디오/비디오에 좋은 것이지만, 다른 사람들이 지적했듯이 엄격히 필요하지 않습니다.

중요한 사실은 너무 늦게 도착한 일부 데이터는 무가치하다는 것입니다. 두 번째로 표시되어야 할 프레임의 누락 된 데이터는 무엇입니까?

TCP를 사용한다면 (모든 데이터의 올바른 순서도 보장) 이전 데이터가 올바르게 전송 될 때까지 최신 데이터를 얻을 수 없습니다. 이것은 이중 나쁘다 : 이전 데이터의 재 전송을 기다려야한다. 그리고 새로운 데이터 (현재 지연된)는 아마도 쓸모가 없을 것입니다.

따라서 RTP는 사용 가능한 모든 데이터를 제 시간에 전송하려고하지만 전송 중 손실/손실 된 데이터를 다시 전송하려고 시도하지 않는다는 점에서 일종의 최고의 효과 전송을 수행합니다 (*). 그것은 단지 삶과 함께 진행되며 더 중요한 현재 데이터가 올바르게 진행되기를 희망합니다.

(*) 실제로 나는 RTP의 세부 사항을 모른다. 어쩌면 다시 전송하려고 시도 할 수도 있지만, 그렇다면 TCP만큼 공격적이지 않을 것입니다 (손실 된 데이터를 허용하지 않습니다).

다른 사람들은 정확하지만 실제로 이유를 말하지는 않습니다. Saua는 그것에 대한 힌트를 주지만 여기에 더 완전한 대답이 있습니다.

오디오와 비디오는 실시간입니다. 라디오를 듣거나 TV를 보면서 신호가 중단되는 경우, 중단 된 곳에서 픽업되지 않습니다. 신호가 스트리밍되는 것처럼 "관찰"하고 관찰 할 수없는 경우 주어진 시간에 당신은 그것을 잃습니다.

그 이유는 간단합니다. 지연. VoIP는 누군가가 한쪽 끝에 말하고 당신이 당신의 끝에 그것을 얻을 때부터 지연의 양을 최소화하기 위해 매우 열심히 노력합니다. 그렇지 않으면, 오류가 발생함에 따라, 사람이 말할 때와 신호를받을 때의 지연의 양은 쓸모 없게 될 때까지 지속적으로 자랄 것입니다.

재전송의 각 지연을 재생해야하므로 추가 데이터가 지연되면 다른 오류로 인해 더 큰 지연이 발생합니다. 실행 가능한 유일한 솔루션은 실시간으로 표시 할 수없는 모든 데이터를 단순히 삭제하는 것입니다.

재전송에서 1 초 지연되면 이제 내가 말할 때까지 1 초가 될 것입니다. 두 번째 1 초 지연은 이제 내가들을 때까지 내가 말할 때부터 2 초입니다. 데이터가 말하는 것과 같은 속도로 다시 재생되기 때문에 이것은 누적입니다.

RTP는 연결 지향적 일 수 있지만, 어쨌든 재전송 오류를 유지하기 위해 데이터를 삭제 (또는 건너 뛰기)해야하므로 왜 여분의 오버 헤드를 귀찮게합니까?

기술적으로 RTP 패킷은 TCP 연결을 통해 인터리브 될 수 있습니다. 여기에는 많은 훌륭한 답변이 있습니다. 두 개의 추가 사소한 점 :

RFC 4588은 RTP 데이터와 함께 재전송을 어떻게 사용할 수 있는지 설명합니다. RTP 스트림을 수신하는 대부분의 클라이언트는 일반적으로 1-5 초 길이의 네트워크에서 지터를 설명하기 위해 버퍼를 사용하며, 이는 원하는 데이터를 수신하기 위해 재전전을 사용할 수있는 시간이 있음을 의미합니다.

RTP 트래픽은 TCP 연결을 통해 인터리브 될 수 있습니다. 실제로이 작업이 수행 될 때, 인터리브 된 RTP (즉, TCP를 통한)와 RTP의 차이는 UDP를 통해 보낸 RTP의 차이점은 사용자가 사용할 수있는 불충분 한 대역폭을 갖춘 손실 된 네트워크를 통해이 두 가지를 수행하는 방법입니다. 인터리브 된 TCP 스트림은 플레이어가 패킷이 도착하기 위해 버퍼링 상태에서 지속적으로 기다리면서 육포됩니다. 플레이어에 따라 따라 잡을 수 있습니다. RTP 연결을 사용하면 비디오에서 아티팩트 (번짐/찢어짐)가 나타납니다.

UDP는 종종 유용하기 위해 엄격한 주문이 필요하지 않은 다양한 유형의 실시간 트래픽에 사용됩니다. TCP는 데이터를 애플리케이션으로 전달하기 전에 주문을 시행하여 (기본적으로 URG 포인터를 설정하여이를 해결할 수 있지만 아무도이 작업을 수행하지 않는 것 같습니다). 오히려 오래된 데이터를 안정적으로 얻는 것보다 현재 실시간 데이터를 얻습니다.

RTP는 패킷 손실에 상당히 무의미하므로 TCP의 신뢰성이 필요하지 않습니다.

UDP는 헤더에 대한 오버 헤드가 적으므로 하나의 패킷이 더 많은 데이터를 전달할 수 있으므로 네트워크 대역폭이보다 효율적으로 활용됩니다.

UDP는 빠른 데이터 전송도 제공합니다.

따라서 UDP는 이와 같은 경우에 명백한 선택입니다.

다른 모든 것 외에도 친절하고 정답 이 기사 TCP와 UDP의 차이점에 대해 잘 이해합니다.

UDP는 데이터를 보내는 곳마다 사용되거나 대상에서 정확하게 수신 할 필요가 없거나 안정적인 연결이 필요하지 않은 경우 사용됩니다.

데이터를 정확하게 수신 해야하는 경우 TCP가 비트, 비트 손실없이 사용됩니다.

비디오 및 사운드 스트리밍의 경우 도중에 손실되는 일부 비트는 결과에 영향을 미치지 않습니다. 언급 할 수 있습니다. 일부 픽셀은 스트림 사진에서 실패하고 사용자에게 영향을 미치는 것은 없습니다. 더 높은.

단지 언급 : RTP 스트림으로 전송 된 각 패킷은 전임자보다 높은 1 위를 차지합니다. 패킷이 잘못 이루어지면 대상이 취하는 최선의 조치는 보간에 의해 누락 된 vaue를 근사화하는 것입니다. 재전송은 재전송 된 패킷이 너무 늦어서 유용하기 때문에 고장 옵션이 아닙니다.

Stobor의 답변에 대한 응답으로 Matt H가 말한 것에 신속하게 추가하고 싶습니다. Matt H는 UDP 패킷을 통한 RTP가 체크 스ume을 할 수있어 손상되면 분개 할 수 있다고 언급했습니다. 이것은 실제로 대부분의 PBX의 선택적 기능입니다. 예를 들어 Asterisk에서는 다음 줄이있는 rtp.conf 구성 파일의 UDP 트래픽을 통해 RTP에서 체크섬을 활성화 / 비활성화 할 수 있습니다.

rtpchecksums=yes ; or no if you prefer

건배!

실시간 전송 프로토콜은 인터넷을 통해 스트리밍 오디오 및 비디오 미디어를 전달하는 데 사용되는 네트워크 프로토콜로, VoIP (Voice over Internet Protocol)를 가능하게합니다.

RTP는 일반적으로 네트워크 전체에 연결을 설정하는 SIP와 같은 신호 프로토콜과 함께 사용됩니다. RTP 응용 프로그램은 TCP (Transmission Control Protocol)를 사용할 수 있지만 대부분 UDP가 데이터를 더 빠르게 전달할 수 있기 때문에 대부분 UDP (User Datagram Protocol)를 사용합니다.

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