ip数据报首部校验和算法

合集下载

0004-如何计算IP报头的checksum

0004-如何计算IP报头的checksum

如何计算IP报头的checksumwritten by whowin如果你研究过TCP/IP协议,那么你肯定知道IP报头中的checksum字段,或许你还曾经为如何计算这个字段的值所困扰,本⽂我们将讨论checksum的概念,并详细介绍IP报头中的checksum是如何计算的。

1. checksum是什么?简单地说,checksum就是从数据包中计算出来的⼀个值,⽤于检查数据包完整性;通过检查checksum来判断收到的数据是否有错误;数据在⽹络上传输时,由于各种原因数据包有可能损坏,所以在接收端必须要有⼀种⽅法来判断数据是否已经损坏,为此,在报头中加⼊checksum字段;在发送端要按照规定的算法计算checksum并将其设置为报头中的⼀个字段中;在接收端,要使⽤同样的算法重新计算checksum,并与收到的报头中的checksum进⾏交叉校验,以确定数据包是否正常。

2. IP报头中的checksumIP报头的checksum仅⽤于验证IP报头是否正确,所以仅需在IP报头上计算即可,与IP报头后⾯数据⽆关,因为IP报头后⾯的数据(⽐如UDP、TCP、ICMP等)通常都有⾃⼰的checksum;计算IP报头的checksum当然要了解IP协议的基本报头结构,下⾯是IP报头的基本格式:图1:IP报头的基本格式更好地理解IP报头各字段的含义,可以参考我的另⼀篇⽂章《Linux下如何在数据链路层接收原始数据包》或者参考IP Protocol Header Fundamentals Explained with Diagrams;仅就算法⽽⾔,IP报头的checksum定义为:IP报头中所有16-bit字的反码之和;也就是说把IP报头按照16-bit 字分割,然后把它们逐⼀相加,要求相加的结果仍为16-bit字,如果出现溢出(结果超出16-bit字),则丢弃溢出并把结果加1,全部16-bit字相加完成的结果再求反码,其结果就是checksum;上⾯的计算⽅法是在报⽂的发送端完成的;在接收端⾸先要将IP报头中的checksum字段清0,然后⽤与发送端相同的⽅法计算,得到的值与收到的IP报头中的checksum字段⽐较,如果⼀样,则表⽰IP报头完好,否则认为IP报头已经损坏;实际在发送端的做法是:将IP报头按照16-bit字分割,然后把它们逐⼀相加(包括收到的checksum字段),其结果如果为全1(0XFFFF),则表⽰IP报头完好,否则认为IP报头已经损坏。

IP首部校验算法共7页文档

IP首部校验算法共7页文档

IP首部校验算法IP Header Checksum AlgorithmLIU Pai(School of Software Engineering,Beijing University of Posts and Telecommunications, Beijing 100876, China)Abstract: In order to increase the efficiency of data transmission, IP simplifies the protocol by not providing a reliable communication facility. There are no acknowledgments eitherend-to-end or hop-by-hop.There is no error control for data, only a header checksum provides a verification that the information used in processing internet datagram has been transmitted correctly. There are no retransmissions. There is no flow control. The RFC documents give the algorithms used to compute the checksum and the wireshark software provides the function of catching the IP packets. This data can be used to verify the algorithms . The research also shows there is a bug in the algorithm and can be overcomed and optimised.1 IP 首部如图1所示,IP数据报首部的固定部分中的各字段:1) 版本占4位,指IP协议的版本。

IP数据报

IP数据报
局域IP数据包的结构局域IP数据包的结构主要是由三部分构成,它包含了“目的IP”、“源IP”和“数 据”,其中“源IP”是用来表明该数据包是从哪里发过来的;“目的IP”是用来声明该数据包将会发送到哪里去; “数据”部分则是包含了这个数据包中详细具体的数据信息。局域IP数据包的结构和我们日常生活中使用的电子 邮箱十分的相似,也正是因为这种结构让它能够在基于TCP/IP协议下的计算机络中进行正常的通讯。
那么IP协议为什么要提供对IP数据报首部的校验功能呢?一方面,IP首部属于IP层协议的内容,不可能由 上层协议处理,另一方面,IP首部中的部分字段在点对点的传递过程中是不断变化的,只能在每个中间点重新形 成校验数据,在相邻点之间完成校验 。
监控技术
监控技术
随着计算机互联技术的迅速发展,络已经深入人民的生活当中,与我们的生活具有十分紧密的,成为了我们 生活当中的一部分。黑客们通过复杂多变的络攻击对我们的络进行攻击,侵犯着我们的互联,导致我们的互联具 有相当大的安全威胁,他们可以通过截取局域中正在传输的数据包,然后对数据包解析,得到一系列的数据,导 致我们的个人信息和隐私全都暴露出来,甚至对我们的个人财产造成不可估计的损失。如果使用IP数据包监控技 术就可以及时的获取黑客的入侵信息,并提前做好黑客入侵的预防工作,不让黑客有机可乘,保障我们的信息安 全。络监控是保护信息安全的一项十分重要的技术,他可以及时的发现络中存在的安全问题,有利于维护计算机 互联络安全。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增 加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做 成固定的。这些任选项定义如下:
(1)安全和处理限制(用于军事领域)

