在IP协议中,首部格式中有一个首部校验和字段,该字段采用的校验方法与常用的奇偶校验和循环冗余校验不同,下面将详细介绍这种方法,以及它所遇到的问题及解决方案
一、校验方法
IP首部的校验方法:
只校验首部不校验数据部分
发送方:将校验和字段置为0,然后将首部以2字节为一组,以二进制反码的形式相加,将其结果取反码后,写入到IP数据报的首部校验和字段。
接受方:与发送方的操作相似,收到数据报后,将首部以2字节16bit为一组,以二进制反码的形式相加,如果结果为1,则表示该数据报的首部在传输中没有差错,否则出现差错。
该方法在TCP/IP协议中有很多协议都会用到,比如TCP、UDP,不同的是,TCP、UDP添加了12字节的伪首部
二、存在的问题
在TCP、UDP存在的问题是这种检错的方法并不可靠,但是它简单、效率高,在TCP、UDP中并没有什么太大的缺陷,而在IP数据报中,因为IP数据报是基于第三层网络层转发的,因此,会频繁的对IP数据报修改,比如IP协议中的TTL值,每经过一个路由器都要减去1,该值都要发生变化,对应校验和也要发生变化,而源数据只发生了很小的一次变化,就要重新计算校验和,这大大降低了路由器的转发速率。
在RFC1141文档中提供了一种解决方法:增量更新
即在原始值只发生了很小的变化,可以对校验和做出很小的改变,而不用重新计算校验和
三、解决方案
原始校验和C&#x