技术标签: # Computer Networking udp wireshark 校验和 UDP报文 计算机网络
用户数据报(UDP)协议是运输层提供的一种最低限度的复用/分解服务,可以在网络层和正确的用户即进程间传输数据。UDP 是一种不提供不必要服务的轻量级运输协议,除了复用/分用功能和简单的差错检测之外,几乎就是 IP 协议了,也可以说它仅提供最小服务。UDP 是无连接的,因此在两个进程通信前没有握手过程。UDP 协议提供一种不可靠数据传输服务,也就是说,当一个进程讲一个报文发送进 UDP 套接字时,UDP 协议并不保证该报文将到达接收进程。也正是由于 UDP 不修复错误,因此到达接收进程的报文也可能是乱序到达的。UDP 是面向报文的,这是因为 UDP 并不会对应用层传递下来的报文进行任何处理,对于报文的边界信息都会保存,向下交付时交付的是完整报文。
UDP(User Datagram Protocol)用户数据报协议,它只在 IP 数据报服务之上增加了很少一点功能,它的主要特点有:
从应用层到传输层,再到网络层的各层次封装:
UDP 数据报可分为两部分:UDP 报头和数据部分。其中数据部分是应用层交付下来的数据。UDP 报头总共 8 字节,而这 8 字节又分为 4 个字段:
注:端口是用来指明数据的来源(应用程序)以及数据发往的目的地(同样是应用程序)。字段包含了 16 比特的 UDP 协议端口号,它使得多个应用程序可以多路复用同一个传输层协议及 UDP 协议,仅通过端口号来区分不同的应用程序。
对发送方的 UDP 报文段的所有 16 比特字的和进行反码运算,当求和遇见溢出的时候,进行回卷(回卷的补充在下面),得到的结果放在 UDP 报文段中的检验和字段。
1. UDP 校验的所需信息
2. 计算步骤
在计算校验和的时候,需要在 UDP 数据报之前增加 12 字节的伪首部,伪首部并不是 UDP 真正的首部。只是在计算校验和,临时添加在 UDP 数据报的前面,得到一个临时的 UDP 数据报。校验和就是按照这个临时的 UDP 数据报计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。这样的校验和,既检查了 UDP 数据报,又对 IP 数据报的源 IP 地址和目的 IP 地址进行了检验。
链路层已经有一定的差错检测机制了,为什么在传输层也要?这是因为我们不能保证源主机和目的主机之间的所有链路使用的链路层协议,都具备差错检验的机制,有可能中间的某一跳的链路不支持。而且当报文段存储在某一台路由器的内存时,也有可能发生比特差错。当端到端的数据传输需要差错检测时,那么 UDP 也要在运输层提供这个功能,也就是端到端原则。不过虽然 UDP 可以进行差错检验,但是它对错误的恢复无能为力。
UDP 和 TCP 协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP 协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息。发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与 TCP 不同,UDP 协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把 UDP 协议称为不可靠的传输协议。
相比于 TCP 协议,UDP 协议什么都不提供,那么为什么还需要 UDP 协议呢?UDP 在以下 4 个方面具有一定的优势,对于某些应用来说更为合适。
对于有些应用而言,是可以容忍丢失且对速率是很敏感的,例如视频会议等实时性的引用,TCP 协议会造成较大的时延而影响性能。不过 UDP 协议的使用还是存在争议的,如果没有拥塞控制机制来防范网络拥塞,在大量端系统都采用流式高比特视频等应用,会使得路由器出现大量分组溢出,同样会影响性能,而且会干扰 TCP 协议的运行。不过这个问题已经有研究人员进行探讨,并提出了相关机制。
最后一个问题是,UDP 能否实现可靠数据传输?虽然 UDP 本身不提供这样的服务,但是 UDP 应用可以在应用层添加可靠传输机制,例如实现错误恢复等。
许多应用只支持 UDP ,它不产生任何额外的数据,即使知道有破坏的包也不进行重发。当强调传输性能而不是传输的完整性时,如音频和多媒体应用,UDP 是最好的选择。数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP 也是一个好的选择。
1.从跟踪中选择一个 UDP 数据包。从此数据包中,确定 UDP 标头中有多少字段,并为这些字段命名。
答:UDP 的标头有 4 个字段,一共 8 byte,各字段分别为:Source Port:源端口号;Destination Port:目的端口号;Length:长度;Checksum:校验和
通过查询 Wireshark 的数据包内容字段中显示的信息,确定每个 UDP 报头字段的长度。
答:每个部分都是 2 byte,因此 UDP 报头为 8 byte = 64 bit。
长度字段中的值是指的是什么?使用捕获的 UDP 数据包验证您的声明。
答:长度是包括 UDP 头+数据长度,UDP 头长度是8 Byte,有着以下的公式:(仅限IPV4 下UDP 传输),IP 长度=IP 头长度(20Byte)+UDP 头长度(8Byte)+UDP 数据,UDP 长度=UDP 头长度(8Byte)+UDP 数据,在作者抓包结果中UDP 长度=UDP 头长度(8Byte)+SNMP 服务长度
首先先认识下有效负载:
有效负载是被传输数据中的一部分,而这部分才是数据传输的最基本的目的,和有效负载一同被传送的数据还有:数据头或称作元数据,有时候也被称为开销数据,这些数据用来辅助数据传输。——百度百科
简单地说,有效负载就是可变长度的数据部分。由于 Length 字段占 2 Byte = 65536 bit,并且其中 8 Byte 是 UDP 首部信息。因此有效载荷 = 65536 - 8 × 64 = 65472 bit。
最大可能的源端口号是多少?
两个 Port 字段占 2 byte = 65536 bit,同时端口号从 0 开始算,因此最大端口号 = 216 - 1 = 65535。
UDP 的协议号是什么? 以十六进制和十进制表示法给出答案。
答:UDP 的协议号为 17,十六进制为 0x11。
即发送者发送端口号在接收返回(响应)UDP 时候会变成接收端口号。接收者发送返回(响应)UDP 时候接受端口号会变成发送端口号。
端口号
主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在与 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信。
两个主机的传输层之间有一个灰色双向箭头,写着“传输层提供应用进程间的逻辑通信”。
逻辑通信:看起来数据似乎是沿着双向箭头在传输层水平传输的,但实际上是沿图中的虚线经多个协议层次而传输。
在上图中,AP1 与 AP3 的通信与 AP2 与 AP4 的通信可以使用同一个传输层协议来传输(TCP 或 UDP),根据 IP 地址或 MAC 地址都只能把数据传到正确的主机,但具体需要传到哪一个进程,是通过端口来辨认的。
比如同时使用浏览器和 QQ,浏览器占用 80 端口,而 QQ 占用 4000 端口,那么发送过来的 QQ 消息便会通过 4000 端口显示在 QQ 客户端,而不会错误地显示在浏览器上。
端口号有 0 ~ 65535 的编号,其中:
应用层协议 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
---|---|---|---|---|---|---|---|
系统端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法