• 详解 UDP 协议


    一、传输层中的 UDP 协议

    UDP:User Datagram Protocol ( 用户数据报协议 )

    1. UDP 协议端格式

    1

    注意几个点:

    • 源端口号相当于发件人的号码
    • 目的端口号相当于收件人的号码
    • 一个 UDP 数据报的最大长度为 64KB
      1

    2. 对于校验和进行一些拓展

    在网络编程中传输的数据,受网络波动、网络传输的延迟性等影响,可能会造成在传输数据的过程中,出现一些问题。网络传输的数据本质都是一些 【 0 / 1 】的比特流,这些 bit 流都是通过光信号或者电信号来表示的。如果传输过程中,受到干扰, 就容易出现 " 比特翻转 " 的情况 ( 磁场、辐射… ) ,这就会使得 0 转换成 1,1 转换成 0

    而校验和这一机制,其实就是为了验证当前的数据是不是出现问题了。

    对校验和举个例子:

    我现在去超市买东西,我准备买 【 铅笔 + 矿泉水 + 薯片 + 牙刷 】这四样商品,在出发前,我心中牢记有四样商品要买,当到柜台结账之前,我把手中的商品数一数,发现是四件,说明是对的,如果是三件或五件,那么就是错了…

    但是这就有一个弊端,当我把矿泉水买成果汁了,但结果还是四样商品,那么就还是出错了…那么,检验和这一机制的存在一定能证伪。当传输之前的数据相加为 A ,传输之后的数据相加为 B ,两者不同,说明是出错了。而传输之前的数据相加为 A ,传输之后的数据相加为 A ,这不能保证中间的数据没有改变!

    3. 拓展

    那么在网络编程中,怎么才能既验证中间数据,又能验证结果呢?接下来,我们一起来看看两种校验和的方式。

    (1) 了解 crc 校验和

    CRC:Cyclic Redundancy Check ( 循环冗余码校验 )

    现在有一串数据,把其当作二进制的数据,依次按照字节为单位取出数据,然后将这些数据进行累加。( 在累加的过程中,若溢出了,则溢出的部分就舍弃 )
    传输数据的时候,把【 数据 与 crc 校验和 】一起传输给目标,当接收方收到了【 数据 与 crc 校验和 】,接收方就需要验证一下, 查看当前的数据是否是对的。

    此时接收方是这么做的:接收方按照同样的算法,再针对数据部分,计算一遍 crc 校验和,把这个新计算的结果和收到的 crc 校验和进行对比,看看结果是不是一致的。

    本质上,就是在网络传输数据之前,算一遍 crc,接收数据之后,也算一遍 crc 。如果这个数据在传输之前和传输之后,数据内容不变,那么新计算的 crc 也是一致的。如果传输过程中出现了比特翻转,接收到的数据和传输之前的数据就不一样,此时,前后两份 crc 大概率是不相同的。

    (2) md5 算法

    md5 算法是一种哈希算法,确切地说:它是一个 " 非对称的哈希算法 ",md5 算法的应用场景非常多,用作校验和只是其中的一个场景。我们之前学过的数据结构常用的是针对整数的哈希算法,数据结构中见的最基础的可能就是通过数组求余数。而 md5 算法就是一个典型的字符串哈希算法。
    md5 算法本质上是针对数据进行一系列的数学变换…我们暂且不考虑数学运算,我们看看其对应的特性,以及为什么它可以作为检验和的功能。

    md5 算法的特性

    • 定长:无论输入的字符串是多长多短,得到的 md5值 都是固定长度。
    • 分散:只要输入的字符串,哪怕只变化了一点点,得到的 md5 值 都会差别巨大,当然,这也是当前哈希算法的核心所在。
    • 不可逆:给定原字符串,很容易得到 md5 值;但给定了 md5值,恢复出原始的字符串的概率几乎为 0

    那么,md5 的分散性就可以用作检验和,为什么呢?
    因为两个数据相同的 md5 值是相同的。那么如果两个数据不同,哪怕只是有一点差别,这时两者的 md5值 差别就很大,以此来作为网络传输前后数据的检验。另外,md5 算法也可以用作密码学的场景。

  • 相关阅读:
    ElasticSearch系列-简介与安装详解
    智能出价策略如何影响广告效果?
    ROS Melodic安装
    TienChin 活动管理-准备工作
    项目实施方案:多点异地机动车典型系统试验状态可视监控系统
    MATLAB:使用JADE解决带约束的单目标优化问题
    【文件读取/包含】任意文件读取漏洞 afr_3
    候选公示!高工智能汽车金球奖第二批入围年度产品/方案亮相
    DTFT和DFT有何区别?一文为你讲解清楚
    数据可视化大屏模板 | 保姆级使用教程
  • 原文地址:https://blog.csdn.net/lfm1010123/article/details/126000682