ip校验和

ip校验和

Ip数据报首部检验和的算法及验证
原理
发送时:
1. 将校验和字段置为0;
2. 将整个首部分为16bit的部分,求和;
3.进行反码算数运算求和,若结果高于16b,将高出的位数截取,加到剩下的16b中,重复此步骤,直到不多于16b
4.取反码,填入校验和字段中
接收时:
1. 直接将整个首部分为16bit的部分,求和;
2.进行反码算数运算求和,若结果高于16b,将高出的位数截取,加到剩下的16b中,重复此步骤,直到不多于16b
3.取反码,若结果为0则正确,如果结果不为0则说明出现错误

使用wireshark抓包,获得任意一个ip数据报
程序运行结果
计算校验和的结果
检验校验和的结果
#include<stdio.h> main()
{
inti,j,k=1,num,flag;
int
head[10]={0x4500,0x0028,0xbc61,0x4000,0x2d06,0xb99a,0x7b7d,0x735f,0x0a0b,0xdeec};
head[5]=0;
num=head[0];
for(i=1;i<10;i++)
num=num+head[i];
while((num>>16)>0)
num=(num>>16)+(num&0xffff);
num=~num;
printf("%x\n",num);
}。

首部校验和的计算例子详细

首部校验和的计算例子详细

首部校验和的计算例子详细在计算机网络中,数据的传输是通过分组完成的。

为了确保数据的可靠传输,每个分组都包含了一些必要的信息,其中一个重要的字段是首部校验和。

首部校验和是一种用于检测传输数据是否完整和错误的校验机制。

它通过对数据的每个字节进行运算,计算出一个校验和值。

接收方在接收到数据后,同样会进行首部校验和计算,并将结果与发送方的校验和进行比较,以验证数据的完整性和错误情况。

让我们来看一个简单的计算例子,假设我们要发送一个包含6个字节的分组,分别是01100101、01100100、01100101、01100011、01101111、01100100(二进制数据)。

我们将每两个字节分为一组,然后将每个字节的二进制值相加。

具体计算过程如下:第一步,将每两个字节分组:01100101 0110010001100101 0110001101101111 01100100第二步,将每一组的二进制值相加:01100101 + 01100100 = 1100100101100101 + 01100011 = 1100100001101111 + 01100100 = 11010011第三步,将每组相加的结果再相加:11001001 + 11001000 + 11010011 = 110000110第四步,将相加的结果按位求反,得到首部校验和值:110000110 -> 001111001在这个例子中,我们计算出的首部校验和值为001111001。

发送方将这个校验和值附加在数据分组的首部中,一起发送给接收方。

接收方在接收到数据分组后,同样进行相同的计算过程,计算出一个校验和值。

然后,接收方将计算出的值与发送方的校验和值进行比较,如果两者相等,则说明数据没有发生错误或丢失,否则,数据可能存在错误或丢失。

首部校验和的计算过程可以有效地检测出单比特错误和部分数据损坏的情况,但对于多比特错误无法进行检测。

此外,校验和机制也无法纠正错误,它只能用于检测错误。

实验 IP数据报的格式

实验 IP数据报的格式

实验IP数据报的格式【实验目的】1、通过分析IP数据报的格式了解IP数据报各个字段的大小、取值范围;2、掌握它们在IP协议中所起的作用。

【实验内容】1、分析IP数据报的结构,熟悉各个字段的内容、功能、格式和取值范围;2、编辑IP数据报首部各字段的内容;3、单个或批量发送已经编辑好的IP数据报。

【实验原理】IP数据报由首部和数据两部分组成。

首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。

20字节之后是一些可选字段,其长度是可变的。

IP数据报的格式如下图所示:版本:占4 bit,指IP协议的版本。

通信双方使用的IP版本必须一致。

目前广泛使用的版本号为4。

首部长度:占4 bit,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。

服务类型:占8 bit,用来获得更好的服务。

前三个比特表示优先级。

第D比特表示要求有更低的时延。

T比特表示要求有更高的吞吐量。

R比特表示要求有更高的可靠性。

C比特表示要求选择代价更小的路由。

最后一个比特目前尚未使用。

总长度:占16 bit,指首部和数据之和的长度,单位为字节。

