关于网络:UDP vs TCP,速度快多少?

关于网络:UDP vs TCP,速度快多少?

UDP vs TCP, how much faster is it?

对于一般协议消息交换,可以忍受某些数据包丢失。 UDP比TCP效率高多少?


人们说TCP给您的主要好处是可靠性。但这不是真的。 TCP给您的最重要的东西是拥塞控制:您可以在一条DSL链路上以最大速度运行100个TCP连接,而所有100个连接都将"富有成效",因为它们都"感知"了可用带宽。尝试使用100种不同的UDP应用程序,所有应用程序都以最快的速度推送数据包,并查看如何为您解决问题。

从更大的角度来看,这种TCP行为是阻止Internet陷入"拥塞崩溃"的原因。

倾向于将应用程序推向UDP的事情:

  • 组传递语义:与TCP的点对点确认相比,可以高效地向一群人进行可靠的传递。

  • 无序交付:在许多应用程序中,只要获得所有数据,您就不必关心它按什么顺序到达;您可以通过接受乱序阻止来减少应用程序级延迟。

  • 不友好:在局域网上,只要您尽可能快地向网络发布更新,您可能就不会在乎您的Web浏览器是否运行良好。

但是,即使您关心性能,也可能不想使用UDP:

  • 您现在已经对可靠性产生了很大的兴趣,而为实现可靠性而可能要做的许多事情最终都会比TCP已经完成的速度慢。

  • 现在,您对网络不友好,这可能会在共享环境中引起问题。

  • 最重要的是,防火墙将阻止您。

通过将多个TCP连接"中继"在一起,可以潜在地克服某些TCP性能和延迟问题。 iSCSI这样做是为了解决局域网上的拥塞控制,但是您也可以这样做以创建低延迟的"紧急"消息通道(TCP的" URGENT"行为已被破坏)。


在某些应用程序中,TCP比UDP更快(吞吐量更好)。

相对于MTU大小进行大量小写操作时,就是这种情况。例如,我读了一个实验,其中300个字节的数据包流通过以太网(1500字节的MTU)发送,而TCP比UDP快50%。

原因是因为TCP将尝试缓冲数据并填充整个网络段,从而更有效地利用可用带宽。

另一方面,UDP将数据包立即放在线路上,从而使许多小数据包充斥网络。

除非您有非常特殊的原因,否则可能不应该使用UDP。特别是因为您可以通过禁用Nagle算法为TCP提供与UDP相同的延迟(例如,如果您正在传输实时传感器数据,而不必担心会因大量小数据包而使网络拥塞)。


UDP比TCP快,原因很简单,因为它的不存在的确认数据包(ACK)允许连续的数据包流,而不是使用TCP窗口大小和往返时间计算的TCP来确认一组数据包(RTT)。

有关更多信息,我建议简单但容易理解的Skullbox解释(TCP与UDP)


with loss tolerant

您是说"具有损失承受能力"吗?

基本上,UDP不"容忍"。您可以将100个数据包发送给某人,他们可能只会得到其中的95个数据包,而某些数据包的顺序可能不正确。

对于像视频流和多人游戏这样的事情,最好错过一个数据包而不是延迟所有其他数据包,这是显而易见的选择

但是对于大多数其他情况,丢失或"重新排列"的数据包至关重要。您必须编写一些额外的代码才能在UDP之上运行,以便在丢失任何内容时重试并强制执行正确的顺序。在某些地方这会增加一点点开销。

值得庆幸的是,一些非常聪明的人已经做到了,他们称之为TCP。

这样想:如果一个数据包丢失了,您宁愿尽快获取下一个数据包并继续(使用UDP),还是实际上需要该丢失的数据(使用TCP)。除非您处于实际情况,否则开销不会很重要。


哪种协议(在吞吐量方面)表现更好(UDP或TCP)实际上取决于网络特性和网络流量。例如,Robert S. Barnes指出了TCP性能更好(小写)的情况。现在,考虑一种网络拥塞且同时具有TCP和UDP流量的情况。网络中使用TCP的发送方将感知"拥塞"并降低其发送速率。但是,UDP没有任何拥塞避免或拥塞控制机制,并且使用UDP的发送者将继续以相同的速率抽取数据。逐渐地,TCP发送器会将其发送速率降低到最低限度,如果UDP发送器有足够的数据可以通过网络发送,则它们将占用大部分可用带宽。因此,在这种情况下,UDP发送方将获得更大的吞吐量,因为它们获得了更大的网络带宽。实际上,这是一个活跃的研究主题-在存在UDP流量的情况下如何提高TCP吞吐量。我知道,使用哪种TCP应用程序可以提高吞吐量的一种方法是打开多个TCP连接。这样,即使每个TCP连接的吞吐量可能受到限制,所有TCP连接的吞吐量的总和仍可能大于使用UDP的应用程序的吞吐量。


