链接:
https://juejin.cn/post/7481964029796794380
前言
互联网江湖中,UDP如莽夫仗剑疾行,以无连接之刃斩开数据洪流,宁丢包亦不折速度锋芒;TCP似儒雅绅士,借三次握手执礼相待,携重传机制与流量控制,在可靠传输中织就秩序经纬。二者刚柔相济:实时视频里UDP的快意恩仇,网页加载时TCP的君子之约,恰似武林中并存的狂放剑意与绵密掌法,共筑数字世界的通信哲学。
莽夫:UDP协议
想必大家肯定都看过《狂飙》这部电视剧吧,里面一些角色想必大家都印象深刻就比如莽村的李宏伟,而我们现在所要讲述的 UDP协议 它就出自莽村。
image.png
面向无连接
现在大家可以先想象一个场景,当我们要发快递给某个人的时候,即使我们知道了收件人的地址,我们还需要先向收件人确认一下基础信息。而
UDP协议
就不一样了它发快递的时候,只要知道了对面的地址就直接发送快递,并不会管别的东西,这就是他身为莽夫的第一层境界。
面向无连接(知道了对面的 ip 后就直接传输数据)
只做数据报文的搬运工
相信大家都听过农夫山泉的一个广告词:我们不生产水,我们只是大自然的搬运工。而 UDP协议 除了莽之外还有点懒,他并不参与数据报文的生成,而是直接拿到本来要发送的数据经过一系列处理之后得到的数据报文进行发送,并且不会增加额外的报文头部。
image.png
只做 数据报文(有头和体)的搬运工 (不增加额外的报文头部,头部开销比较小只有8个字节)
不保证数据的有序性和可靠性
关于他的这一点我觉得大家应该能理解,上面两点我们可以看出来这个莽夫并不是一个可靠的人,接下来我们还是以发快递的情景来模仿。
如果我们在网上买一些需要按照顺序组装的东西的话,那么在发快递的时候就会帮你提前按照顺序来编号之类的方便你组装,并且一般会全部都打包给你。但是
UDP
它就是个急性子,它一拿到厂家给你的零件就直接发送了,也不会管你排序什么的,这就
不能保证传输过来数据的有序性
了。除此之外,由于它比较急急忙忙的多少都会有点丢三落四,这就引出了它的另一个缺点,它在传输的过程中
不保证数据的可靠性
,可能会丢包,也就是把你所需要的零件可能路上丢失了。
1742109718971.png
没有拥塞控制
说起这个拥塞控制呢,大家在生活中肯定遇到过,当我们在刷视频或者看电视剧的时候,如果网络环境不好的话它就会一卡一卡的,而这个拥塞控制呢就是根据网络环境来控制这个网络传输速度的。
由于 UDP协议 没有拥塞控制,所以它在进行传输的时候,速率是恒定的,并不会因为网络环境的变化而降低速率,这就会导致上面的丢包的出现。干就完了!!!
1742110023624.png
高效
我们知道它没有拥塞控制之后,那么在我们看电视或者刷视频的时候并不会因为网络环境而影响我们的传输速率,这一点就成就了它高效的一个特点。
UDP 小结
-
面向无连接(知道了对面的 ip 后就直接传输数据)
-
只做 数据报文(有头和体)的搬运工 (不增加额外的报文头部,头部开销比较小只有8个字节)
-
不保证数据包的有序性
-
不保证数据的可靠性(丢包)
-
没有拥塞控制
-
高效(前五点都是高效)
应用场景:直播,视频,游戏,实时性要求高的应用
绅士:TCP协议
现在都是文明社会了,咱就不搞UDP的莽村那一套了,咱们来聊一聊更适合我们社会的 TCP协议,他在进行信息传输的时候并不会像 UDP 一样知道你ip地址直接塞给你就是了,而是会先询问一下你的意见,这就是我们常说的
TCP三次握手
,并且在传输完了信息之后还会非常友好的跟你说:say goodbye,也就是我们常说的
TCP四次挥手
,接下来我们来学习一下它的绅士礼仪。
image.png
头部信息多
在上文中我们聊到 UDP 是数据报文的搬运工,但是 TCP 就比较勤快了,它会往报文的头部添加一些信息用来告诉服务端它想要服务端做的事情,它一般会往头部添加下面的信息。