- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
首部检验和原理 三组 什么是首部检验和? 首部检验和字段是根据IP首部计算的检验和码。首部检验和在IP数据报中占16位。它只检验数据报的首部,不包括首部后面的数据。 可变 部分 0 4 8 16 19 24 31 版 本 标志 生 存 时 间 协 议 标 识 区 分 服 务 总 长 度 片 偏 移 填 充 首 部 检 验 和 源 地 址 目 的 地 址 可 选 字 段 (长 度 可 变) 位 首部长度 数 据 部 分 固定部分(20字节) 下图是一般IP数据报的格式,若仅仅去理解校验和就不必去看这些字段的细节。 IP检验和就是对首部(固定部分+可变部分)求的检验和。 首 部 为什么使用首部检验和原理? IP数据包中的首部校验字段的算法不采用循环冗余算法,是因为IP包在网络中传输时,其TTL字段的值经常会变化,故采用简单的叠加方法,就可以避开中间路由器重新计算其校验值,只是简单的增加1操作即可,这样可以明显提高传输效率。 IP首部检验和的计算步骤 发送端:发送前计算首部检验和 接收端:接收数据时计算检验和 发送端: 1、把校验和字段设置为0; 2、把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和; 3、把得到的结果存入校验和字段中 接收端: 1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段; 2、检查计算出的校验和的结果是否为0; 3、如果等于0,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。 具体过程: 发送端 接收端 16 位 字 1 16 位 字 2 置为全 0 检验和 16 位 字 n … … 取反码 IP 数据报 16 位 检验和 16 位 字 1 16 位 字 2 16 位 字 n … … 取反码 数据部分 数据部分 不参与检验和的计算 二进制反码求和: 0和0相加是0,0和1相加是1,1和1相加是0但要产生一个进位1,加到下一列.若最高位相加后产生进位,则最后得到的结果要加上溢出的进位1(可能是多個1)。 所谓的二进制反码求和,即为先进行二进制求和,然后对和取反。 1 1 0 1 1 第一个二进制加数 + 1 0 1 0 1 第二个二进制加数 --------------- 1 0 0 0 0 相加之和为110000, 最高位的1需要放到 下一列相加 1 --------------- 1 0 0 0 1 相加得到的结果 0 1 1 1 0 取反得到最终结果 检验和的计算方法: (1)把IP数据包的校验和字段置为0;? (2)把首部看成以16位为单位的数字组成,依次进行二进制求 和(注意:求和时应将最高位的进位保存,所以加法应采用32位加法);? (3)将上述加法过程中产生的进位(最高位的进位)加到低16位(采用32位加法时,即为将高16位与低16位相加,之后还要把该次加法最高位产生的进位加到低16位)? (4)将上述的和取反,即得到校验和。
文档评论(0)