TCP 和 UDP 有哪些区别?
- TCP面向连接,UDP无连接。
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。 - TCP提供可靠交付。
通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。UDP则在数据发出之后就完成工作,不保证不丢失,不保证按顺序到达。 - TCP是面向字节流的。UDP是基于数据报的。
TCP面向字节流,发送的时候是一个流,无头无尾;UDP基于数据报的,一个一个的发,一个一个的接收。 - TCP有流量控制和拥塞控制。
TCP会监控网络状态和丢包情况来调整发送行为,UDP则不然。 - TCP是一个有状态服务。
TCP是一个有状态服务,会记录数据发送情况(是否发送,是否接收,发送到那个了,接收到那个了);UDP则是无状态服务,不关注数据的发送和接收情况。
UDP 包头是什么样的?
UDP三大特点
- 沟通简单:相信网络世界,默认容易送达,不会丢包。
- 轻信他人:不建立连接,可以给任何人发数据,别人也可以发送数据给他。
- 愣头青,做事不懂变通:不会根据网络情况和丢包情况进行发送调整。
UDP三大使用场景
- 需要的资源少,网络比较好的内网,或对于丢包不敏感的应用。
DHCP基于UDP,一般获取IP地址都是内网请求,且一次请求不到没有关系。TFTP基于UDP,批量安装操作系统时用到TFTP,没有操作系统系统的时候,不适合维护复杂的状态机。 - 不需要一对一沟通,可以广播的应用。
DHCP时广播协议。D类地址是组播地址,VXLAN需要组播,也基于UDP。 - 需要处理速度快,时延低,可以容忍少数丢包,但要求即便网络拥塞,也毫不退缩。
基于UDP的“城会玩”的五个例子
-
网页或者APP的访问
原来访问网页和手机 APP 都是基于 HTTP 协议的。HTTP 协议是基于 TCP 的,建立连接都需要多次交互,建立一次连接需要的时间会比较长,然而既然是移动中,TCP 可能还会断了重连。
QUIC(Quick UDP Internet Connections)是谷歌提出的基于UDP改进的通信协议,目的是降低网络延迟提供更好的用户体验。QUIC 在应用层上,会自己实现快速连接建立、减少重传时延,自适应拥塞控。
QUIC 可参看: 科普:QUIC协议原理分析 、 Google QUIC 协议:从 TCP 到 UDP 的 Web 平台 -
流媒体的协议
TCP 的严格顺序传输要保证前一个收到了,下一个才能确认,如果前一个收不到,下一个就算包已经收到了,在缓存里面,也需要等着。对于直播来讲,这显然是不合适的。
对于视频播放来讲,有的包可以丢,有的包不能丢,因为视频的连续帧里面,有的帧重要,有的不重要,如果必须要丢包,隔几个帧丢一个,其实看视频的人不会感知,但是如果连续丢帧,就会感知了,因而在网络不好的情况下,应用希望选择性的丢帧。网络不好的时候,TCP 协议会主动降低发送速度,这回进一步导致卡顿。 -
实时游戏
游戏有一个特点,就是实时性比较高。 TCP 的强顺序问题,如果出现一个数据包丢失,所有事情都需要停下来等待这个数据包重发。 -
IoT 物联网
物联网终端资源少,而维护 TCP 协议代价太大,对实时性要求也很高。 -
移动通信领域
在 4G 网络里,移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。GTP 协议本身就包含复杂的手机上线下线的通信协议。如果基于 TCP,TCP 的机制就显得非常多余。
小结
- 路由分静态路由和动态路由,静态路由可以配置复杂的策略路由,控制转发策略;
- 动态路由主流算法有两种,距离矢量算法和链路状态算法。基于两种算法产生两种协议,BGP 协议和 OSPF 协议。
参考资料:
趣谈网络协议(极客时间)链接:
http://gk.link/a/106nW
科普:QUIC协议原理分析:
https://zhuanlan.zhihu.com/p/32553477
Google QUIC 协议:从 TCP 到 UDP 的 Web 平台:
https://www.infoq.cn/article/quic-google-protocol-web-platform-from-tcp-to-udp
GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
CSDN首页:
https://me.csdn.net/leacock1991
欢迎大家来一起交流学习