一.什么是UDP协议:
1.1UDP的基本概念
UDP协议又叫做用户数据报协议,是一个目标在传输层提供直接发送报文的能力,UDP与TCP相比,它不会拆分数据,它只是能够发送报文。
1.2为什么要使用UDP协议
我们可能会想,如果只是单纯地发送数据,为什么不直接使用IP协议。这是因为传输层协议在承接上方应用层的调用,需要提供应用到应用的通信,也就是说需要附上端口号。每一个端口代表不同的应用。但是IP协议不能区分应用,IP协议只是承接传输层的调用,将数据从主机传输到主机。所以就为UDP协议的应用提供了空间。
1.3UDP协议的封包格式
使用UDP协议就是为了用户能够直接发送报文,最大限度地简化应用的设计。UDP的报文格式只有五个部分:
**1.Source Port:**源端口号,因为UDP协议不需要ACK确认报文,所以这个字段是可以省略的。但是对于代理和防火墙来说,这个字段是非常重要的。
**2.Destination Port:**目标端口号,不可以省略
**3.Length:**表示消息体长度
**4.Checksum:**表示校验和,来检查封包是否出错
**5.Data octets:**表示一个字节一个字节的数据,Octet是8位。
二.UDP中的校验和机制
2.1UDP校验和的实现方式:
1.计算校验和:发送端在发送UDP数据包之前会对UDP数据报文的内容进行校验和计算。首先将UDP报文数据划分为以16比特为单位的字(字节数不够的可以补零),把这些字节相加然后取反。
2.校验和字段:发送端将计算得到的检验和值放在UDP数据报的校验和字段中。
3.接受端验证:接收端在接收到UDP数据包后,会进行校验和的验证,将UDP数据报文划分为16比特的字,并对其进行求和计算,然后将计算的到的校验和与UDP数据包中的校验和字段进行比较,如果相等,则认为数据包未损坏,如果不相等,则认为数据包可能已经损坏。
UDP的校验和机制并不提供数据的可靠性传输,它只能检测到一部分错误,并不能保证数据的完整性和可靠性。因为UDP的校验和机制只是对UDP数据报中的数据进行简单的加法和取反操作,接收内容不同但是计算出的校验和值相同的情况是会出现的。
三.UDP与TCP的区别
3.1目的不同:
TCP协议是为了提供可靠的网络传输协议,而UDP是为了在提供报文交换能力的基础上尽量轻装上阵
3.2可靠性差异:
TCP协议是保证提供可靠的服务,所以在建立连接时会有三次握手机制,保证通信的双方都在线,并且TCP协议具有时间窗口来持续收集无序的数据,直到这些数据成功的排列成发送的顺序;而UDP并没有以上的特性,UDP协议只管发送数据包,并不需要ACK(确认报文),所以不能保证数据是否发送成功。
3.3传输速度:
与TCP协议相比,UDP协议更加轻量级,并且封包小,没有连接,可靠性检查,所以UDP比TCP的传输速度快。
3.4有无连接:
TCP是一个面向连接的协议,如果需要传输数据,则必须要先建立连接,而UDP是一个无连接协议,可以随时发送数据。
3.5流控技术:
TCP协议采用了流控技术来确保发送方不会因为一次发送过多的数据报而使接收方不堪重负,TCP在发送缓冲区中存储数据,并在接收缓冲区中接收数据。当应用程序准备就绪时,接收方从接收缓冲区中读取数据,如果接收缓冲区已满,接收方将无法处理更多的数据,并将其丢弃,这是TCP的流控技术,而UDP则没有相应的功能。
3.6适用场景不同:
使用TCP协议每个数据封包都需要确认,所以不太适合高速数据传输的场景。比如在网络游戏场景中,如果使用TCP协议,每个封包都需要确认,就会造成一定的延迟,体验感不好;再比如观看视频的时候,因为音频和视频数据在传输的时候天生就允许一定的丢包率,所以不太适合使用TCP。而对于一些只需要一次简单的请求或者返回的操作,使用UDP比较合适。