为什么 UDP 在有损网络中表现优于 TCP

Why UDP behave well compare to TCP in a lossy network

我正在经历以下 link。 Why is SNMP usually run over UDP and not TCP/IP? 我不明白为什么 UDP 在有损网络中比 TCP 表现更好?有人可以澄清一下吗?

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

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

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

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

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 与 udp 的一些图表 http://www.ietf.org/proceedings/72/slides/opsarea-2.pdf

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

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

除此之外,TCP 和 UDP 都不是为丢包率高的网络设计的。他们都希望由于拥塞等原因导致少量数据包丢失,并希望底层(即以太网、WLAN 等)处理主要的传输问题。