我想知道为什么RTP中使用UDP而不是TCP?主要 VoIP 工具仅使用 UDP,因为我破解了一些 VoIP OSS。

有帮助吗?

解决方案

作为DJ指出,TCP是关于得到可靠的数据流,并且将减缓传输,并重新发送损坏的分组,以实现这一点。

UDP不关心通信的可靠性,而且不会减缓或重新发送数据。

如果你的应用需要一个可靠的数据流,例如,从网络服务器检索文件,选择TCP。

如果您的应用程序并不关心损坏或丢失的数据包,而你并不需要花费的额外开销,提供额外的可靠性,您可以选择UDP来代替。

VOIP不被可靠分组传输显著改善,并且在事实上,在TCP一些情况之类的东西重传和指数退避实际上可以伤害VOIP质量。因此,UDP是一个更好的选择。

其他提示

很多很好的答案已经给出,但我想指出一点了明确的:

基本上完整的数据流是有实时音频/视频一件好事,但它不是绝对必要(正如其他人所指出的):

一个重要的事实是,一些到达太晚数据是毫无价值的。什么好是应该已被显示在一秒钟前一帧丢失的数据?

如果你使用TCP(也保证了所有数据的正确顺序),那么你就不能到旧的正确发送至得到越涨最新数据。这是极为糟糕:你必须等待旧的数据的的新的数据(也就是现在延迟)可能会是一样毫无价值

的重新传输。

所以,RTP做一些实物,它试图在一次传输的全部信息尽力而为传输,但不尝试重新发送已转移(*)期间丢失/损坏的数据。它只是对生命和希望,更重要的当前数据到达那里正确。

(*)其实我不知道RTP的细节。也许它并尝试重新发送,但是,如果是的话那么它不会像侵略性如TCP是(这永远不会接受任何丢失的数据)。

其他人是正确的,但并没有真正告诉你真正的原因。Saua 对此有所暗示,但这里有一个更完整的答案。

音频和视频是实时的。如果您正在听广播或看电视,并且信号中断,它不会从您上次中断的地方继续播放。您只是在信号流时“观察”信号,如果您无法在任何给定时间观察到它,您就会丢失它。

原因,很简单。延迟。VOIP 非常努力地尽量减少从某人向一端讲话、您在另一端收到语音以及您回复的延迟时间。否则,随着错误的发生,从说话到收到信号之间的延迟量会不断增加,直到变得毫无用处。

请记住,每次重传造成的延迟都必须重播,这会导致进一步的数据延迟,然后另一个错误会导致更大的延迟。唯一可行的解​​决方案是简单地删除所有无法实时显示的数据。

重传延迟 1 秒意味着从我说某件事到你听到它现在需要 1 秒。现在,第二个 1 秒延迟意味着从我说某件事到您听到它有 2 秒。这是累积的,因为数据以与说出数据相同的速率播放,等等......

RTP 可以是面向连接的,但无论如何它都必须丢弃(或跳过)数据以跟上重传错误,所以为什么要费心额外的开销呢?

技术上RTP分组可以被交织在一个TCP连接。那里有许多给予极大的答案。另外两个小点:

RFC 4588描述了一个如何使用与重发的RTP数据。接收RTP流大多数客户端采用一个缓冲器以考虑是通常1-5秒长,这意味着网络中的抖动存在可用时间重发到接收所需的数据。

RTP业务能够被交织在一个TCP连接。在实践中这样做时,交错RTP(即通过TCP)和RTP之间的差发送的UDP是如何这两个与可用于用户带宽不足执行通过有损网络。交错的TCP流最终会被生涩的球员处于缓冲状态继续等待数据包到达。根据不同的玩家可以直接跳到赶上。随着RTP连接您将获得在视频假象(涂抹/撕裂)。

UDP通常用于各种类型的,这并不需要严格的排序是有用的实时业务的。这是因为TCP将数据传递给应用程序之前强制排序(默认情况下,你可以通过设置URG指针解决这个问题,但似乎没有人曾经做到这一点),并且可以在一个环境是极不可取的,你会而获得当前的实时数据比可靠地获取旧数据。

RTP是相当不敏感的数据包丢失,所以它不需要TCP的可靠性。

UDP具有用于报头开销更少,使得一个包可以携带更多的数据,因此网络带宽利用效率更高。

UDP提供快速的数据传输也

所以UDP是在箱子明显的选择,如本

除了所有其他的好和正确答案 提供有关TCP和UDP之间的差异有很好的了解。

UDP被用于任何数据被发送,这并不需要在目标被精确地接收,或者不需要稳定的连接,其中

如果数据需要被精确地接收,比特对位,无位的损失TCP被使用。

有关视频和音频流,即在途中失去了一些位不影响结果的方式,那就是值得一提的,一些像素流中的照片,没有什么会影响用户,在DVD上丢失的故障比特率也较高。

只是一个备注: 在RTP流发送的每个数据包被赋予一个头号比其更高predecessor.This允许THR目的地,以确定是否任何分组丢失。 如果一个包mising,为目标采取最好的行动是由插值近似失踪vaue。 Retranmission不是proctical的选择,因为重传的分组将是太迟是有用的。

我想迅速补充什么马特的H响应Stobor的回答说。马特^ h提到,RTP在UDP数据包可以checksum'ed所以,如果他们被损坏,他们将得到反感。这实际上是在大多数PBX的可选功能。在星号,例如,您就能够在与以下行rtp.conf配置文件中的RTP通过UDP流量/禁用校验:

rtpchecksums=yes ; or no if you prefer

干杯!

在实时传输协议是用于传送流式音频和视频媒体在互联网上,从而使得互联网语音协议(VoIP)。网络协议

RTP通常使用的信令协议,如SIP,其设置在网络上的连接。 RTP应用程序可以使用传输控制协议(TCP),但大多数使用用户数据报协议(UDP),而不是因为UDP允许更快的数据传送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top