简述UDP协议

2019 Java 开发者跳槽指南.pdf (吐血整理)….>>>

        最近一直在看网络协议的相关内容,为什么看这些内容,是因为之前看到一张图片让我很有感触(如下图),知识的半衰期指的是:随着知识更新周期变短,知识裂变速度加快,一个知识落伍的周期。知识半衰期长的职业都是越老越值钱的,比如英语老师和外科医生。根据知识半衰期,有策略的进行学习就变得尤为重要。

简述UDP协议

        虽然上面的半衰期不完全准确,但是却值得参考。所以我们应该结合自身工作去学习半衰期长的知识。 所以废话不多说,下面来说一下UDP协议: 

        对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,常用的有TCP,UDP,HTTP协议。 TCP和UDP协议都位于传输层,在面试的时候,这两个协议经常会放在一起问。所以在讲的时候,就对比着讲。

         TCP协议是面向连接的,UDP是面向无连接的。在互相通信之前,面向连接的协议会先建立连接,所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的的面向连接的特性。 

        比如说,TCP提供可靠交付,通过TCP连接传输的数据,无差错,不丢失,不重复按顺序到达。而IP包是 没有任何可靠性保证的,UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达。

        再比如说,TCP是可以有拥塞控制的,它意识到丢包了或者网络的环境不太好了,就会根据自身情况来调整自己的行为,动态调整快慢。UDP就不会,不会管网络的环境和其他因素,发就是了。 因此TCP其实是一个有状态服务,可以记录状态,比如发了没有啊,发送到哪个了等等。而UDP则是无状态服务,发出去了啥也不管。 

        UDP包头是什么样的 

        当发送的UDP包到达目标机器后,发现MAC地址匹配,于是就取下来,剩下的包传给处理IP层的代码。把IP头取下来,发现目标IP匹配。然后在IP头里面有8位协议,这里面会存放,数据里面到底是TCP还是UDP,当然这里是UDP。无论是TCP还是UDP传数据,都要监听一个端口,根据端口号来区分应用程序,下面是UDP头的格式:

简述UDP协议

然后你会发现UDP包头是如此的简单。下面来说说UDP的三大特点: 

1.没有大量的数据结构,处理逻辑和包头字段,相信网络通路默认是很容易送达的,不容易被丢弃。2.不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以给他传送数据,他也可以给别人传,或者同时给多人传。 3.不会根据网络情况进行发包的拥塞控制。

UDP使用的三大场景

1.需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。DHCP就是基于UDP协议的,一般的获取IP地址都是内网请求,而且一次获取不到又没事,过一会还有机会。 

2.不需要一对一沟通,建立连接,而是可以广播的应用。

3.需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。

基于UDP的二次开发的五个例子

1.QUIC(快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延时,提供更好的互动体验。

2.流媒体的协议,直播协议多使用RTMP,RTMP协议是基于TCP。但是直播的实时性比较重要,宁可丢包,也不要卡顿的,还有就是网络不好的时候TCP协议会主动降低发送速度,这非常致命,所以很多直播应用都是基于UDP实现了自己的视频传输协议。

3.实时游戏,对延时要求较高。

4.IoT物联网,物联网对实时性要求较高。

5.移动通信领域,在4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的。

原文始发于微信公众号(九局下半大逆转):简述UDP协议