数据包延迟会波动吗?


Answers:


9

IP协议,在其顶上TCP和UDP被构造,则指定数据报既不保证按顺序到达,也不经由相同的途径,也不是,对于这个问题,在所有(感谢特雷弗的提醒)。因此,无论使用TCP还是UDP,等待时间都会波动。延迟部分是由于行进距离,如果路径改变,则改变,部分是由于沿所选路径的路由设备上的协议栈转换 -如果路径改变,则也改变。

这是Internet自我修复性质的一部分,使其能够每天执行其工作:如果根据沿途编程到各种路由设备中的启发式方法,一条路由变得不适合,则将改为选择另一条路由。这可以是暂时的,也可以是长期的。请记住,在互联网问世之前,它是ARPANET-一种旨在处理例如 即时删除网络的大部分区域(想想核战争),而整个网络不会崩溃。通过在损坏的或其他非理想区域周围进行路由,更大的网络将继续运行(尽管可能不是最优的)。


1
值得补充的是,不能保证数据报完全到达。他们可以在旅途中的任何时候默默地掉落。只有基于IP的TCP传输才能为网络通信增加可靠性的幻觉。
Trevor Powell

另请参阅Danny Pflughoeft的答案,他正确地补充说TCP将由于其操作方式而遭受额外的延迟-如果数据包丢失,将重新请求并重新发送它们,从而在消息延迟上增加了额外的完整往返时间。这可以任意多次发生。UDP通过发送连续的更新流克服了这一问题,尽管数据包丢失,但仿真仍可以继续进行(然而,在这种系统中要进行更多的思考和计划)。
工程师

5

这可能不是游戏开发问题,但可以。在正常的IP连接中,每个数据包可能会经过不同的中间“跳跃”,并且每个不同的“跳跃”可能会具有不同的延迟。

如果您使用TCP传输数据,则该协议会为您抽象该数据,并将对数据包进行重新排序以按照最初发送的顺序来传递数据包;但是,如果您使用的是UDP,则数据包可以而且确实会无序到达,具体取决于每个单独数据包的延迟。


特别是,如果UDP和TCP数据包以相同的方式路由,并且UDP数据包通常无序到达,则这将转换为使用TCP的同一连接上的“滞后尖峰”。
马丁·索卡


1

除了已经说过的话,别忘了允许路由器任意丢弃数据包,这意味着从理论上讲,在TCP中,一个数据包到达目的地的时间可能任意长(在UDP中,它可能永远不会到达目的地!)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.