当前位置: 首页 > news >正文

网络协议 UDP协议

网络协议 UDP协议

在之前的文章中有对UDP协议套接字的使用进行讲解,本文主要对UDP协议进行一些理论补充。

文章目录

  • 网络协议 UDP协议
    • 1. 概念
    • 2. UDP协议格式
      • 2.1 数据报长度
      • 2.2 校验和/检验和
        • 2.2.1 CRC校验
        • 2.2.2 MD5算法

1. 概念

UDP,即User Datagram Protocol(用户数据报协议),为传输层协议

特点:

  • 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;
  • 不可靠传输:没有确认机制,没有重传机制;如果因为网络故障该段无法发送给对方,UDP协议层也不会给应用层返回任何错误信息;
  • 面向数据报:不能够灵活的控制读写数据的次数和数量;

2. UDP协议格式

在这里插入图片描述

对于UDP数据报来说,遵循 UDP数据报 = 报头 + 载荷(应用层数据包)

在这里插入图片描述

2.1 数据报长度

由上述两图可以看出,UDP报头中一共有4个字段,每个字段2个字节(16个bit位),一共8个字节。

其中UDP协议首部中有一个16位的最大长度,也就是说UDP数据报最大长度是64KB(包含UDP首部)

2.2 校验和/检验和

在网络传输的过程中,数据可能会收到外界环境的干扰(如光信号/电信号)而出现问题,常见的有比特翻转

网络中的校验和并非是简单的按照长度/数量作为校验的标准,一定要让数据的内容能够参与进去,对此,在UDP中校验和一般是使用以下两种方式:

2.2.1 CRC校验

循环冗余校验(Cyclic Redundancy Check, 简称CRC)。

它的操作概述如下:

UDP数据报发送方在发送之前,先计算一遍CRC,把算好的CRC值放到UDP数据报中(设这个CRC值为value1)。接下来这个数据报通过网络传输到达接收端,接收端收到这个数据之后,也会按照同样的算法再算一遍CRC的值,得到的结果是value2,比较自己算的value2和收到的value1是否一致,如果一致,就说明数据是正确的,如果不一致,则传输过程中发生了比特翻转.

上述CRC算法中,如果只有一个bit位发生翻转,此时100%能够发现问题,但如果有两个/多个bit位发送翻转,有可能恰好校验和与之前一样!(这样的情况概率比较低,可以忽略不计)

2.2.2 MD5算法

MD5算法一般用于确保信息传输完整一致,它有以下特点:

  • 定长:任意长度的数据,算出的MD5值长度都是固定的
  • 分散:计算md5过程中,原始数据只要变化一点点,算出来的md5值就会有很大差异
  • 不可逆:提供一个源字符串计算md5值过程非常简单,但提供一个算好的md5值,,将它还原回原始的字符串,理论上是无法完成的

在进行校验和的适合可以使用MD5算法这种高精度的校验和算法!

http://www.lryc.cn/news/292678.html

相关文章:

  • 爬虫笔记(三):实战qq登录
  • 又涨又跌 近期现货黄金价格波动怎么看?
  • 软件压力测试:探究其目的与重要性
  • Android.bp入门指南之浅析Android.bp文件
  • 2024年美赛 (D题ICM)| 湖流网络水位控制 |数学建模完整代码+建模过程全解全析
  • 安卓网格布局GridLayout
  • DHCP简介
  • Hadoop生态系统中一些关键组件的详细解析
  • 功能强大的开源数据中台系统 DataCap 2024.01.1 发布
  • Redis的bitmap使用不当,我内存爆了
  • 基于python的新闻爬虫
  • C#基础题
  • AI大语言模型学习笔记之三:协同深度学习的黑魔法 - GPU与Transformer模型
  • c++阶梯之auto关键字与范围for
  • 第八篇:node模版引擎Handlebars及他的高级用法(动态参数)
  • css3 属性 backface-visibility 的实践应用
  • 嵌入式学习第十七天
  • 使用Python的Turtle模块简单绘制烟花效果
  • 数学建模-退火算法和遗传算法
  • Qt开源版 vs 商业版 详细比较!!!!
  • 华为云CodeArts Snap荣获信通院优秀大模型案例及两项荣誉证书
  • 小程序的应用、页面、组件生命周期(超全版)
  • TCP四次握手
  • EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?
  • C++ Web 编程
  • docker笔记整理
  • 什么是git,怎样下载安装?
  • Camille-学习笔记-测试流程和测试设计
  • 【Python笔记-设计模式】建造者模式
  • 【LVGL源码移植】