UDP校验和计算

目录

 

一、UDP概述

二、UDP数据报

三、UDP校验和计算

四、UDP校验和计算的C语言实现及抓包验证


一、UDP概述

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP在IP报文的协议号是17。

与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

使用UDP协议包括:TFTPSNMP、NFS、DNS、BOOTP

UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能。

二、UDP数据报

用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,有四个字段组成,每个字段的长度都是两字节。各段意义如下:

  1. 源端口:源端口号。在需要对方回信时选用。不需要时可用全0。
  2. 目的端口:目的端口号。这在终点交付报文时必须要使用到。
  3. 长度:UDP用户数据报的长度,其最小值是8(仅首部)。
  4. 校验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。

三、UDP校验和计算

UDP计算校验和的方法和IP数据报首部校验和的方法相似。不同的是:IP数据报校验和只校验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。

UDP的校验和需要计算UDP首部加数据荷载部分,但也需要加上UDP伪首部。这个伪首部指,源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。伪首部+UDP首部+数据一起计算校验和。

UDP检验和的计算方法是:

  1. 按每16位求和得出一个32位的数;
  2. 如果这个32位的数,高16位不为0,则高16位加低16位再得到一个32位的数;
  3. 重复第2步直到高16位为0,将低16位取反,得到校验和。

四、UDP校验和计算的C语言实现及抓包验证

用wireshark抓包并过滤出UDP数据报,分析如下:

  • 源IP地址:10.170.59.191(0x0aaa 0x3bbf)
  • 目的IP地址:210.14.150.13(0xd20e 0x960d)
  • 源端口:53539(0xd123)
  • 目的端口:10050(0x2742)
  • UDP长度:28(0x001c)
  • 校验和:0x285c

将12字节的伪首部、8字节的UDP首部(校验和置0)及20字节的数据放在一起,用C语言编程计算校验和,程序运行截图如下:

从程序运行结果来看,计算出来的校验和与抓包得到的校验和是一致的。

#include<stdio.h>
unsigned short checksum(unsigned short *buf,int nword)
{
unsigned long sum;
for(sum=0;nword>0;nword--)
{
sum += *buf++;
sum = (sum>>16) + (sum&0xffff);
}
return ~sum;
}
void main()
{  
	unsigned short buffer[20]={0x0aaa,0x3bbf,0xd20e,0x960d,0x0011,0x001c,0xd123,0x2742,0x001c,0x0000,0x6c41,0x5661,0x0000,0x0e00,0xf8b6,0xd401,0x9313,0x0000,0x0000,0x0000};
	int n=20;  
	unsigned short re_checksum;     
	re_checksum=checksum(buffer,n);
	printf("%x\t",re_checksum); 
	if(re_checksum==0x285c) 
		printf("校验和正确!\n"); 
	else          
		printf("校验和不正确!\n");
} 

 

  • 19
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
UDP校验和计算工具是一种用于计算UDP数据报校验和的工具。UDP(用户数据报协议)是一种面向无连接的传输层协议,不像TCP那样提供可靠的数据传输,因此需要使用校验和来检测数据传输过程中的错误。 UDP校验和计算工具的主要功能是对UDP数据包进行校验和计算校验和是通过对数据包中各个字节进行加和操作,并取其反码得到的。在发送数据报之前,发送方会计算数据报的校验和,并将其添加到数据包的首部。当接收方接收到数据包时,会对接收到的数据包进行校验和计算,并与数据包中的校验和进行比较。如果两个校验和不一致,则说明数据包在传输过程中发生了错误。 计算UDP校验和的过程包括以下几个步骤: 1. 将UDP数据包中的数据划分成若干个16位的字块。 2. 对这些字块进行求和操作,将所有的字块相加,得到一个32位的和。 3. 将32位的和的高16位与低16位相加,直到最高位为0为止。 4. 取最终的和的反码作为校验和UDP校验和计算能够帮助检测数据包在传输过程中的传输错误,但并不能修复错误。因此,需要使用可靠的传输协议(如TCP)来保证数据的正确传输。UDP校验和计算工具作为一种辅助工具,可以帮助开发人员在开发和调试网络应用程序时,对UDP数据包进行校验和计算,提高数据传输的可靠性和正确性。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值