TCP和UDP有哪些区别?
TCP是面向连接的,UDP是面向无连接的。
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
TCP提供可靠交付。UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达。
TCP是面向字节流的。UDP继承了IP的特性,基于数据报的,一个一个地发,一个一个地收。
TCP是可以有拥塞控制的。UDP就不会,应用让我发,我就发,管它洪水滔天。
TCP其实是一个有状态服务。UDP则是无状态服务。
UDP包头
UDP三大特点:
- 沟通简单,相信网络通路默认就是很容易送达的,不容易被丢弃的。
- 轻信他人。它不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
- 愣头青,做事不懂权变。不知道什么时候该坚持,什么时候该退让。它不会根据网络的情况进行发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发还怎么发。
UDP的三大使用场景:
- 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。DHCP就是基于UDP协议的。一般的获取IP地址都是内网请求,而且一次获取不到IP又没事,过一会儿还有机会。我们讲过PXE可以在启动的时候自动安装操作系统,操作系统镜像的下载使用的TFTP,这个也是基于UDP协议的。在还没有操作系统的时候,客户端拥有的资源很少,不适合维护一个复杂的状态机,而是因为是内网,一般也没啥问题。
- 不需要一对一沟通,建立连接,而是可以广播的应用。UDP的不面向连接的功能,可以使得可以承载广播或者多播的协议。DHCP就是一种广播的形式,就是基于UDP协议的,而广播包的格式前面说过了。对于多播,我们在讲IP地址的时候,讲过一个D类地址,也即组播地址,使用这个地址,可以将包组播给一批机器。当一台机器上的某个进程想监听某个组播地址的时候,需要发送IGMP包,所在网络的路由器就能收到这个包,知道有个机器上有个进程在监听这个组播地址。当路由器收到这个组播地址的时候,会将包转发给这台机器,这样就实现了跨路由器的组播。在后面云中网络部分,有一个协议VXLAN,也是需要用到组播,也是基于UDP协议的。
- 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。
QUIC(全称Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。
(QUIC后续笔记会专门解释)
QUIC在应用层上,会自己实现快速连接建立、减少重传时延,自适应拥塞控制。
Google旗下的Nest建立Thread Group,推出了物联网通信协议Thread,就是基于UDP协议的。
在4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的。因为移动网络协议比较复杂,而GTP协议本身就包含复杂的手机上线下线的通信协议 持续更新中ing~