标识:占16 bit,它是一个计数器,用来产生数据报的标识。

标志:占3 bit,目前只有前两个比特有意义。

最低位记为MF,MF=1表示后面“还有分片”的数据报。

MF=0表示这已是若干数据报片中的最后一个。

标志字段中间的一位记为DF,意思是“不能分片”。

只有当DF=0时才允许分片。

片偏移:占13 bit,表示较长的分组在分片后,某片在原分组中的相对位置。

片偏移以8个字节为偏移单位。

生存时间:占8 bit,表示数据报在网络中可通过的路由器的最大值。

协议:占8 bit,指出此数据报携带的数据是何种协议。

首部校验和:占16 bit,只校验数据报的首部,不包括数据部分。

源IP地址:占4 bit。

目的IP地址:占4 bit。

可选字段:用来支持排错、测量以及安全等措施。

IP首部检验和算法

IP首部检验和算法

IP⾸部检验和算法原创博⽂,转载请注明。

在学习TCP/IP 详解的过程中遇到了不⽌⼀次的关于检验和的概念,在吸取了他⼈理解的前提下,我决定⽤Wireshark 进⾏抓包分析。

⾸先我们得知道IP数据包格式⾸先把检验和字段置为 0 。

然后,对⾸部中每个 16 bit 进⾏⼆进制反码求和(整个⾸部看成是由⼀串 16 bit的字组成),结果存在检验和字段中。

当收到⼀份I P数据报后,同样对⾸部中每个 16 bit进⾏⼆进制反码的求和。

由于接收⽅在计算过程中包含了发送⽅存在⾸部中的检验和,因此,如果⾸部在传输过程中没有发⽣任何差错,那么接收⽅计算的结果应该为全 1。

如果结果不是全1 (即检验和错误),那么I P就丢弃收到的数据报。

但是不⽣成差错报⽂,由上层去发现丢失的数据报并进⾏重传。

再来看看Wireshark抓取结果观察此图,我们可以看到这是⼀个源地址为123.151.152.231 ⽬的地址为10.22.66.206即为本机地址的IP数字报传送。

注意图中标深蓝颜⾊的数字,每当我们点击分类信息时,下⽅的数字就会跟随着发⽣变化,因此我们就可以得到IP数据报的内容。

、解释如下:(本内容部分取⾃)版本号4,占了4位,表⽰ipv4.接下来是包头长度,⼜占了4位,指明ipv4协议包头长度的字节数包含多少个32位。

由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以⽤来确定IPv4数据报中数据部分的偏移位置。

IPv4包头的最⼩长度是20个字节,因此IHL这个字段的最⼩值⽤⼗六进制表⽰就是5(5x4(4个字节32位) = 20字节)。

就是说,它表⽰的是包头的总字节数是4字节的倍数。

图中即为header length为20表⽰是20个字节,所以经过计算此处⽤⼗六进制表⽰为5,⼆进制表⽰为1001。

再往下是服务类型为0x00。

服务类型此处⼀共占了8位,涵义如下:过程字段: 3位,设置了数据包的重要性,取值越⼤数据越重要,取值范围为:0(正常)~ 7(⽹络控制)延迟字段: 1位,取值:0(正常)、1(期特低的延迟)流量字段: 1位,取值:0(正常)、1(期特⾼的流量)可靠性字段: 1位,取值:0(正常)、1(期特⾼的可靠性)成本字段: 1位,取值:0(正常)、1(期特最⼩成本)未使⽤: 1位接着是总长度total length:⼗六进制是0x0028标识字段:占16位。

IP首部解析

IP首部解析

IP头部:
45 00 00 30
52 52 40 00
40 11 2c 23
c0 a8 01 01
d8 03 e2 15
“45”,其中“4”是IP协议的版本(Version),说明是IP4。

“5”表示IP头部的长度,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据
“00”是服务类型
“0030”是IP数据报文总长,包含首部以及数据,这里表示48字节
“5252”是两个字节的标识字段(Identification):转换为十进制就是21074。

这个是让目的主机来判断新来的分段属于哪个分组
“40”,转换为二进制就是“01000000”,标志字段(flag)占3 bit,其中第一位是IP协议目前没有用上的,为0。

接着的是两个标志DF和MF。

DF为1表示不要分段,MF为0表示后面没有分段。

然后的“00000”和“00000 00000000”是片偏移
“40”是TTL,转换为十进制就是64
“11”表示协议类型,转换为十进制就是17,表示传输层是UDP协议
“2c23”首部校验和
“c0 a8 01 01”,是源IP地址,转换为十进制的IP地址就是:192.168.1.1
“d8 03 e2 15”,是目的IP地址,转换为十进制的IP地址就是:216.3.226.21。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档