一、TCP和UDP的区别?
1.TCP是面向连接的,UDP事面向无连接的。
建立连接: 为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
2.TCP提供可靠交付。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。UDP不保证可靠交付,不保证不丢失,不保证按顺序到达。
3.TCP是面向字节流的,发送的时候发的是一个流,没头没尾。UDP是基于数据报的,一个一个地发,一个一个地收。
4.TCP是可以有拥塞控制的,UDP不会。
5.TCP是一个有状态服务,里面准确地记着发送了没有,接收了没有,发送到哪个了,接收到哪个了。UDP是一个无状态服务。
二、UDP包头
三、UDP的使用场景
1.需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
2.不需要一对一沟通,建立连接,而是可以广播的应用。
3.需要处理速度快,时延低,可以容忍少数丢包,但是要求即使网络拥塞,也不降低自己的发送速率。
四、UDP使用的具体例子
1.网页或者APP的访问
原来访问网页和手机APP都是基于HTTP协议的,HTTP协议是基于TCP的,建立连接需要多次交互,对于目前时延比较大的主流移动互联网来讲,建立一次连接需要的时间比较长。而QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP的改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。QUIC在应用层,会自己实现快速连接建立,减少重传延迟,自适应拥塞控制。
2.流媒体的协议
很多直播应用,都基于UDP实现了自己的视频传输协议。
3.实时游戏
游戏对实时要求较为严格的情况下,采用自定义的可靠UDP协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性能造成的影响。
4.IoT物联网
物联网领域终端资源少,很可能只是个内存非常小的嵌入式系统,而维护TCP协议代价太大;另一方面,物联网对实时性要求也很高,而TCP会导致时延加大。Google旗下的Nest建立Thread Group,推出了物联网通信协议Thread,就是基于UDP协议的。
5.移动通信领域