首页 > 其他分享 >UDP报文结构

UDP报文结构

时间:2024-06-09 20:57:55浏览次数:19  
标签:UDP 字节 报文 校验 算法 计算 数据 结构

学习一个协议,首先就是去理解它的报文结构。

UDP数据报可以分为报头与载荷两个部分。

报头占八个字节,分别是源端口号,目的端口号,udp报文长度,UDP校验和,每个部分占两个字节。载荷是完整的应用层的数据报。报头和载荷可以认为是“拼接“在一起。

UDP报文长度:是一个两个字节的16位的数字,范围是0~2^16-1(65535)->64kb,也就是说整个UDP数据报最长为64kb,属于还是比较小的一个数据报。

校验和:校验,就是检查数据报是否出错,由于网络传输环境错综复杂,数据在传输过程中有可能会出错,所以就要有机制去识别错误。那么校验和是如何做到的?

首先,发送方在发送数据时,通过一定的算法,根据这个数据计算出校验和,然后把数据和校验和一起发送出去,接收方接收到数据,会再去计算校验和,如果这两个校验和不同,那么说明收到的数据和原来的不一样,就是出现了错误。

校验和计算方法:

循环冗余算法(CRC):

有很多种计算校验和的算法,其中UDP使用的是循环冗余算法(CRC),把要计算的数据的每个字节进行累加,其结果作为校验和,如果传输过程中数据出现错误,那么接收方计算出的校验和就会不一样。(这种方法不是特别靠谱,万一前面多个数据,后面丢个数据什么的,计算结果还是一样的。)

md5算法:经过一系列的公式计算(我们不需要去考虑格式是什么),得出一个校验和。

特点:

1.定长。无论数据长度怎样,计算得到的校验和长度是固定的。

2.分散。给两个数据,哪怕只有一个字节不一样,得到的校验和差异非常大。所以md5否侧适合哈希算法,哈希算法就是希望通过哈希函数计算得到的下标越分散越好,以此降低冲突。

3不可逆.给你一个计算得出的校验和,你是推不出来原来的数据是什么的。

基于UDP的应用层协议

有一些应用层协议是基于UDP实现的,虽然相比之下还是TCP使用比较多。

DNS:域名解析协议;DHCP:动态主机配置协议;TFTP:简单文件传输协议;NFS:网络文件系统;BOOTP:(无盘设备)启动协议。

标签:UDP,字节,报文,校验,算法,计算,数据,结构
From: https://blog.csdn.net/weixin_65469337/article/details/139564455

相关文章

  • 自定义类型:结构体
    目录1.结构体类型的声明1.1结构体1.1.1结构体如何声明1.1.2结构体变量的创建和初始化1.2结构的特殊声明1.3结构的自引用2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐?2.3修改默认对齐数3.结构体传参4.结构体实现位段 4.1什么是位段4.2位段的......
  • 实验6 C语言结构体、枚举应用编程
    #defineN3//运行程序输入测试时,可以把这个数组改小一些输入测试#include<stdlib.h>typedefstructstudent{intid;//学号charname[20];//姓名charsubject[20];//考试科目doubleperf;//平时成绩......
  • YoloV8改进策略:Neck篇|自研Neck层融合模型|深度特征与浅层特征融合,涨点明显|附结构图(
    摘要本文介绍的独家原创的Neck层特征融合方法,将深度特征和浅层特征相融合,结合自研下采样模块和动态上采样模块,提供了一种高效的Neck层改进方式,不仅为他们提供了一个现成的解决方案,而且能够作为灵感启发,鼓励他们在此基础上进行进一步的探索和创新。即插即用的特性使得这种改......
  • 数据结构严蔚敏版精简版-线性表以及c语言代码实现
    线性表、栈、队列、串和数组都属于线性结构。线性结构的基本特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,其他每个数据元素都有一个前驱和后继。1 线性表的定义和特点如此类由n(n大于等于0)个数据特性相同的元素构成的有限序列称为线性表。线性表中元素的个数n定......
  • 【数据结构·队列】链队列(带头结点)模板简单应用算法设计:长整数加法计算
    目的:使用C++模板设计链队列的抽象数据类型(ADT)。并在此基础上,使用链队列ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照单链表的ADT模板,设计链队列的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及......
  • Java数据结构与算法(最大子数组和动态规划)
    前言动态规划主要用于解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题来解决复杂问题,每个子问题仅解决一次,并将其结果存储,以供后续使用,从而避免了重复计算。对应leetcode.-力扣(LeetCode)实现原理两次循环遍历,采用固定其实位置为i,不断滑动j的思想,来计......
  • Java数据结构与算法(爬楼梯动态规划)
    前言爬楼梯就是一个斐波那契数列问题,采用动态规划是最合适不过的。实现原理初始化:dp[0]=1;dp[1]=2;转移方程:dp[i]=dp[i-1]+d[i-2];边界条件:无具体代码实现classSolution{publicintclimbStairs(intn){if(n==1){return1;}......
  • JAVAEE之网络编程(1)_套接字、UDP数据报套接字编程及从代码实例
    前言什么是网络编程呢? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程一、网路编程中的基本概念1.1发送端和接收端发送端:数据的发送方进程,称为发送端。发......
  • 数据结构---树与二叉树
    个人介绍hellohello~,这里是code袁~......
  • 程序的基本结构、cout语句(c++语言)
    一、如何下载Dev C++    登录网站:ht.51goc.com二、安装DevC++一、启动DevC++   双击桌面的图标 二、新建一个程序三、复制一个程序    请你复制以下代码到“程序编辑区”    #include<bits/stdc++.h>usingn......