ip首部校验和算法
- 格式:pdf
- 大小:473.29 KB
- 文档页数:16
ip首部校验和计算例题摘要:1.IP 首部校验和的作用2.IP 首部校验和的计算方法3.IP 首部校验和的例题正文:一、IP 首部校验和的作用IP 首部校验和(IP Header Checksum)是用于验证IP 数据报首部是否发生错误的一种校验机制。
在网络传输过程中,数据报可能会受到干扰或损坏,IP 首部校验和可以帮助接收方检测到这些错误,从而避免错误的数据报被传输到目的地。
二、IP 首部校验和的计算方法IP 首部校验和的计算方法是基于IP 首部中的16 位字段进行循环冗余校验(Cyclic Redundancy Check,CRC)。
具体步骤如下:1.将IP 首部的各个16 位字段(版本、首部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、首部校验和、源IP 地址、目的IP 地址、选项)转换成二进制数。
2.将转换后的二进制数按照8 位一组划分为多个组,不足8 位的,在末尾用0 补足。
3.对每个组进行异或(XOR)操作,并将结果进行移位寄存。
4.将移位寄存器的值进行异或操作,并将结果再次进行移位寄存。
5.重复步骤3 和4,直到所有组都完成异或操作。
6.将移位寄存器的值赋值给IP 首部校验和字段。
三、IP 首部校验和的例题假设IP 首部的各个字段如下:- 版本:IPv4- 首部长度:20 字节- 服务类型:0- 总长度:64 字节- 标识:12345- 标志:DF- 片偏移:0- 生存时间:32- 协议:ICMP- 首部校验和:0- 源IP 地址:192.168.1.1- 目的IP 地址:192.168.1.2- 选项:0按照上述计算方法,可以得到IP 首部校验和的值为0x7F1A。
ip层协议字段IP层协议是实现网络数据传输的重要协议之一,它承担着将数据从源主机发送到目标主机的任务。
IP层协议的数据包包含多个字段,其中每个字段都承载着特定的信息。
下面就是IP层协议字段的详细介绍。
1.版本字段版本字段用于标识当前协议所使用的IP版本。
目前广泛使用的版本是IPv4和IPv6。
IPv4的版本号为4,而IPv6的版本号为6。
2.首部长度字段首部长度字段指示整个数据包头部长度(单位是4个字节)。
其取值通常为20,有时也会是40或者60,取决于IP首部是否包含可选字段。
3.区分服务字段区分服务(Differentiated Services,简称DSCP)字段用于标识IP包应该享受哪种类型的服务。
用于指定不同IP包的优先级,依据给定的服务质量分组来实现对网络流量的分层管理。
它的取值范围是0-63。
总长度字段指示整个数据包的长度(包括首部和数据),单位是字节。
该字段的取值范围在28到65,536之间,因为更大的数据包可能会被路由器丢弃。
5.标识字段标识字段用于标识一个数据块的唯一标识符。
它通常用于在大型网络中重新组装被分片的数据包。
标识字段的取值范围是0-65,535。
标志字段有三个比特位,分别是DF、MF和RSV。
DF表示“不分片”,MF表示“更多分片”,RSV保留。
7.片偏移字段片偏移字段指示当前数据片相对于完整数据块的偏移量,单位为8个字节。
有关IP分片的详细信息,请参见RFC 791。
8.生存时间字段生存时间(Time to Live,简称TTL)字段指定路由器的最大跳数。
在路由器转发数据包时,TTL值会递减,直到为0时,数据包将被丢弃。
TTL可以避免数据包在网络中无限循环。
TTL字段的取值通常为64,但网络管理员也可以设置它的值。
协议字段指示当前IP数据包使用的协议。
例如,协议字段的值为6表示使用TCP协议;协议字段的值为17表示使用UDP协议。
10.头部校验和字段头部校验和是一个16位的值,用于验证IP包首部是否被恶意修改或损坏。
ip校验规则
IP校验规则通常包括以下几点:
1. IP地址格式检查:确保输入的IP地址符合正确的格式,例如IPv4地址应分为四个十进制数,每个数字范围在0-255之间,用点号分隔。
IPv6地址则需要符合相应的格式。
2. IP地址范围检查:检查IP地址是否在一个有效的地址范围内。
例如,有些地址段可能被保留用于特定目的,如私有IP地址段(如10.0.0.0 - 10.255.255.255)或公共IP地址段(如192.168.0.0 - 224.0.0.0)。
3. 子网掩码检查:如果使用了子网掩码,需要确保输入的子网掩码符合正确的格式,并与其对应的IP地址匹配。
4. IP地址唯一性检查:确保同一个子网内没有重复的IP地址。
5. 排除特殊IP地址:根据需求,可以排除某些特殊IP地址,如回环地址(127.0.0.1)、默认网关地址等。
6. 负载均衡策略:如果需要实现负载均衡,可以针对不同的服务实例制定相应的策略,如根据权重、响应时间等指标来分配请求。
7. 动态转发规则:根据运行过程中的实际情况,可以动态调整转发地址。
例如,当某个服务实例出现故障时,可以及时将其从路由规则中移除,避免将请求转发到不可用的服务上。
在实际应用中,可以使用编程语言或相关库(如Java 中的``包)来实现IP校验规则的检查功能。
同时,还可以借助一些开源项目,如Spring Cloud Gateway,通过配置文件或代码实现IP校验和路由规则的制定。
ip校验规则一、IP校验规则简介IP校验规则是指用于验证IP地址格式和范围的规则,以确保网络通信的顺畅进行。
IP地址是互联网上设备之间互相通信的唯一标识,因此IP校验规则在保证网络稳定运行中起着至关重要的作用。
二、IP地址分类与表示方法1.IPV4地址IPV4地址是互联网最常用的地址类型,它采用32位二进制表示,总共分为A、B、C、D、E五类。
其中,A类地址范围为1.0.0.0至126.255.255.255,B类地址范围为128.0.0.0至191.255.255.255,C类地址范围为192.0.0.0至223.255.255.255,D类地址为组播地址,范围为224.0.0.0至239.255.255.255,E类地址为保留地址,范围为240.0.0.0至255.255.255.255。
2.IPV6地址IPV6地址是下一代互联网地址,采用128位二进制表示。
相较于IPV4,IPV6具有更多的地址空间,提高了网络安全性和隐私保护能力。
IPV6地址分为单播、组播和任播三种类型,用于不同场景的通信。
三、IP校验算法1.子网掩码子网掩码是一种用于划分IP地址的网络部分和主机部分的算法。
通过子网掩码,可以将一个大型网络划分为多个较小的子网,提高IP地址的利用率。
子网掩码通常用一个32位的二进制数表示,其中网络部分为1,主机部分为0。
2.CIDR(无类别域间路由)CIDR是一种用于表示网络地址的编码方式,它将IP地址和子网掩码合并为一个统一的表示形式。
CIDR地址格式为“IP地址/子网掩码”,如“192.168.1.0/24”。
CIDR有效地简化了网络地址的表示和计算,便于网络管理和规划。
3.网络层协议校验网络层协议校验是指对IP数据报进行校验,确保数据在传输过程中不被篡改。
主要方法有校验和算法、加密算法等。
这些算法可以检测到数据报在传输过程中的错误,保证数据完整性。
四、IP校验实例与应用1.网络诊断与故障排查通过IP校验规则,可以快速定位网络故障,如IP地址冲突、子网划分不当等问题。
校验和算法转⾃经常看计算机⽹络相关的书时,每次看到关于IP或者是UDP报头校验和时,都是⼀笑⽽过,以为相当简单的东西,不就是16bit数据的相加吗!最近在学习Ping命令的源待时,看到⾥⾯有关于校验和的算法。
⼀头雾⽔,后来查找资料,看到校验和是16bit字的⼆进制反码和。
总是觉得很奇怪,为什么会⽤反码和,⽽不是直接求和呢?或者是补码和呢?因为在计算机⾥⾯数据是以补码的形式存在啊!经过看书查资料,下⾯总结⼀些这个校验和算法具体是怎么实现的。
⾸先,IP、ICMP、UDP和TCP报⽂头都有检验和字段,⼤⼩都是16bit,算法基本上也是⼀样的。
在发送数据时,为了计算数据包的检验和。
应该按如下步骤:1、把校验和字段设置为0;2、把需要校验的数据看成以16位为单位的数⼦组成,依次进⾏⼆进制反码求和;3、把得到的结果存⼊校验和字段中在接收数据时,计算数据包的检验和相对简单,按如下步骤:1、把⾸部看成以16位为单位的数字组成,依次进⾏⼆进制反码求和,包括校验和字段;2、检查计算出的校验和的结果是否为0;3、如果等于0,说明被整除,校验和正确。
否则,校验和就是错误的,协议栈要抛弃这个数据包。
虽然说上⾯四种报⽂的校验和算法⼀样,但是在作⽤范围存在不同:IP校验和只校验20字节的IP报头;⽽ICMP校验和覆盖整个报⽂(ICMP报头+ICMP数据);UDP和TCP校验和不仅覆盖整个报⽂,⽽且还有12个字节的IP伪⾸部,包括源IP地址(4字节)、⽬的IP地址(4字节)、协议(2字节)、TCP/UDP包长(2字节)。
另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验和时需要在最后增加填充字节0(填充字节只是为了计算校验和,可以不被传送)。
在UDO传输协议中,校验和是可选的,当校验和字段为0时,表明该UDP报⽂未使⽤校验和,接收⽅就不需要校验和检查了!那如果UDP 校验和的计算结果是0时怎么办?书上有⼀句话:“如果校验和的计算结果为0,则存⼊的值为全1(65535),这在⼆进制反码计算中是等效的”那么校验和到底怎么计算了?1、什么是⼆进制反码求和对⼀个⽆符号的数,先求其反码,然后从低位到⾼位,按位相加,有益处则向⾼位进1(和⼀般的⼆进制法则⼀样),若最⾼位有进位,则向最低位进1.⾸先这⾥的反反码好像和以前学的有符号反码不⼀样,这⾥不分正负数,直接每个为都取反。
IP 首部校验和的计算zz1IP数据包的头信息格式:+-------------------------------------------------+| 版本 (4位) |+-------------------------------------------------+| 首部长度(4位) |+-------------------------------------------------+| 服务类型(TOS)8位 |+-------------------------------------------------+| 数据包总长度(16位) |+-------------------------------------------------+| 标识ID号(16位) |+-------------------------------------------------+| 标志位(3位) |+-------------------------------------------------+| 片偏移(13位) |+-------------------------------------------------+| 生存时间(TTL)(8位) |+-------------------------------------------------+| 协议类型 (8位) |+-------------------------------------------------+| 首部校验和(16位) |+-------------------------------------------------+| 源IP地址(32位) |+-------------------------------------------------+| 目的IP地址 (32位) |+-------------------------------------------------+* IP选项(若有) (32位) *+-------------------------------------------------+* 数据 *+-------------------------------------------------+这里要说的是首部校验和字段。
子网划分为了便于网络的管理、提高系统的可靠性、改进系统性能、克服简单局域网的技术条件限制、通过设置不同访问权限来增强系统的安全保障,人们采用了划分子网的办法将网络进一步划分成独立的组成部分。
现在的主机都要求支持子网编址。
不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。
例如,把一个B类网络地址的16位主机号分成8位子网号和8位主机号如下图所示:图3-4 子网划分这样就允许有254个子网,每个子网可以有254台主机。
对A类和B类网络,许多管理员采用自然的划分方法,即以8位为单位划分子网地址和主机号。
这样用点分十进制方法表示的IP地址就可以比较容易确定子网号。
但是,并不要求A类或B类地址的子网划分都要以字节为分界限。
子网对外部路由器来说隐藏了内部网络组织的细节。
主机除了知道IP地址以外,还需要知道IP中有多少位用于子网号,多少位用于主机号。
这是通过使用一个称为“子网掩码”的32位值来完成的。
其中值为1的位留给网络号和子网号,为0的位留给主机号。
给定IP地址和子网掩码以后,主机就可以确定IP数据包的目的是本子网中的主机、本网络中其它子网中的主机还是其它网络上的主机。
如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分界线。
而根据子网掩码就可知道子网号与主机号之间的分界线。
子网掩码除了可以如IP地址一样用“点分十进制”方式表示外,还可以在IP地址后用一个斜线(/)后面写明子网掩码的位数的方法来表示。
如:192.168.1.25/24表示IP地址192.168.1.25的掩码为255.255.255.0。
IP报文格式IP数据报格式如下图所示,它是由IP首部与数据组成的。
IP首部长度通常为20字节。
如果含有选项字段,IP首部长度将会大于20字节,但不会超过60字节。
图3-5 IP报文格式在IP首部中各个字段的意义如下:●版本号:这个字段定义了IP的版本。
ipv4校验方法IPv4是Internet Protocol Version 4的缩写,是目前网络上广泛使用的一种网络协议。
在IPv4中,IP地址由32位二进制数表示,分为4个8位的字段,每个字段用十进制表示,范围从0到255。
IPv4校验方法是确保数据在传输过程中没有被篡改或损坏的关键步骤。
IPv4校验方法采用的是一种称为校验和的检验机制。
校验和是一种简单但有效的数据完整性检验方法。
它通过对数据包中的每个16位字进行二进制求和,并将结果取反,得到一个16位的检验和值。
发送方计算出校验和后,将其添加到IPv4头部的校验和字段中,并在数据包发送出去之前对整个数据包进行校验和计算。
接收方收到数据包后,也会对整个数据包进行校验和计算,并将计算得到的校验和与接收到的校验和进行比较。
如果两者一致,说明数据包在传输过程中没有被篡改或损坏,可以接受;如果不一致,则说明数据包可能被篡改或损坏,需要丢弃。
IPv4校验和的计算过程如下:1. 将数据包中的每个16位字进行二进制求和,得到一个32位的结果。
2. 将32位的结果分为两个16位的部分,进行二进制求和,得到一个16位的结果。
3. 将16位的结果取反,得到最终的校验和值。
通过校验和的计算,可以确保数据在传输过程中没有被篡改或损坏。
然而,校验和并不能完全避免数据的错误或丢失。
因为校验和是在传输层进行计算的,而数据的错误或丢失可能发生在更低的网络层或更高的应用层。
此外,校验和的计算也会带来一定的计算开销,降低网络的传输效率。
除了校验和,IPv4还可以使用其他一些校验方法来增强数据的完整性和可靠性。
例如,可以使用循环冗余校验(CRC)来检测数据的错误和丢失。
CRC是一种更复杂但更可靠的校验方法,它通过对数据进行多项式除法运算,得到一个余数,将余数添加到数据包中作为校验码。
接收方在接收到数据包后,也会进行CRC运算,并将计算得到的余数与发送方发送的余数进行比较。
如果两者一致,说明数据包在传输过程中没有发生错误或丢失;如果不一致,则说明数据包可能发生了错误或丢失。
IP首部校验和的计算方法:1.把校验和字段清零。
2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。
接下来详细描述反码求和的步骤:看下面的代码算法:SHORT checksum(USHORT*buffer,int size){unsigned long cksum =0;while(size>1){cksum +=*buffer++;size -=sizeof(USHORT);}if(size){cksum +=*(UCHAR*)buffer;}cksum =(cksum>>16)+(cksum&0xffff);cksum +=(cksum>>16);return(USHORT)(~cksum);}参数buffer是指向16位整数的指针,刚开始指向的是IP首部的起始地址,参数size是IP首部的大小。
while循环是将IP首部的内容以16位为单元加在一起,如果没有整除(即size还有余下的不足16位的部分),则加上余下的部分,此时的cksum就是相加后的结果,这个结果往往超出了16位,因为校验和是16位的,所以要将高16位和计算得到的cksum 再加工。
再加工第一步:cksum = (cksum>>16) + (cksum&0xffff); sum>>16是将高16位移位到低16位,sum&0xffff是取出低16位,相加得到新的cksum。
再加工第二步:cksum += (cksum>>16); 第一步相加时很可能会产生进位,因此要再次把进位移到低16位进行相加。
这样就加工好了,接下来就是取反,并强制转换为16位,这样就得到了最终的校验和。
校验和计算出来了,接下来就是该如何校验:接收方进行校验时,也是对每16位进行二进制反码求和。
接收方计算校验和时的首部与发送方计算校验和时的首部相比,多了一个发送方计算出来的校验和。