【UDP的报文结构】

特点

  • 无连接:无需建联断联,发完即走,就像发消息一样,不需要建立连接,只需要消息发出和被收到
  • 不可靠传输:不提供任何传输层的可靠性保障机制,后面说到TCP的时候会提到什么是可靠什么是不可靠
  • 面向数据报:保边界,一次发送一次接收,整包交付,应用层交给UDP多长的报文,UDP都原样照发
  • 全双工:同一端口对可同时收发数据。半双工就像单向车道一样,只能单车通行,不能双车对向行驶。全双工就是双向车道

结构

  • UDP数据报 = 报头 + 载荷(应用层数据包)
  • 报头和载荷之间可以想象成字符串拼接的过程
  • UDP的载荷就负责承载数据包里的内容
  • UDP报头一共4个字段,一个字段2字节,一共8字节
  • 两个端口号都是2个字节来表示的,所以取值是0到65535
  • 数据报长度:使用两个字节来表示,用这一个数据来表示,一个UDP数据报有多长。
  • 由于是两个字节来表示的,所以这里能表示的最大值就是64KB(65535),因此一个UDP数据报最大长度就是64KB,无法更长了。
  • 一旦整个数据报的长度超出了64KB此时就可能会出现数据截断,导致原本数据是完整的,但是后面的部分表示不出来,没了

总的UDP数据报能表示的最大长度是64KB,载荷部分实际能够承担的最大长度应该是64KB - 8(自身的),64KB - 8 约等于 64KB,我们使用语言描述的时候就会采取近似值

  • 校验和:在网络传输的过程中,数据可能受到外界环境的干扰,发生比特反转,然后坏掉。网络中的校验和并非是简单的按照长度或者数量作为校验的标准,而是一定要让数据的内容能够参与进去。
  • UDP中,校验和,使用比较简单的方式-->CRC算法(循环冗余校验)来完成校验
  • 比如,要生产一个两个字节的校验和,这里我们写一段伪代码
short 复制代码
for(遍历取出数据报中的每个字节的数据){
      checksum += 当前字节的数据
 }
  • 在加的过程中,数据可能比较大,会超出short两个字节的范围,我们也不需要在意,因为最后都是一个固定的结果
  • UDP数据报发送方,在发送前,先计算一遍CRC,然后把算好的CRC值放到UDP数据报的校验和中,接下来数据包到达对端,对端接收数据之后,也会再计算一般CRC,然后对比两边计算出来的校验和是否一致,如果不一致,说明在传输的过程中损坏了
  • 严格来说,校验和只能用来证明真伪,如果数据出错了,是无法确保这个数据100%正确。但在实践中可以近似的认为校验和一致,原来的数据就一致
  • ⚠️如果有多个比特位发生了,校验和是有小概率出现,恰好还和之前算出的校验和一样的情况。这样的情况概率比较低,可以忽略不计,如果希望这里有更高的检查精度,就需要用到其他更为严格的校验和算法了

高精度校验和算法

  • md5算法是业界常用的校验和算法
  • md5的背后有一系列的数学公式,来进行计算,不同于CRC这么简单
  • 认识一下md5的特点
  • 1.定长:无论原始数据有多长,计算出来的md5的最终值都是固定长度
  • 2.分散:计算md5的过程中,原始数据,只需要变化一点点,算出的md5值就会有很大的差异,在网络传输中,如果出现了比特翻转,意味着只是极少的比特位翻转了,也会导致最终的md5差异很大
  • 3.不可逆:把数据计算成md5值的过程很简单,但是给你一个算好的md5值,让你还原回原始的字符串,理论上是无法完成的。从原始的字符串到md5这个过程,有很多的信息量损失了,就像是木头到纸的过程,你看着一张纸很难想象到它是由木头制作而来的。
  • 由于这些特性,md5也可以用于一些加密的场景,很多网站都会采取密码加密存储的方式,防止密码的明文泄露
相关推荐
闲人编程2 小时前
使用FastAPI和WebSocket构建高性能实时聊天系统
websocket·网络协议·网络编程·fastapi·持久化·实时聊天·codecapsule
惊讶的猫2 小时前
OpenFeign(声明式HTTP客户端)
网络·网络协议·http·微服务·openfeign
心.c3 小时前
TCP协议深入解析
网络·网络协议·tcp/ip
摇滚侠3 小时前
HTTP 404 - No response body available
网络·网络协议·http
全栈工程师修炼指南3 小时前
Nginx | stream content 阶段:TCP 协议四层反向代理浅析与实践
运维·网络·网络协议·tcp/ip·nginx
Trouvaille ~3 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
CSCN新手听安3 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
REDcker4 小时前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
任白4 小时前
OSI参考模型&&TCP/IP模型
网络协议