博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
udp、tcp 杂项
阅读量:2260 次
发布时间:2019-05-09

本文共 807 字,大约阅读时间需要 2 分钟。

此文记录udp、tcp使用的杂乱知识,基本是各处摘录,会随时更新,如有侵权,我会立即删除。

1,

实时音视频是可以而且应该用 UDP 的,一方面因为它常常涉及到网络穿透,另外一方面它不需要重传。——我需要实时的看到你的图像跟声音,至于中间丢一帧什么的完全不重要。而为了重传往往会造成延迟与不同步,考虑一下,某一帧因为重传,导致0.5秒以后才到,那么整个音视频就延迟了0.5秒。

考虑一下接收方看视频,如果使用 TCP 导致视频的中间延迟了0.5秒,只要我不按「快进」键,那么后续的视频全都会比发送方延迟0.5秒。这种延迟是累加的,随着持续丢帧,延迟会越来越大,达到数秒,甚至分钟级,这会严重影响实时音视频的用户体验。

因此「实时音视频聊天」功能通常都会使用 UDP 实现。

2,

网络真的非常非常可靠,以至于你完全不需要考虑 UDP 丢包问题的情况。
典型的例子应该是专门为有线局域网设计的协议。

3,

另外一个问题是 TCP 是纯粹的流式数据,所以制定传输协议的时候,接受方需要自行判定一个包的开始和结束,因为你完全可能接受到半个包或者两个包。——如果数据报的起止判定对你具体的程序会成为大问题,也可以考虑 UDP。

曾经读gtalk开源项目libjingle的源码时看到文件传输功能是用的udp协议
你一定会问,什么?文件传输这种可靠性要求如此高的场景怎么可能用udp这么不可靠的协议呢?
这里就用到udp一个得天独厚的优势了,打洞!
gtalk的文件传输会尝试用户p2p直连,这样可以省去服务器开销
但用户都是处于各自内网的情况下无法建立起tcp连接,只能用udp打洞的方式通信
所以libjingle中用udp实现了假冒tcp的可靠协议,有兴趣的同学可以去看下PseudoTcp类的实现
发送文件方用PseudoTcp创建http server,接收方用PseudoTcp封装的http client去下载

转载地址:http://eeycb.baihongyu.com/

你可能感兴趣的文章
无法将stdClass类型的对象用作数组?
查看>>
为所有服务器端代码调用ConfigureAwait的最佳实践
查看>>
如何从字符串中删除文本?
查看>>
在Windows中将目录添加到PATH环境变量
查看>>
在shell脚本中没有换行符的'echo'
查看>>
容器流体与容器
查看>>
如何将零终止的字节数组转换为字符串?
查看>>
Visual Studio代码中的多个游标[关闭]
查看>>
设置EditText光标颜色
查看>>
对象是空的吗? [重复]
查看>>
Visual Studio调试/加载速度很慢
查看>>
在SCSS文件中导入常规CSS文件?
查看>>
File.separator或File.pathSeparator
查看>>
Android更改浮动操作按钮颜色
查看>>
媒体查询中“屏幕”和“仅屏幕”之间有什么区别?
查看>>
四舍五入到小数点后两位[重复]
查看>>
你如何检查选择器是否匹配jQuery中的内容? [重复]
查看>>
获取当前正在执行的方法的名称
查看>>
在node.js中复制文件的最快方法
查看>>
升级pip后出错:无法导入名称“ main”
查看>>