当谈到"更快"时,至少有两个非常不同的方面:吞吐量和延迟。

如果说到吞吐量,那么TCP的流控制(如其他答案中所述)非常重要,并且尽管可以实现与UDP类似的任何操作,但肯定会造成很大的麻烦(tm)。结果是-在需要吞吐量时使用UDP很少会是一个好主意(除非您希望获得与TCP相比的不公平优势)。

但是,如果说延迟,则整个过程完全不同。在没有数据包丢失的情况下,TCP和UDP的行为极为相似(任何差异(如果有的话,都是微不足道的)都是微不足道的)-在数据包丢失之后,整个模式会急剧变化。

在丢失任何数据包之后,TCP将等待至少200ms的重传(RFC6298的2.4段每1sec,但是实际的现代实现往往会将其减少到200ms)。而且,使用TCP,即使那些到达目标主机的数据包也不会被传递到您的应用程序,直到接收到丢失的数据包(即整个通信延迟了约200ms)-顺便说一句,这种效应被称为Head-of线阻塞是所有可靠的有序流(无论是TCP还是可靠+有序UDP)所固有的。更糟糕的是-如果重新发送的数据包也丢失了,那么我们将谈论大约600ms的延迟(由于所谓的指数退避,第一次重新发送为200ms,第二次重新发送为200 * 2 = 400ms)。如果我们的频道有1%的数据包丢失(按照今天的标准,这还不错),并且我们的游戏每秒更新20次,那么平均每8分钟就会发生600ms的延迟。 600毫秒足以让您在快节奏的游戏中丧命-嗯,这对游戏玩法来说是非常糟糕的。这些效果正是游戏开发人员通常更喜欢UDP而不是TCP的原因。

但是,使用UDP减少延迟时-必须认识到仅"使用UDP"不足以显着改善延迟,这一点很重要,这与您使用UDP的方式有关。特别是,尽管RUDP库通常避免"指数退避"并使用较短的重传时间-如果将它们用作"可靠的有序"流,它们仍将遭受行头阻塞(因此如果出现双重阻塞)数据包丢失,而不是600毫秒,我们将获得约1.5 * 2 * RTT-或相当好的80毫秒RTT,这是?250毫秒的延迟,这是一个改进,但仍有可能做得更好。另一方面,如果使用http://gafferongames.com/networked-physics/snapshot-compression/和/或http://ithare.com/udp-from-mog-perspective/#low-latency-中讨论的技术压缩,可以完全消除"线头"阻塞(因此,对于每秒更新20次的游戏,如果双包丢失,则无论RTT如何,延迟均为100毫秒)。

另外,如果您碰巧只能访问TCP而不能访问UDP(例如,在浏览器中,或者您的客户端位于阻止UDP的6-9%的丑陋防火墙之一的后面),则似乎有一种方法实现UDP-over-TCP而不会产生太多延迟,请参见此处:http://ithare.com/almost-zero-additional-latency-udp-over-tcp/(确保也阅读注释(!))。


每个TCP连接都需要进行初始握手,然后才能传输数据。另外,TCP头包含许多用于不同信号和消息传递检测的开销。对于消息交换,如果可以接受很小的失败机会,UDP可能就足够了。如果必须验证收货,TCP是您的最佳选择。


@安德鲁,我求同。由于性能要求,UDP是某些应用程序的选择。一个典型的例子是视频会议。这种应用程序不能很好地响应TCP控制。

要考虑的其他方面是您是否需要多播。如果是这样,请使用UDP。


如果您需要在两个甚至还没有通话的IP之间通过网络快速传播消息,那么UDP的到达速度至少要快3倍,通常快5倍。


我只是把事情弄清楚。 TCP / UDP是在道路上行驶的两辆汽车。假设交通标志和障碍是错误TCP关心交通标志,尊重周围的一切。行驶缓慢,因为汽车可能会发生故障。虽然UDP只是开走,但全速不考虑路牌。没什么,一个疯子司机。 UDP没有错误恢复,如果有障碍,它将与它发生冲突然后继续。尽管TCP确保所有数据包都能完美地发送和接收,但没有错误,因此,汽车只是越过障碍物而不会发生碰撞。我希望这是一个很好的例子,您可以理解,为什么在游戏中首选UDP。游戏需要速度。允许进行TCP下载,否则下载的文件可能已损坏。


根据我的经验,UDP的速度稍快一些,但速度并不快。选择不应该基于性能,而是取决于消息内容和压缩技术。

