网站大量收购独家精品文档,联系QQ:2885784924

tcp_ip效验和理解.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
tcp_ip效验和理解

本文结合网上资料记当个人对效验和算法的理解: 1、算法推导: 1 2、算法: 1 3.实例 2 4、 实现代码: 5 1、算法推导: 具体算法见后。 整个算法可理解为 ~(a + ~a) = 0; 发送方: 先置checksum = 0 ,假设各单元求和为 sum1 = m + n * 2^16 。那么n即为溢出 的高位。 所以得出 checksum = ~ (m+n) 。 接收方:(在传输无误情况下) 各单元求和 sum2 = sum1 + checksum = m + n * 2^16 + ( ~ (m+n) ) 同样接收方也会将溢出的高位加至低位,n * 2^16 中 n 为已知的高位所以先处理 [不管m + (~(m+n))是否还溢出] 。 所以sum2 = m + n + ( ~ (m+n) ) = (m + n )+ ( ~ (m+n) ) 所以 ~ sum2 = 0; 跟据以上推导,不管采用大端 还是 小端 模式 ,只要发送方和接收方采用的模式一样,那么发送方和接收方算出的sum1(除去checksum字段后其它字段的和)都肯定一样。所以上述推导仍然成立。 2、算法: 1、发送方   i)将校验和字段置为0,然后将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;   ii)对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段;   iii)发送数据包。 2、接收方   i)将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;   ii)对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0); iii) 如果是全1则进行下步处理,否则意味着包已变化从而丢弃之。需要强调的是反码和是采用高位溢出加到低位的,如3比特的反码和运 算:100b+101b=010b(因为100b+101b=1001b,高位溢出1,其应该加到低位,即001b+1b(高位溢出位)=010b)。 .实例 请看我用ominipeek的抓包 I.将校验和字段置为0,然后将IP包头按16比特分成多个 校验和Header Checksum:0x618D将其重置为0X0000 将IP包头分段:         1.  0x4500         2.  0x0029         3.  0x44F1         4.  0x4000         5.  0x8006         6.  0x0000 -------这个为Header Checksum的值,我们前面将其重置为0了         7.  0xC0A8         8.  0x01AE         9.  0x4A7D +       10.  0x477D ------------------------------------------------------- 将1至10相加求出来的和为:0x29E70 II.对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段 0x0002+0x9E70=0x9E72 0x9E72二进制为:1001 1110 0111 0010 反码为:0110 0001 1000 1101 0110 0001 1000 1101的16进制为:0x618D 看看这个 是否与IP包头中的Checksum相同 ========================================================== 当接收到IP对其进行检测 III.对各个单元采用反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,然后判断最终值是不是全0) 当收到IP数据局包的时候,要验证IP头是否正确,则可以这样进行         1.  0x4500         2.  0x0029         3.  0x44F1         4.  0x4000         5.  0x8006         6.  0x618D -------这个为Header Checksum的值         7.  0xC0A8         8.  0x01AE         9.  0x4A7D +       10.  0x477D ------------------------------------------------------- 将1至10相加求出来的和

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档