前端最常用的网络协议中,应该就是UDP和TCP了。

一、UDP协议

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议。

UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP因为不保证向上层提供消息传递,且UDP层在发送后不会保留UDP消息状态,因此,在传输数据上,不靠谱,会有丢包的情况,UDP丢包指网卡接收到数据包后,linux内核的tcp/ip协议栈在udp数据包处理过程中的丢包,主要原因有两个:

1、udp数据包格式错误或校验和检查失败。 2、应用程序来不及处理udp数据包。

二、UDP的优缺点

优点:

        简单,轻量化,速度快

缺点:

        没有流控制,没有应答确认机制,不能解决丢包、重发、错序问题。

注意:并不是所有使用UDP协议的应用层都是不可靠的,应用程序可以自己实现可靠的数据传输,通过增加确认和重传机制

三、UDP适用场景

直播、语音通讯、视频会议、多人实时竞技游戏,因为UDP的速度比TCP快,即时。而TCP的特性,一旦丢包就会重发,阻塞住后续的数据包,因而可能会产生一个较大的瞬时延迟。

在这几个场景中,使用UDP协议,无需建立连接,而TCP 在数据传输之前需要经过三次握手的操作,而 UDP 则无须任何准备即可进行数据传输,因此 UDP 没有建立连接的时延。

无连接状态,TCP 需要在端系统中维护连接状态,连接状态包括接收和发送缓存、拥塞控制参数以及序号和确认号的参数,在 UDP 中没有这些参数,也没有发送缓存和接受缓存。因此,某些专门用于某种特定应用的服务器当应用程序运行在 UDP 上,一般能支持更多的活跃用户。

无连接:

UDP 不需要和 TCP 一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。
并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
具体来说就是:
        在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
        在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作。

不可靠性:

首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

高效:

虽然 UDP 协议不是那么的可靠,但是正是因为它不是那么的可靠,所以也就没有 TCP 那么复杂
了,需要保证数据不丢失且有序到达。因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时很高效。