5.7.2 UDP协议格式(一)——UDP差错控制

5.7.2 UDP协议格式(一)——UDP差错控制

前面我们学习了UDP数据报格式(5.7.1 UDP概述)我们知道UDP只是在IP数据报服务基础上增加了端口的复用和分用功能,以及差错控制的功能,这里我们就一起来学习一下UDP的差错控制方法。在学习前我们先要明白传输层和网络层差错控制的区别,因为有人觉得,既然网络层已有差错控制,为什么传输层还要进行差错控制

一、传输层与网络层差错控制的区别

如图

IP数据报

在网络层中的差错控制是在IP数据报首部中有一个首部校验和字段,它使用的是仿码二进制相加法,它只校验IP数据报的首部,对于IP数据报中的数据部分是不进行数据差错控制的,这样做的目的是因为IP数据报每经过一个路由器都需要重新计算校验和,相对比较繁琐。所以为了提高传输效率,IP数据报首部中校验和字段仅仅校验了IP数据报的首部是否出现差错。而不检查它的数据部分,这样做的优点在于他大大解约了路由器处理每一个报文的时间,因为他非常符合IP数据报中的尽力而为的思想。当然这种方法也有一个非常明显的缺点就是给上一层留下了一个数据是否可靠的问题,在这样的情况下IP数据报的首部与数据部分校验分开允许在上一层选择自己的校验方法。

于是在计算机网路中采用的补充的方法就是在传输层中使用一个对报文段进行差错校验和检测的方法。为了保证将应用层的数据正确的交付给应用进程。

如图

校验和

传输层的TCP和UDP的校验和既要校验TCP/UDP报文段的首部也要校验数据部分,并且只在发送方进行一次校验和的计算,在接收端进行一次检验即可。因为报文段在转发过程中中间的路由器对TCP报文段和UDP的用户数据报而言是透明的,它不会重复计算TCP/UDP报文段首部的校验和。校验和的计算过程我们后面再说。

二、UDP校验和计算

这里我们应该知道UDP校验包含了三个部分

  1. UDP首部

  2. UDP报文内的数据

  3. 伪首部:在计算UDP或者TCP校验和之前还要增加12个字节的伪首部

    如图

    伪首部

    所谓的伪首部是因为这样的首部它仅仅是在计算校验和时所使用,它既不向下层传送,也不递交给上层,

UDP校验和的计算过程如下:

  1. 首先把校验和字段清零
  2. 把所有需要校验的数据划分为16比特的序列也就是两个字节划分成一段
  3. 对序列进行仿码二进制求和
  4. 求和后的结果再取反,结果得到我们需要的校验和。

三、采用计算方法的原因

为什么要使用增加伪首部的方法来计算UDP或者TCP的校验和呢?

主要是考虑要对完整通信双方五元组(5.6.3 套接字)的信息进行校验,五元组包括<源IP地址,源端口,目的IP地址,目的端口,传输协议>,对于这样的特点就要求处理尽可能的简单,处理要快,便于实现高速的数据传输,当然这里我们应该知道端口的信息是在UDP上的。而IP地址和传输协议则是取自于IP数据报的首部。

五元组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/5331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UE5 Cesium】03-Cesium for Unreal 添加本地数据集

上一篇&#xff1a;【UE5 Cesium】02-Cesium for Unreal 添加在线数据集 步骤 1. 在官网&#xff08;Adding Datasets – Cesium&#xff09;上下载一个示例 下载的是一个名为“Tileset.zip”的压缩文件 解压后文件内容如下 2. 打开虚幻编辑器&#xff0c;点击“Blank 3D Tiles…

基于SpringBoot的在线拍卖系统【附ppt和万字文档(Lun文)和搭建文档】

主要功能 主要功能 前台登录&#xff1a; ①首页&#xff1a;轮播图、竞拍公告、拍卖商品展示 ②拍卖商品&#xff1a;分类&#xff1a;手机、数码、电器等&#xff0c;可以点击商品竞拍 ③竞拍公告&#xff1a;可以查看竞拍的信息 ④留言反馈&#xff1a;用户可以提交留言 ⑤…

