提问人:Kaiden Prince 提问时间:9/13/2022 更新时间:9/13/2022 访问量:98
UDP 客户端/服务器如何“知道”有多少带宽可用
How does UDP clients/servers "know" how much bandwidth is available
问:
我将尝试制作一个高带宽应用程序,该应用程序可以与本地局域网中的两台计算机以及互联网上的两台计算机进行通信。UDP 因其无状态以及其用于 LAN 的组播功能而变得很有吸引力。
不过,我注意到,我不知道如何处理两台快速计算机之间的缓慢连接。假设计算机 A 和计算机 B 的速度无限快。但是,在网络中的某个点上,存在512kbit/s的瓶颈。如果您尝试发送的邮件数量超过瓶颈允许的范围,会发生什么情况?这与TCP有何不同?
数据包是否只是被丢弃,并且您必须实现错误处理以重新发送数据包并提高/减少您自己设置的带宽限制?需要执行的操作是否根据您的操作系统而变化?
答:
UDP 最适合概率系统,这些系统可以处理缺失数据。例如,如果通过 UDP 的实时语音连接丢失了数据包,则可以只让用户听到音频中断,而不是尝试修复数据包丢失。
当然,一些粗略的纠错和检测通常是有用的。但是,每当您这样做时,您都处于一个以重新实现 TCP 而终止的频谱上。因此,如果您可以对数据包问题进行非常基本的处理,那么 UDP 就可以了。如果您需要更复杂的流量保护,也许 UDP 不是最佳方法。
带宽就是一个很好的例子。发送方可以记录自给定时间以来发送的数据包数量,并定期将其与其他数据一起发送给接收方。接收方可以使用这个简单的计数和时间范围来确定他们只获得了发送的数据包的 10% 左右,并可能要求发送方使用保真度较低的格式。这不是很复杂,可以作为一种粗略的措施。但是,如果您尝试执行诸如发送所有数据包的索引之类的操作,以便收件人可以找出丢失的数据包列表并请求它们,那么您将进入重新实现 TCP 区域。
至于瓶颈到底发生了什么,就要看瓶颈到底是什么了。如果将数据包放入队列中,接收方将观察到时间膨胀(数据包以“慢动作”到达),并最终突然停止(当瓶颈耗尽数据包缓冲区并崩溃时)。或者瓶颈可能只是在繁忙时丢弃数据包,因此实际上每个数据包只有 x% 的几率成功传输。
使用 TCP 时,确认消息将开始延迟或无法到达。TCP 非常复杂,但从本质上讲,它会注意到这些缺失的 ack 并降低传输速率。一段时间后,连接应自动调整为 512 kbps 左右。与 UDP 不同,这是自动的,应用程序程序员无需实现任何特定机制。
评论
上一个:哪个版本标签更高?
下一个:查找有效坑洼字符串的数量
评论