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

news/2024/5/18 14:00:39 标签: 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.niftyadmin.cn/n/479961.html

相关文章

C语言的##使用

##在C/C中具有连接字符串的作用 #include<stdio.h> #define TEST(_name, _inst_alloc) \printf("token6 %d\n",_name##_inst_alloc); int main() {int token6 100;TEST(token, 6);return 0; }

6.28(reg query)注册表

reg query 是一个Windows操作系统中用于查询注册表&#xff08;Registry&#xff09;的命令。注册表是Windows操作系统中存储系统设置、应用程序配置以及用户信息等的一个核心组件。reg query 命令可以帮助你查找、显示和获取特定注册表项的信息。 reg query “HKLM\SOFTWARE…

经典算法-两数之和、三数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任…

(小程序)基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

(小程序)基于uniappvite4vue3搭建跨端项目|uni-appuview-plus模板 版本信息&#xff1a; HBuilderX: 3.8.4 Vite: 4.2.1 uView-Plus: 3.1.31一、创建uniappvue3项目&#xff1a; 点击编辑器的文件 > 新建 > 项目&#xff08;快捷键CtrlN&#xff09; 2.选择uni-app项目&…

一步一步学OAK之二: RGB相机控制

今天我们来实现 RGB相机的控制程序&#xff0c;用来控制彩色相机的曝光、灵敏度、白平衡、亮度/色度降噪、 设备端裁剪、相机触发器等。 目录 Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 全局变量Setup 5: 定义clamp函数Setup 6: 创建pipelineSetup 7:…

突破性5G NTN技术,美格智能携手高通发布卫星物联网连接方案

通信技术的快速发展&#xff0c;使得万物互联成为现实&#xff0c;物联网深刻影响我们的生活方式。目前&#xff0c;全球物联网连接主要由WiFi、蓝牙和蜂窝网络等几类技术支撑。数据显示&#xff0c;蜂窝基站的陆地覆盖率约为20%&#xff0c;而海洋覆盖率则不到5%。 这意味着陆…

十分钟实现 Android Camera2 视频录制

1. 前言 因为工作中要使用Android Camera2 API&#xff0c;但因为Camera2比较复杂&#xff0c;网上资料也比较乱&#xff0c;有一定入门门槛&#xff0c;所以花了几天时间系统研究了下&#xff0c;并在CSDN上记录了下&#xff0c;希望能帮助到更多的小伙伴。 上两篇文章们使用…

深入理解容器镜像

Mount Namespace 修改的&#xff0c;是容器进程对文件系统“挂载点”的认知。但是&#xff0c;这也就意味着&#xff0c;只有在“挂载”这个操作发生之后&#xff0c;进程的视图才会被改变。而在此之前&#xff0c;新创建的容器会直接继承宿主机的各个挂载点。 Mount Namespac…