如果它是带有消息交换的协议,我建议您使用TCP带来的轻微性能损失是值得的。您将获得两个端点之间的连接,这将为您提供所需的一切。除非您对所做的事情非常有信心,否则请不要尝试在UDP之上制造自己的可靠双向协议。


已经进行了一些工作,以使程序员能够同时受益于这两个世界。

计划

它是一个独立的传输层协议,但可以用作提供UDP附加层的库。通信的基本单位是一条消息(映射到一个或多个UDP数据包)。内置拥塞控制。协议中有旋钮和旋转键可打开

  • 为了传递消息
  • 使用用户定义的参数自动重新传输丢失的消息

如果您的特定应用程序需要任何这些。

一个问题是连接建立是一个复杂的过程(因此过程很慢)

其他类似的东西

  • https://zh.wikipedia.org/wiki/Reliable_User_Datagram_Protocol

另外一项类似的专有实验项目

  • https://zh.wikipedia.org/wiki/QUIC

这也试图改善TCP的三重握手方式,并更改拥塞控制以更好地处理快速线路。


请记住,TCP通常会在线保留多个消息。如果要在UDP中实现此功能,并且要可靠地执行,则需要进行大量工作。您的解决方案要么可靠性降低,速度降低,要么工作量惊人。有UDP的有效应用程序,但是如果您问这个问题,则可能不是。


如果不考虑网络条件,谈论TCP或UDP是没有意义的。
如果两点之间的网络具有很高的质量,则UDP绝对比TCP快,但是在其他情况下(例如GPRS网络),TCP可能比UDP更快,可靠性更高。


网络设置对于任何测量都至关重要。如果您通过本地计算机上的套接字或与世界的另一端进行通信,则将产生巨大的变化。

我想在讨论中添加三点:

  • 您可以在此处找到有关TCP与UDP的很好的文章。
    游戏开发的环境。
  • 另外,iperf(jperf使用GUI增强了iperf)是一种
    通过测量自己回答问题的非常好的工具。
  • 我在Python中实现了基准测试(请参阅此SO问题)。平均10 ^ 6次迭代,UDP发送8个字节的时间差约为1-2微秒。

  • 推荐阅读

      linux网络命令io?

      linux网络命令io?,系统,情况,网络,状态,实时,信息,数据,时间,命令,服务,在lin

      linux重置网络命令?

      linux重置网络命令?,网络,地址,工作,环境,系统,信息,标准,设备,命令,工具,lin

      linux命令连接网址?

      linux命令连接网址?,网址,系统,地址,服务,传播,数据,命令,名字,环境,网站,如

      linux高级网络命令?

      linux高级网络命令?,网络,地址,系统,工作,信息,管理,设备,电脑,命令,目录,Lin

      linux网络参数命令?

      linux网络参数命令?,网络,地址,系统,工作,信息,工具,情况,服务,状态,命令,Lin

      linux下创建网络命令?

      linux下创建网络命令?,网络,地址,工作,系统,管理,命令,名字,最新,项目,设备,l

      linux连接多条命令?

      linux连接多条命令?,工具,情况,命令,分行,服务,地址,连续,终端,窗口,主机,lin

      linux命令行链接网络?

      linux命令行链接网络?,网络,系统,地址,工作,工具,最新,网址,数据,信息,环境,l

      linux网络速度命令?

      linux网络速度命令?,网络,工作,地址,系统,电脑,命令,网卡,信息,通讯,设备,Lin

      linux有线网连接命令?

      linux有线网连接命令?,系统,网络,软件,电脑,密码,地址,信息,虚拟机,终端,命

      linux编译连接命令?

      linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在l

      linux网络开启命令行?

      linux网络开启命令行?,网络,地址,系统,环境,设备,工作,通用,服务,数据,网址,

      linux的配置网络命令?

      linux的配置网络命令?,地址,系统,网络,代码,服务,管理,密码,信息,基础,命令,l

      linux上的软连接命令?

      linux上的软连接命令?,系统,设备,位置,链接,文件,数据,交通,地方,信息,地址,L

      linux下查网络命令?

      linux下查网络命令?,网络,系统,地址,工具,状态,管理,基础,服务,中心,信息,lin

      linux网络命令查询?

      linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,lin

      linux网络延时命令?

      linux网络延时命令?,网络,时间,检测,地址,电脑,系统,设备,工具,基础,管理,lin

      linux网络联通命令?

      linux网络联通命令?,网络,地址,工作,系统,信息,联通,电脑,命令,检测,管理,Lin

      linux网络驱动器命令?

      linux网络驱动器命令?,网络,系统,电脑,最新,位置,检测,地址,材料,数据,命令,l

      mac命令连接linux?

      mac命令连接linux?,系统,软件,电脑,密码,公司,网络,地址,通用,服务,发展,macb