UDP介绍

UDP:用户数据报协议(User Datagram Protocol,简称UDP)
UDP是一种无连接、不可靠的协议,它不提供像传输控制协议(TCP)那样的可靠数据传输机制。
UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法
在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供资料的不可靠传递,它一旦把应用程序发给网络层的资料发送出去,就不保留资料备份(所以UDP有时候也被认为是不可靠的资料包协议)。UDP在IP资料包的头部仅仅加入了复用和资料校验字段。

UDP报文格式

报文长度
该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
UDP总长度字段=IP总长度-IP首部长度

校验和
校验和字段可以用于发现头部信息和数据中的传输错误。该字段在IPv4中是可选的,在IPv6中则是强制的。如果不使用校验和,该字段应被填充为全0。
首部+数据

UDP校验和计算

当UDP运行在IPv4之上时,为了能够计算校验和,需要在UDP数据包前添加一个“伪头部”。伪头部包括了IPv4头部中的一些信息,但它并不是发送IP数据包时使用的IP数据包的头部,而只是一个用来计算校验和而已。

UDP数据传输

客户端给服务端发送UDP数据报文,时服务端发现UDP报文校验和错误,会将这个数据包进行丢弃,UDP并没有纠错机制,当发现错误这个纠错的工作将会由它的上层应用层进行
客户端访问服务端没有开启的UDP端口并不会告诉客户端端口没有开启,因为UPD没有像TCP的RST这样的报文,所以它没有办法告诉客户端端口没有开启,因此需要结合三层的ICMP协议,在ICMP里有一种叫做ICMP端口不可达报文,那么当访问了UDP不存在的端口服务端会返回一个ICMP端口不可达的报文,告诉客户端这个端口没有开启。

最后修改:2023 年 10 月 26 日
如果觉得我的文章对你有用,请随意赞赏