UDP协议

article/2025/9/12 22:24:52

引言

  本文中只关于IPv4;UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。总之,能没有的都没了。但它提供了差错检测,是一种端到端的校验和。因此使用它的程序必须自己实现正确的排序等UDP没有的功能。
  UDP的正式规范在RFC0768中,在文档中提及了UDP采用的是“尽力而为”的模式,意思是把应用程序传给IP层的数据发送出去,但是并不保证是否可以到达目的地。这也是因为它的无连接特征,所以校验和是十分的重要。但是UDP并非一无是处,它就突出一个字——快;

UDP头部

在这里插入图片描述
如图所示,这就是UDP的头部,非常的简洁

  • 16位源端口号:可选,如果发送者不需要对方回复,置0;
  • 16位目的端口号:目的端口号;
  • 16位UDP长度:UDP头部+UDP数据报的总长度,最小为8(只有头部);
  • 16位UDP校验和:端到端的校验和,由发送方经过计算所得,最终由目的方校验。在传输过程中不会被修改(穿越NAT除外),如果接受方发现校验和不匹配,则丢弃该报文。通过ICMPv4协议发送错误报文给发送方;

UDP校验和

在这里插入图片描述
如图所示,在原先的UDP首部前添加了UDP伪头部,伪头部正是用来帮助计算校验和的。但它也仅仅是用来帮助计算校验和,从来不会被传送出去;

  • 源IP地址:来自IP头部的源地址
  • 目的IP地址:来自IP头部的目的地址
  • 0:置0
  • 8位协议号:UDP的协议号是17,如果使用UDP,则为17
  • 16位UDP长度:和头部的长度一样

注:UDP操作IP的首部会产生微小的影响,可以忽略不计。

计算方式
按照两个字节拆分,如果UDP数据报为基数,那么补0;将从153.19至数据和 0全部相加,取反即可获得校验和。
在这里插入图片描述

IPv4/UDP的分片

  前面提到了UDP的数据报最小为0,可以不发送数据。那么当UDP的一个包的数据量过大时,就会被分片,例如在链路层不可以超过MTU(1500字节);

在这里插入图片描述
如图所示,该UDP数据报原本为3000字节,在经过IP层后,增加了IP的头部(20字节)。那么整个包的长度为3020个字节。由于MTU的存在,那么每个包在数据链路层会进行分片。由于分片后的每一个片不一定是在同一个路由中进行传递。所以每个包的前面必须要有IPv4的头部。UDP的头部只存在于第一个分片中。

  • MF:代表该分片之后是否还有分片,如果是则为1,没有则为0;
  • 偏移:偏移以8个字节为单位,所以第二个的偏移为1480/8;第三个片则为1480/8*2;

http://chatgpt.dhexx.cn/article/nmrQVkDQ.shtml

相关文章

BGP协议

