我是靠谱客的博主 儒雅黑猫,最近开发中收集的这篇文章主要介绍详解 UDP 协议一、传输层中的 UDP 协议,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

详解传输层中的 UDP 协议

  • 一、传输层中的 UDP 协议
    • 1. UDP 协议端格式
    • 2. 对于校验和进行一些拓展
    • 3. 拓展
      • (1) 了解 crc 校验和
      • (2) md5 算法
        • md5 算法的特性

一、传输层中的 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 算法也可以用作密码学的场景。

最后

以上就是儒雅黑猫为你收集整理的详解 UDP 协议一、传输层中的 UDP 协议的全部内容,希望文章能够帮你解决详解 UDP 协议一、传输层中的 UDP 协议所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部