前面的几篇文章讲述了链路层和IP层,主要的话其实就是MAC地址,以及通过IP地址求MAC地址的ARP协议。PING的底层协议 ICMP
。动态分配IP协议 DHCP等。而从今天开始我们开始讲述传输层协议,传输层主要就是UDP和TCP。
TCP 和 UDP 有哪些区别?
面试中常问到的其实就是TCP和UDP的区别,首先一个特别明显的区别就是TCP是面向连接的,UDP是无连接的。
连接其实就是在客户端和服务端之间维护连接,通过建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
第二点:TCP提供可靠交付,IP层其实没有保证数据的可靠性,TCP传输层保证来传输的数据,无差错、不丢失、不重复,并且按序到达。而UDP不保证可靠传输。并且不按顺序到达。
第三点:TCP是面向字节流,发送的是一个一个的流,UDP是一个一个的数据报。
第三点:TCP具备拥塞控制,也就是会根据丢包以及网络稳定情况进行调整自己发送数据的快慢。UDP其实不管三七二十一,只管发送。
第四点:TCP是一个有状态服务。会明确记录包又没有到达,UDP是无状态的服务。
UDP 包头是什么样的?
当目标机器收到包后,会不断取下MAC头,IP头。在IP头中标识的是UDP和TCP。就可以从中开始解析数据,但是处理完UDP数据之后,应该把数据交给谁处理,内核的事情处理完毕之后,应该交给应用程序,每个应用程序都有自己的端口,正是通过目的端口号进行区分的。
所以UDP的格式是源端口号,目的端口号,剩下就是UDP长度以及UDP校验和。
UDP 的三大特点
沟通简单,默认认为网络世界是美好的,不容易丢弃。
可以互相传输数据,可以发送给其他人,也可以收到其他人发送的数据。
不具备网络情况进行灵活处理。
UDP 的三大使用场景
虽然UDP不保证数据的可靠传输,但是针对一些场景来说,其实也非常适合使用UDP进行传输数据。
1.网络情况比较稳定的情况 或者对于丢包场景不敏感的应用。而DHCP其实基于UDP协议的。获取IP协议是内网请求,所以针对这种场景比较适合。
2.不需要建立连接,就可以广播的应用。可以承载广播或者多播的协议,DHCP就是一种广播的形式。
3.处理速度快,时延低,可以容忍少数丢包,,因为不需要关心数据是否丢失等情况,所以不处理复杂的应用场景。
UDP使用场景案例
网页或者 APP 的访问
原来网页和APP是基于HTTP的,HTTP基于TCP,建立连接比较耗费资源,所以提出来QUIC (quick udp internet connections)快速UDP互联网连接。目的是降低网络通信的延迟,提供更好的用户互动体验。
流媒体的协议
直播视频中其实最重要的就是实时性,可以间断的丢包,选择性的丢帧。所以很多直播应用,都采用的是UDP实现自己的视频传输协议。
实时游戏
游戏场景其实也是实时性比较高,游戏对实时要求较为严格的情况下,采用自定义的可靠 UDP 协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。
IoT 物联网
移动通信领域
小结
本篇主要简单介绍了TCP和UDP的区别,在于TCP为保证数据的可靠传输有自己的一套机制,而UDP不是基于连接的,所以对于实时性场景一般都是采用UDP进行使用。