网络原理之 UDP-UDP 报文的格式

在这里插入图片描述
基本上所有计网的教材中都有这个图片

以下比较准确
在这里插入图片描述

端口号

  1. 每个端口号在 UDP 报文中, 占据两个字节
    端口号的取值范围是 0 - 65535
  2. 其中 < 1024 的都是一些知名的端口号, 给一些名气大的服务器预留的端口(这部分端口写代码不应该使用), 其实用了也没事, 但是需要管理员权限才能使用
  3. 例如
    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站上了解一下, 这是一个非常简单粗暴的算法

上一篇:[置顶] 星际争霸2 AI开发


下一篇:Django+Vue智慧分析居家养老系统统的设计与实现