Windows同时安装两个版本JDK,并实现动态切换

1、载安装两个版本的JDK 安装后&#xff0c;默认路径C:\Program Files\Java。 实际上JDK8有两个包一个jdk1.8.0_311&#xff0c;一个jre1.8.0_311。 JDK11只有一个jdk-11.0.16.1。 2、系统环境配置 设置JAVA_HOME 在环境变量中选中Path&#xff0c;点击编辑 点击新建&…

kubernetes核心概念 service

kubernetes核心概念 Service 一、 service作用 使用kubernetes集群运行工作负载时&#xff0c;由于Pod经常处于用后即焚状态&#xff0c;Pod经常被重新生成&#xff0c;因此Pod对应的IP地址也会经常变化&#xff0c;导致无法直接访问Pod提供的服务&#xff0c;Kubernetes中使…

Verilog基础之十三、ROM实现

目录 一、前言 二、非IP核设计 2.1 工程设计文件读取初始化 2.2 测试代码 2.3 仿真结果 三、IP核创建ROM 3.1 IP核生成ROM 3.2 设计代码 3.3 测试代码 3.4 仿真结果 四、modelsim设置 4.1 模拟信号显示 4.2 信号范围显示设置 五、数据文件 一、前言 对于工程中的…

HashMap源码分析

文章目录 1、put方法流程2 、扩容机制3 、get方法 分析源码我们一般从三个方面入手&#xff1a; 常见属性&#xff08;成员变量&#xff09;构造方法关键方法 下面分析一下HashMap源码&#xff1a; 首先常见属性有&#xff1a; DEFAULT_INITIAL_CAPACITY 1 << 4; // a…

Flink 自定义源算子之 读取MySQL

1、功能说明&#xff1a; 在Flink 自定义源算子中封装jdbc来读取MySQL中的数据 2、代码示例 Flink版本说明&#xff1a;flink_1.13.0、scala_2.12 自定义Source算子&#xff0c;这里我们继承RichParallelSourceFunction&#xff0c;因为要使用open方法来初始化数据库连接对…

docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

Oracle 19c测试环境快速搭建 安装 # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /mymount/oracle19c/oradata # 授权&#xff0c;不授权会导致后面安装失败 chmod 777 /mymount/oracle19c/oradatadocker run …

微服务-基于Docker安装Sentinel

目录 1、拉取Sentinel镜像 2、构建Sentinel容器 3、访问Sentinel 1、拉取Sentinel镜像 代码&#xff1a; docker pull bladex/sentinel-dashboard:1.8.0 实例&#xff1a; rootlocalhost howlong]# docker pull bladex/sentinel-dashboard:1.8.0 1.8.0: Pulling from blade…

小程序data-*的误区

场景&#xff1a;点击按钮获取data-*的值跳转页面&#xff0c;跳转页获取传过来的参数 binnie: 华哥&#xff0c;为什么有的部分参数传不过去然后显示undefined&#xff1f; 华哥&#xff1a; binnie, 我看了一下你的代码&#xff0c;你错在属性名有大写字母了。我给你写了个…

MySQL之MHA高可用配置及故障切换实例

目录 一、MHA概述1.1 什么是MHA&#xff1f;1.2 MHA的组成<font colorblue>MHA Node &#xff08;数据节点&#xff09;<font colorblue>MHA Manager &#xff08;管理节点&#xff09;1.3 MHA 的特点 二、 MHA搭建准备2.1 实验思路2.2 实验准备 三、 MHA搭建的步骤…

变压器铜铝材质分析仪技术参数

一、主要技术指标 1.输入特性 有源部分&#xff1a; 电压测量范围&#xff1a;0~10V 电流测量范围&#xff1a;0~10A 无源部分&#xff1a; 电压测量范围&#xff1a;0~750V 宽量限&#xff08;可以外接电压互感器&#xff09;。 电流测量范围&#xff1a;0~100A内部自动…