UDP扫盲

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

TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而UDP 继承了 IP 的特性,基于数据报 的,一个一个地发,一个一个地收。 

还有TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行 为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发,我就发,管它洪水滔天。 

因而TCP 其实是一个有状态服务,通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有, 发送到哪个了,应该接收哪个了,错一点儿都不行。而UDP 则是无状态服务。通俗地说是没脑子的,天 真无邪的,发出去就发出去了。 

发送的时候,我知道我发的是一个 UDP 的包,收到的那台机器咋知道的呢?所以在 IP 头里面有个 8 位 协议,这里会存放,数据里面到底是 TCP 还是 UDP。

UDP包头

当我们看到 UDP 包头的时候,发现的确有端口号,有源端口号和目标端口号。因为是两端通信。

UDP 的三大特点

1.简单,没有大量的数据结构、处理逻辑、包头字段。

2.轻信,它不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也 可以传给任何人数据,甚至可以同时传给多个人数据。 

3.单纯,它不会根据网络的情况进行 发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发还怎么发。对于TCP的话,如果网很卡会自动拥塞机制,避免过量丢包。

UDP 的三大使用场景

1.需要资源少,在网络比较好,对于丢包不敏感的场景使用。

2.不需要一对一沟通,不需要建立连接的场景,可以广播或者多播的场景。DHCP

3.需要处理速度快,时延低的,可以容忍少量丢包的场景。

UDP 的例子

1.网页或者 APP 的访问

这是基于http协议的,而http协议又基于tcp,但是对于大型的交互场景,tcp的严格性显然会造成很高的时延。

而QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基 于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。 

2.流媒体的协议

直播,实时性比较比较重要,宁可丢包,也不要卡顿的,当然是一定量的丢包。

当网络不好的时候,TCP 协议会主动降低发送速度,这对本来当时就卡的看视频来讲是要命 的,应该应用层马上重传,而不是主动让步。因而,很多直播应用,都基于 UDP 实现了自己的视频传输 协议。

3.实时游戏

还是时延问题

4.IoT

物联网领域终端资源少,很可能只是个内存非常小的嵌入式系统,而维护 TCP 协议代价太大; 另一方面,物联网对实时性要求也很高,而 TCP 还是因为上面的那些原因导致时延大。Google 旗下的 Nest 建立 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的。

5.移动通信领域 

在 4G 网络里,移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。因为移动网络协议比较复杂, 而 GTP 协议本身就包含复杂的手机上线下线的通信协议。

小结

如果将 TCP 比作成熟的社会人,UDP 则是头脑简单的小朋友。TCP 复杂,UDP 简单;TCP 维护连 接,UDP 谁都相信;TCP 会坚持知进退;UDP 愣头青一个,勇往直前; 

UDP 虽然简单,但它有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方。 例如 DHCP、VXLAN、QUIC 等。 

猜你喜欢

转载自www.cnblogs.com/CherryTab/p/12198032.html
UDP