传输层—UDP—校验和

传输层---UDP---校验和

学习一个协议,当然要掌握协议的特性,还需要理解协议报文格式。

UDP

UDP 基本特点:无连接、不可靠传输、面向数据报、全双工

UDP报头包含:源端口、目的端口、UDP报文长度、校验和。

UDP载荷中:是完整的应用层协议数据

在传输层,一次通信,涉及到 5 元组。(源端口、目的端口、源IP、目的IP,协议类型)

端口号:最大是2个字节,能表示多大的数据范围呢? 0 ~ 65535,这就是合法端口号的有效范围,不能再大了(实际上 0 不会使用的)。1-1024 这个范围的端口号,系统赋予了特定的含义,一般也不建议咱们使用。(相当于飞机的头等舱仓,都是知名端口号)

UDP报文长度:最大2个字节,传输数据时是16位,其范围也是 0~65535 字节,换算一下就是 64 kb。一个 UDP 报文长度最长也就是 64kb.

对于 199x 那个年代来说,64kb 可谓是一个很大的数字,可以表示很多东西。

但对于现在的我们来说,64kb 非常小。那我们能不能把这个长度给改大呢,用4个字节来表示??答案是否定的。

那我们在写程序的时候,传输的报文超过2字节怎么办??

  1. 在应用层中,把数据拆分成多组,通过多个UDP数据报进行传输
  2. 使用 TCP 代替 UDP。TCP 没有要求报文长度。

以下的字节范围大小需要牢记。

校验和

在网络传输中,受到外界干扰,数据可能会出错!!

因此,在接收方收到数据后,就需要先确认一下,这个数据是否是一个错误的数据。校验和就是简单有效的方式。

例子:

我去市场买菜,列出一个清单:黄瓜、鸡蛋、西红柿、芹菜。一共四样。

当我卖完菜了,清点一下数目发现不对劲,只买了三样菜,此时就发生了异常。

实际的校验和,不仅仅是一个"长度",而是根据数据的内容来生成的。当内容发生改变的时候,就能感知出错误。

UDP 的校验和具体是咋实现的? 使用了一种简单粗暴的 CRC 校验算法。(循环冗余校验和)

加着加着,可能就溢出了~~溢出也无所谓。所有字节都加了一遍,最终就得到了校验和。传输数据的时候,就会把原始数据和校验和一起传递过去。接收方收到数据,同时也收到了发送端送过来的校验和(I日的校验和)。接收方按照同样的方式再算一遍,得到新的校验和。如果旧的校验和和新的校验和相同,就可以视为数据传输过程中是正确的。如果不同,则视为传输过程中数据出错了。

但是,有时候会出现,校验和相同,但是传输的数据和发送时候的数据不同,也就是数据发生错误,但校验和是对的。

原因:好巧不巧,某个字节,多了1。某个字节,少了1。二者相加,正好抵消。

此校验和方法并不是那么严谨,但在工程上,也是够用的。

相关推荐
DianSan_ERP27 分钟前
电商架构演进:如何在高并发场景下实现多平台API的标准化履约?
运维·前端·网络·安全·架构·自动化
阿成学长_Cain44 分钟前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
青瓦梦滋1 小时前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
驭渊的小故事5 小时前
网络原理01(两千字解析)
网络
我今晚不熬夜6 小时前
Java语言实现Modbus协议通过用串口读取数据(以RTU为例)
java·网络协议
KaMeidebaby7 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
阿成学长_Cain9 小时前
Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握
linux·运维·前端·网络
skd89999 小时前
万能查任意网络设备IP工具
服务器·网络·tcp/ip
NiceCloud喜云10 小时前
Anthropic 一周三连发:Cowork 多端、Fable 5 按需付费、J-space 论文的技术解读
java·服务器·网络·人工智能·ai
门思科技10 小时前
TKL + EB:重新定义 LoRaWAN 在存量设备改造中的价值,让传统设备快速接入物联网
网络·物联网