为什么UDP在有损网络中与TCP相比表现良好

时间:2015-08-06 07:19:22

标签: tcp udp snmp

我正在浏览以下链接。 Why is SNMP usually run over UDP and not TCP/IP? 我不明白为什么UDP在有损网络中与TCP相比表现良好?请有人澄清一下吗?

3 个答案:

答案 0 :(得分:6)

UDP本身在有损网络中表现不佳。 UDP仅用于不同类型的应用程序:

  • 如果少量数据丢失不是主要问题,您可以使用UDP。这就是为什么UDP被用于实时音频的原因,其中延迟很差,但可以解决一小部分数据丢失问题。它用于syslog或SNMP之类的东西,你可能会丢失一些数据。
  • 如果您需要可靠的数据传输,即不丢失数据,则TCP更好,因为它确认所有接收的数据并将重新传输丢失的数据包。因此,TCP用于Web,邮件传输等。

除了TCP和UDP都不是为丢包率高的网络设计的。由于拥塞等原因,他们都期望小包丢失,并期望底层(即以太网,WLAN ......)处理主要的传输问题。

答案 1 :(得分:1)

首先,由于这个问题是关于网络而不是编程,所以它并不属于这里 - 无论如何;

TCP是比UDP更慢,更可靠的协议。相比之下,UDP更快更有效。例如,TCP有更多的标志(window-length,syn,ack等) - 并且还以非常稳定的方式启动和结束连接 - Three way handshake -,而所有UDP都是源IP,dest IP, length,源端口,dest端口和校验和。

为了发送所有这些额外的数据包来开始和结束连接,并且每个数据包的验证过程需要时间 - 而UDP是一个数据流,并不介意丢失几个字节在这里和那里,TCP是一种可靠的协议 - 反过来需要更长的时间并且效率更低。

这是一个非常笼统的解释 - 我强烈建议你read more.

答案 2 :(得分:0)

TCP: 在协议栈的较低级别,由于网络拥塞,流量负载平衡或其他不可预测的网络行为,IP分组可能丢失,重复或无序传送。 TCP检测到这些问题,请求重新传输丢失的数据,重新排列无序数据,甚至有助于最小化网络拥塞,以减少其他问题的发生。如果数据仍然未送达,则会向其来源通知此失败。一旦TCP接收器重新组装了最初发送的八位字节序列,它就将它们传递给接收应用程序。因此,TCP从底层网络细节中抽象出应用程序的通信。 TCP被优化用于准确传送而不是及时传送,因此,TCP有时会在等待无序消息或丢失消息的重传时产生相对长的延迟(大约几秒)。它不是特别适用于IP语音等实时应用。对于此类应用程序,通常建议使用通过用户数据报协议(UDP)运行的实时传输协议(RTP)等协议。 (来源维基百科)

SNMP通过UDP进行实时监控。

有关上下文的解释 http://confessionsofalinuxpenguin.blogspot.in/2012/11/udp-or-tcp-for-lossy-networks.html

获取snmp数据详细信息。有关有损网络中tcp vs udp的一些图表 http://www.ietf.org/proceedings/72/slides/opsarea-2.pdf