关于tcp:可靠实现UDP组播的方法

您所在的位置:网站首页 Udp实现可靠的方式 关于tcp:可靠实现UDP组播的方法

关于tcp:可靠实现UDP组播的方法

2024-07-07 13:52| 来源: 网络整理| 查看: 265

我正在为大学考试做准备,去年的问题之一是"如何使UDP多播可靠"(例如tcp,重传丢失的数据包)

我想到了这样的事情:

服务器使用UDP发送多播

每个客户端发送确认接收到的数据包(使用TCP)

如果服务器意识到不是每个人都接收到数据包,它将向特定客户端重新发送多播或单播

问题是可能有一个客户端通常丢失数据包并迫使服务器重新发送。

好吗 ?

相关讨论 我假设步骤2中的确认实际上涉及到服务器连接?同样,步骤3可能是无穷无尽的,如果某些客户端的连接确实很差,或者具有本地防火墙以静默方式丢弃数据包,该怎么办? 我认为除了在步骤2中连接到服务器之外,没有其他选择。是的,这就是步骤3的问题。是否有任何解决方法? 第3号的解决方案是继续无限重试,或者在重试一定次数后简单地放弃错误消息。而且,如果您想在步骤2中使用TCP确认,那么实际上没有其他方法。 我的想法是在步骤2中使用TCP,所以也许是错误的。我认为使用udp进行确认会加剧问题 我认为这个问题已经得到回答:实用的通用多播。除了TCP,它使用NACK而不是ACK,这对于多播更为有利。您将如何为可能接收到数据报的10,000个客户端处理ACK?仅当检测到数据包丢失时才发送NACK,在多播可用的情况下,NACK通常小于1%。 它根本不像TCP。您需要查一下。有一个完整的IETF Worjing Group致力于可靠的多播,并且有许多现有协议(例如TRAM)。

Every client send acknowledgement of receiving that packets ( using TCP )

对于每个数据包发送ACK并使用TCP进行发送,无法扩展到大量接收器。使用基于NACK的方案更为有效。

从服务器发送的每个数据包都应具有与其关联的序列号。当客户收到它们时,他们会跟踪丢失了哪些序列号。如果丢失了数据包,则可以通过UDP将NACK消息发送回服务器。此NACK可以格式化为序列号列表或已接收/未接收到的序列号的位图。

If server realize that not everyone receive packets , it resends multicast or unicast to particular client

当服务器收到NACK时,它不应立即重新发送丢失的数据包,而应等待一段时间,通常是GRTT的倍数(组往返时间-接收器组中最大的往返时间)。这使它有时间积累来自其他接收器的NACK。然后,服务器可以多播丢失的数据包,以便任何丢失它们的客户端都可以接收它们。

如果此方案用于文件传输而不是流数据,则服务器可以轮流交替发送文件数据。完整文件在第一遍发送,在此过程中,将累计接收到的所有NACK,并标记需要重新发送的数据包。然后,在随后的遍历中,仅发送重传。这样做的好处是,丢失率较低的客户端将有机会完成文件的接收,而丢失率较高的接收者可以继续接收重传。

The problem are that there might be one client who usually lost packets and force server to resend.

对于损失非常高的客户端,服务器可以为丢失的最大数据包百分比设置阈值。如果客户端发回超过该阈值的NACK一次或多次(取决于服务器的次数),则服务器可以丢弃该客户端,并且不接受其NACK或向该客户端发送消息以通知它掉了。

有许多协议可以实现这些功能:

UFTP-具有多播的基于UDP的加密UDP(公开:作者) NORM-面向NACK的可靠组播 PGM-实用通用多播 UDP广播

相关RFC:

RFC 4654-TCP友好的组播拥塞控制(TFMCC):协议规范 RFC 5401-组播否定确认(NACK)构建模块 RFC 5740-面向NACK的可靠多播(NORM)传输协议 RFC 3208-PGM可靠传输协议规范 相关讨论 NORM RFC实际上是5740。尝试进行编辑,但是编辑少于10个字符,因此被拒绝。 @jcrigby感谢您抓住这一点。 更新。

为了使UDP可靠,您必须处理一些事情(即,自己实现)。

连接处理:发送和接收过程之间的连接可能会断开。最可靠的实现通常会发送keep-Alive消息以维护两端之间的连接。

排序:消息在发送之前需要分成多个块。

确认:收到每个消息后,需要将ACK消息发送到发送过程。这些ACK消息也可以通过UDP发送,而不必通过UDP。接收过程可能意识到丢失了一条消息。在这种情况下,它将停止从保留队列(保留接收到的消息的消息队列,就像消息的等待室)中传递消息,并请求重新发送丢失的消息。

流控制:根据接收过程传递数据的能力来限制数据的发送。

通常,有一组流程的负责人。这些小组中的每个小组通常都有领导者和整个小组的观点。这称为虚拟同步。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3