为啥不使用 UDP 进行视频点播会导致串扰?
Posted
技术标签:
【中文标题】为啥不使用 UDP 进行视频点播会导致串扰?【英文标题】:Why doesn't using UDP for video-on-demand cause cross-talk?为什么不使用 UDP 进行视频点播会导致串扰? 【发布时间】:2013-04-14 06:23:40 【问题描述】:在阅读 Behrouz Forouzan 的“数据通信和网络”中的一个作业问题时,其中一个问题是使用 UDP 进行文件传输有任何不利影响,请牢记进程崩溃现象。
对此的解决方案是,如果进程 A 从服务器 X 请求文件内容,并且在请求后不久,A 崩溃并且另一个进程 B 出现在同一台机器上的同一端口上(给它相同的套接字地址)并向同一服务器发送另一个文件的请求,但请求丢失,这使得服务器不知道进程 A 崩溃和请求丢失,因此,它将 A 请求的文件内容发送给 B .
为什么在 youtube 或点赞之类的视频点播频道中不会出现此问题?
我得到的最接近的答案之一是这个,但它似乎没有解决我的问题:
When is it appropriate to use UDP instead of TCP?更新:对于想阅读书中给出的问题的人,我找到了所需部分的在线版本,请查看PDF的第8个问题:
http://ceng334.cankaya.edu.tr/uploads/files/file/network%20sample.pdf【问题讨论】:
【参考方案1】:理论上问题可能发生,但在现实生活中呢?没有机会。
假设用户想要使用浏览器从 Youtube 流式传输视频。
-
浏览器必须崩溃 - 实际上不会经常发生。
新浏览器实例采用完全相同的源 UDP 端口 - 几乎不会发生。
用户决定观看不同的视频 - 没有意义。
虽然这一切都发生了,但服务器端并没有超时 - 我不这么认为。
这就像争论应该使用 TCP,因为当两台计算机用一米长的以太网电缆背靠背连接时,数据包可能会在网络上丢失。
【讨论】:
我同意这种情况可能不会经常发生,但即使它偶尔会发生一次,它真的会产生问题中给出的效果吗?顺便说一句,为什么新浏览器(或选项卡)不采用相同的 UDP 端口?是阻塞了还是有一段时间? PS:每个标签都有不同的端口,因此即使标签崩溃也足以触发效果(尽管通常不会发生) 基本上,我认为这种情况不会在现实生活中发生。我认为源 UDP 端口是从可用端口中随机选择的,因此不太可能背靠背选择完全相同的源端口。在我看来,发生这种情况的唯一方法是通过以这种方式实现服务器/客户端来强制它发生。这样做的目的可能只是声称“在这个假设的环境中,TCP 的行为会有所不同。”以上是关于为啥不使用 UDP 进行视频点播会导致串扰?的主要内容,如果未能解决你的问题,请参考以下文章
JavaCV音视频开发宝典:UDP广播推流 使用UDP方式推送广播TS流 实现UDP一对多广播
JavaCV音视频开发宝典:UDP广播推流 使用UDP方式推送广播TS流 实现UDP一对多广播