基本上所有计网的教材中都有这个图片
以下比较准确
端口号
- 每个端口号在 UDP 报文中, 占据两个字节
端口号的取值范围是 0 - 65535 - 其中 < 1024 的都是一些知名的端口号, 给一些名气大的服务器预留的端口(这部分端口写代码不应该使用), 其实用了也没事, 但是需要管理员权限才能使用
- 例如
http 80
ssh 22
ftp 21
1 - 1023 相当于是 vip 席位, 0 虽然合法但是没有人使用
报文长度
由于其中报文长度最多为 2 个字节, 也就是最多只能表示两个字节, 0 - 65535 == 64KB
所以一个 UDP 报文的最大长度就是 64KB
所以使用 UDP 编程时, 一定要注意数据报的长度不能太长, 否则会出现问题
校验和
由于网络传输是通过电信号, 也就是高低电平表示 0 或者 1 的
如果受到了外部的环境干扰, 如强磁场、太阳黑子等一些干扰, 就有可能导致高电平 -> 低电平, 低电平 -> 高电平
也就是发生了比特翻转,数据传输就出错了
所以就诞生了校验和, 来判定一下, 当前的数据是否出错
如果校验和不对, 此时你的数据一定是错的
如果校验和对, 但是数据也有一定的概率会出错
一般校验和是通过取内容/ 内容的一部分, 通过一些数学公式变换, 算术运算, 得到一个数值.
如果内容发生变化, 校验和也会发生变化, 例如奇偶校验
例如
发送方, 将数据载荷带入到校验和算法中, 进行计算得到校验和的结果. 设置为 sum1
接收方收到的数据后, 可以利用同样的算法, 对载荷重新计算一遍校验和, 得到 sum2
对比 sum1 和 sum2 进行对比, 如果不相同的话,一定是数据有问题
UDP 一般使用的是 CRC 算法, 感兴趣可以去 b站上了解一下, 这是一个非常简单粗暴的算法