【发布时间】:2011-01-28 00:59:27
【问题描述】:
** http://en.wikipedia.org/wiki/User_Datagram_Protocol: **
“与 TCP 不同,UDP 兼容数据包广播(发送给本地网络上的所有人)和多播(发送给所有订阅者)。”
【问题讨论】:
标签: networking tcp udp
** http://en.wikipedia.org/wiki/User_Datagram_Protocol: **
“与 TCP 不同,UDP 兼容数据包广播(发送给本地网络上的所有人)和多播(发送给所有订阅者)。”
【问题讨论】:
标签: networking tcp udp
“兼容”在这里是一个非常糟糕的词选择。 “支持”是真正被描述的内容。按照设计,TCP 是一种点对点协议。时期。 TCP 多播在术语上是矛盾的。
编辑:我更新了维基百科页面以反映此评论。
编辑 2:令人难以置信的是,自发布此问题以来,有人已从 Wikipedia UDP 页面中删除了所有提及多播的内容。我修好了它。再次。
【讨论】:
TCP 在发送方和接收方之间建立连接。发送方发送一个数据包,然后等待接收方的确认,然后再发送另一个1。如果数据包在没有得到确认的情况下时间过长,它会重新发送数据包,直到收到确认(这就是它获得可靠性的方式)。
在多播和广播的情况下,发送者甚至不知道可能有多少个接收者,更不用说他们是谁了。如果有人没有正确确认数据包,这使得它几乎不可能等待确认并重新发送数据包。
1从技术上讲,有一个“窗口”允许它在收到确认之前发送,比如说,五个数据包,但你明白了——它仍然需要知道谁在接收,并得到确认已发送的数据包,如果未确认则重新发送数据包。
【讨论】:
TCP 结合了流量控制和基于数据接收者确认的可靠性。广播或多播发送器不知道有哪些或有多少其他节点正在侦听;即使通过某种类似于 TCP 的点对点同步的多点同步算法来实现,流量控制也是一个问题,因为接收方在最坏的条件下会限制整个流量的速度。
【讨论】:
简短的回答是因为广播 TCP 很复杂。
长答案是 TCP 协议的重要部分,即移植到广播语义时的可靠性和拥塞控制很容易被滥用,不能很好地扩展,而多播只是 IPv4 标准的简单和可选组件,并且在大多数核心路由器上要么未实现要么禁用。
已经发表了许多研究新协议以提高可扩展性的论文; IPv6 将组播提升为核心协议要求,并且与特定源组播一起显着提高了核心路由支持和安全性;离开仍然很严重的滥用领域。
滥用涵盖协议的许多方面,从中间人攻击到网络基础设施过载,导致上游到源的流量网络风暴。
在今天的 Windows 机器上,您可以使用具有流支持的 PGM 协议,该协议的运行方式几乎与广播 TCP 一样。它被 Microsoft 的消息传递系统 MSMQ 使用。
http://msdn.microsoft.com/en-us/library/ms740125(v=vs.85).aspx
【讨论】: