我正在浏览以下链接。 Why is SNMP usually run over UDP and not TCP/IP? 我不明白为什么UDP在有损网络中与TCP相比表现良好?请有人澄清一下吗?
答案 0 :(得分:6)
UDP本身在有损网络中表现不佳。 UDP仅用于不同类型的应用程序:
除了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