我目前正在写计算机科学与工程的学士学位论文,我们正在使用 OpenGL 用 C++ 创建一个赛车游戏。在报告中,我比较了 TCP 和 UDP 的使用,我发现了一个来源,声称多个 TCP 连接会导致 UDP 连接中的数据包丢失。我什至得到了很好的参考
问题在于它已有 13 年历史,但我无法找到任何迹象表明任一协议已修改以解决此问题。我也找不到任何更新的、进行类似调查的论文或文章
所以,我的问题是协议是否有任何可能相关的更改和/或我是否应该忘记在论文报告中使用这个旧参考。
阅读文章中的要点:
所以被测WAN链路已经饱和,测试是为了TCP和UDP协议的公平性。评论中链接的 29 West 文章还指出:
误区——正常运行的网络没有损失。
现实——TCP拥塞控制的正常运行可能会因为队列溢出而导致丢失。有关更多信息,请参阅此报告。在严重拥堵的情况下,百分之几的损失率很常见。
这些都不是特别新的,也不应该让任何人感到惊讶。考虑家庭互联网连接、DSL 或具有最低速度(例如 2mb/s)的电缆,并设置一台使用 Bittorrent 下载多个大文件的计算机,现在尝试运行诸如 Valve 的 Team Fortress 2 之类的 UDP 游戏。它不会很好地工作。
借助 VoIP,许多网络人员开始寻找改善这种情况的方法,从而将 QoS 带到桌面上。然而,QoS 需要 WAN 两端的合作,因此这对大多数最终用户没有好处。唯一真正的解决方案是带宽限制。如果你有一个 2mb 的链接,你将 TCP 流量设置为 1.5mb,剩下的留给 UDP 流量用于游戏。
如果您正在开发一个拆分协议游戏,您将定义一个带宽上限,例如每个客户端的总流量为 25KB/s,然后在该限制内为 TCP 和 UDP 流量定义单独的限制,例如 TCP 为 15KB/s,TCP 为 10KB/s对于UDP。通常游戏倾向于使用 HTTP (TCP) 在游戏外下载游戏内容,然后在游戏内切换到 UDP 以彻底消除问题。