最近带着一份好奇心去读了一些网络通信方面的文章,也了解了一下网络通信协议中的TCP与UDP协议,本文就带大家了解一下UDP协议。

一、UDP协议简介

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,它处于第四层——传输层,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,也就是说不提供数据包分组、组装和不能对数据包进行排序的缺点,即当报文发送之后,是无法得知其是否安全完整到达的。

UDP传输与IP传输非常类似。你可以将UDP协议看作IP协议暴露在传输层的一个接口。UDP协议同样以数据包的方式传输,它的传输方式也是"Best Effort(尽力而为)"的,故UDP协议也是不可靠的。
OSI七层模型.png

那么,我们为什么不直接使用IP协议而要额外增加一个UDP协议呢? 一个重要的原因是IP协议中并没有端口(port)的概念。IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中需要有多个通信通道,并将多个通信通道分配给不同的进程使用一个端口就代表了这样的一个通信通道。

二、 UDP特点

UDP 是一个简单的传输层协议。和 TCP 相比,UDP 有下面几个显著特性:

1.UDP 缺乏可靠性。UDP 本身不提供确认,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次,再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是其优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

2.UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任何(协议上的)记录边界。

3.UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系,因此主机不需要维持复杂的连接状态表。UDP 发送数据报之前也不需要经过握手创建连接的过程,因此减少了开销和发送数据之前的时延。

4.UDP 支持多播和广播。UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

三、UDP协议头

UDP协议头部.png

UDP 头部包含了以下几个部分:
1.两个十六位的端口号,分别为源端口(可选字段)和目标端口。

各16bit的来源端口和目标端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。当运输层从IP层收到UDP数据报时,就是根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点--应用程序。
UDP分用.png

如果接收方UDP发现收到的报文中的目的端口号不正确,就会丢弃该报文,并由网际控制协议ICMP发送“端口不可达”差错报文给发送方。ICMP应用Traceroute,就是让发送的UDP用户数据报故意使用一个非法的UDP端口,结果ICMP返回“端口不可达”差错报文,因而达到了测试的目的。

2.整个数据报文的长度

在目的端口后面是长度固定的以字节为单位的报文长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。

3.整个数据报文的检验和,该字段用于发现头部信息和数据中的错误

首部剩下的16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,在实际应用中一般都使用这一功能。且UDP和TCP的校验和都覆盖到了他们的首部和数据

四、UDP协议使用的场景

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

2.不需要一对一沟通,建立连接,而是可以广播的应用。DHCP就是一种广播的形式。VXLAN也是需要用到组播,也是基于UDP协议的。

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

文章名: 《网络通信学习之——TCP与UDP协议(1)》

文章链接:https://www.yfriend.xyz/510.html

除特别注明外,文章均为深度博客所创,转载时请注明本文出处及文章链接
Last modification:May 2nd, 2020 at 11:38 am
如果觉得我的文章对你有用,请随意赞赏