面试题:TCP和UDP的区别?
UDP是面向无连接的,TCP是面向连接的:在互通之前,是否会先建立连接。
TCP提供可靠的交付,通过TCP传输的数据,无差错、不丢失、不重复、且按序到达。UDP不保证不丢失,也不保证按序到达。
TCP是面向字节流的,发送的时候发的是一个流,没头没尾;UDP是基于数据包的,一个一个的发/收。
TCP有拥塞控制和流量控制,UDP一直发。
TCP是一个有状态的服务,会精确的记着发送了没有,接收了没有,发送到哪了,接受到哪了;UDP是无状态的服务。
1、所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
2、UDP的三大特点:
(1)简单,相信网络环境靠谱,不需要大量的数据结构、处理逻辑等;
(2)轻信,谁都可以给这个端口传数据,他也可给任何人传数据;
(3)无论网络情况,该发接着发;
3、UDP使用场景
(1)需要资源少,在网络情况比较好的内网,或对丢包不敏感的应用。DHCP就是基于UDP协议的,一般获取IP地址都是内网请求,取不到IP也没事。
(2)不需要一对一沟通,建立连接,而是可以广播的应用。UDP的不面向连接的功能,可以使得可以承载广播或者多播的协议。DHCP就是一种基于广播的形式。
(3)需要处理速度快、时延低,可以容忍少数丢包,即便网络阻塞,继续一往无前。
如果实现的应用需要有自己的连接策略,可靠保证、时延要求,使用UDP,然后在应用层实现这些最好不过。
4、基于UDP的几个例子
(1)网页或APP的访问:QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)Google提出的一种基于UDP改进的通信协议(应用层);
(2)流媒体协议:直播应用一般都基于UDP实现了自己的视频传输协议;
(3)实时游戏:自定义可靠的UDP协议,自定义重传策略,把丢包产生的延迟降到最低;
(4)物联网
(5)移动通信领域