我可以对 TCP 使用广播或多播吗?

Posted

技术标签:

【中文标题】我可以对 TCP 使用广播或多播吗?【英文标题】:Can I use broadcast or multicast for TCP? 【发布时间】:2014-02-11 12:17:29 【问题描述】:

对于Internet Protocol (IP),我可以使用多播

在 IPv4 中:Internet Group Management Protocol (IGMP) 在 IPv6 中:Multicast Listener Discovery

另外,例如,对于 UDP,我可以使用:

广播 - 将数据包发送到地址范围 多播 - 将数据包发送到指定地址列表

但是我可以将其中的一些用于 TCP 吗?

【问题讨论】:

【参考方案1】:

不,你不能。 TCP 是用于在两个端点之间进行通信的协议。与 UDP 相比,它具有可靠的传输功能,这意味着数据包不仅可以发送,而且还需要对等方确认数据的接收,如果确认丢失,数据将被重新传输。而且由于广播和组播只发送不接收数据,TCP的可靠性无法在这些协议之上实现。

【讨论】:

谢谢!关于我在 UDP 问题上写的其余内容,我是对的吗? +1 因为答案绝对正确,但我确信推理,多播/广播没有得到任何回复/响应,这里回复/响应是消息,他们只发送一些消息不要'不期望任何消息返回,它与 IP 数据包传递无关? @hagrawal:在 TCP 连接上传递任何数据包之前,您需要在客户端和服务器之间进行三次握手。此外,TCP 是为可靠性而设计的,因此您有 ACK 来确认已收到数据包。所以实际上有很多消息返回,用于连接设置和数据包发送。虽然您可以设计一个不需要返回任何消息的协议,但它不会是 TCP。 @hagrawal 可以扩展 TCP 以允许多点通信。本质上,握手和 ack-s 应该被扩展为能够处理多个点。但它不再是 TCP,它将是一个类似于 tcp 的协议(......和 ​​torrent)。直到现在还没有人这样做,但这是可能的。【参考方案2】:

我通常不在这里发帖,但我只需要对这里的推理进行一点澄清。史蒂芬的回答是正确的。不,你不能!完美的。让我回答其余的问题,说 UDP 是发送多播和广播消息的正确协议。我在拥挤的房间里大声喊出 Steffen 的名字,我希望每个人都回应吗?没门!如果使用 TCP,每个人都会确认我的数据包!

所以要讨论的第二项是可靠性。这混淆了答案。UDP 很棒。当人们说 UDP 不可靠时,他们并不是说它不好。他们的意思是UDP多播的数据包不需要听到响应来确认传递。 UDP 也非常适合语音通信,当我说话时,这些数据包的传输速度更快,因为听者不应该说是的,我收到了那个数据包,我说的每一个字。

最后,这使我们认识到 UDP 是可靠的。在我清除了这一点后,请返回并再次阅读上面的段落。 UDP 不可靠。这是 TCP 和 UDP 之间的主要区别。所以这里是交易,有 UDP 和 R-UDP。 R-UDP 是与 UDP 不同的 RFC(见底部链接)。那个 RFC 显然是 IETF。可能还有其他人。他们指出原始答案是正确的,但介绍了有关 UDP (RFC 2460) 的信息是错误的。出于学术原因,以及只是普通的 semse

在此处了解 R-UDP RUDP 似乎没有适当的 RDF。在其概念化中使用了一些 RFC,但它看起来被微软使用,它已经向 IETF 发送了一些文档来启动 RFC 流程。该链接如下:

http://www.ietf.org/proceedings/44/I-D/draft-ietf-sigtran-reliable-udp-00.txt

另外,MS 确实在下面发布了一些信息,以及一个 RUDP wiki:

http://www.viavisolutions.com/en-us/literature/microsoft-tv-test-application-notes-en.pdf

显然我的声誉必须是 10 才能发布两个以上的链接——所以***的另一个链接寻找 R-UDP 或 RUDP

【讨论】:

“不,你不能”是正确的答案。其余的是非常有争议的恕我直言。如果您在拥挤的房间里大喊 Steffen ... 您是否希望每个人都做出回应(可能不会)您是否想确保每个人都听到它?也许不吧。以不同的方式询问您是否确定 Steffen 听到了您的声音? (很可能是的)广播/多播不能使用 TCP,但它们可以使用 UDP,默认情况下,这是不可靠的。最重要的是,这完全取决于您的应用程序。有时这已经足够了,而其他时候,可靠的广播/多播是强制性的。【参考方案3】:

从我的角度来看,当访问 TCP 协议时,它应该始终用于单播,即对于指定的单个主机和单个服务器。例如,如果我们想通过邮件发送一个文件夹给特定的人,则将建立点对点连接,但如果 cc 或 bcc 中有很多,UDP 将在那里进行多播。

所以我的推断是 TCP 不能用于多播。

【讨论】:

以上是关于我可以对 TCP 使用广播或多播吗?的主要内容,如果未能解决你的问题,请参考以下文章

chrome.socket 如何用于广播或多播?

《TCP/IP详解卷1:协议》第12章 广播和多播---读书笔记

Python 实现udp组播

TCP/IP详解学习笔记-广播和多播,IGMP协议

UNP学习 广播

单播、广播和多播IP地址