udp、tcp 杂项

此文记录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去下载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值