BGP协议 工作层工作原理BGP简单配置———含密码认证配置个人图解BGP 工作层 BGP是工作在应用层的协议,但基于传输层的TCP协议 工作原理 路由协议通常分为内部网关协议(IGP: Interior Gateway Protocol)和外部网关协议(EGP: Ext…

IP协议介绍

文章目录 定义特点作用寻址和路由:分片与重组: ①TCP分段与IP分片的区别?TCP分段IP分片什么是MSS?滑动窗口与MSS的区别? 什么是MTU?MSS与MTU的关系疑问UDP是否会进行分段?TCP分段后会进行IP分片…

华为 协议归纳总结

青出于蓝而胜于蓝 文章目录 一、路由优先级二、路由协议三、常见的永久组地址四、常用的UDP协议及端口号五、常用的TCP协议及端口号六、协议七、报文头格式 一些常用的知识点,经常用到,也很容易忘记、混淆,所以有必要去整理一下这些常用知识点…

管理距离 动态协议端口号 协议号

管理距离(Administrative Distance,简称AD ) 路由器可以通过多种途径获知路由条目∶如静态手工配置、各种动态路由协议等等。当路由器从两种不用的途径获知去往同一个目的地的两条路由,那么路由器会比较这两条路由的AD值,也就是管理距离&…

各协议的协议号和端口号

协议号与端口号详解 IP是网络层协议,IP头中的协议号用来说明IP报文中承载的是哪种协议(一般是传输层协议,比如6 TCP,17 UDP;但也可能是网络层协议,比如1 ICMP;也可能是应用层协议,比…

TCP/IP协议号

转自http://www.52rd.com/Blog/Detail_RD.Blog_liweikui_22903.html,作者:liweikui IP协议号:IP首部中有8位协议号,用于指明IP的上层协议,具体如下: 协议号 协议类型 说明 0 HOPOPT IPv6逐跳选项 1…

MATLAB APP全局变量的使用

切换到代码视图,左上角代码浏览器点击属性,有如下提示: 点击➕旁边,会出现提示: 按照提示所说,在这里就可以添加全局变量了。 点击➕,在代码中便会添加如下代码: properties (Acce…

MATLAB GUI 设全局变量的位置

如果要在控件之外定义全局变量, 则这个全局变量要设置在OutputFcn下面 如图:

matlab 全局变量(global)数据类型报错问题

今天我在做matlab的GUI界面时,其中涉及到定义一个全局的元胞变量(cell)。将其摘录下来如下: clc;clear all global a s11;s2123;s3a; a(1,1:3){s1,s2,s3}然后出现错误:从 cell 转换为 double 时出现以下错误:错误使用 double无法从 cell 转换…

matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

示例模型 在模型 matlab:rtwdemo_optimize_global_ebf 中,Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。 model rtwdemo_optimize_global_ebf; load_system(rtwdemo_optimize_global_ebf) 生成代码但不进行优化…

20220117 matlab 全局变量调试

要在外部和里面都定义global才行貌似 global f1function parameter_inpu__() global f1 f11;endglobal f1 b1 f_temp test1__(); dynamic_e()function parameter_inpu__() global f1 f11;endfunction test1__() global f1 b1 b1f1;endfunction dynamic_e() global f_temp f_te…

matlab变量全局化,matlab全局变量global

matlab global定义全局变量的问题 我写了matlab的一个主函数,放在一个M文件中,然后在这个主函数中调用其可以,前提是两个函数共用变量均需用global声明 例子: 保存f.m内容如下: function f(a,b) global x y; x=a; y=b; 保存g.m内容如下: function [out]=g global x y; ou…

matlab 编程之全局变量(global)和永久变量(persistent)

一、global 官方解释: help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of th…

Matlab之全局变量

通过返回修改后的输入参数,可以实现函数内部对Matlab工作空间变量的修改。而另一种殊途同归的方法则是使用全局变量。 声明全局变量需要用到global关键词,语法格式为‘global variable’ 通过全局变量可以实现Matlab工作空间变量空间和多个函数的函数空间…

JavaScript 原型链和继承面试题

JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承。通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联&am…

11、原型链、原型继承和Class继承

11.1 原型 每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象(函数.prototype)的用途是包含可以由特定类型的所有实例共享的属性和方法 11.2 原型链 基本思想就是…

原型链和原型继承

什么是原型链? 每一个对象都有自己的原型对象,而原型对象也属于对象也会有自己的原型对象,依次类推就会形成链式结构,然后就构成了原型链,所有对象的原型链最终都会指向object.prototype,而最终object.pro…

关于原型、原型链和原型继承的理解

# 个人理解 原型: prototype首先是只作用于函数的属性,无法直接用于对象或变量。 每个函数中都自带一个__proto__属性(可以存储继承对象中的prototype属性--- p.__proto__ Person.prototype)。 在实例化对象(构造函数)时,寻找某个属性(如dem…

js原型和原型链以及原型继承

目录 一、原型 二、原型链 三、原型链继承 一、原型 原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。 原型 ​ 在JavaScript中,我们创建一个函数A(就是声明一个函数), 就会为该函数创建一个prototype属性。而且也会在内存…