【asp源码栏目提醒】:本文主要为网学会员提供“IP数据报首部校验和算法 详细 非代码-asp net学习网 - 讲义教程”,希望对需要IP数据报首部校验和算法 详细 非代码-asp net学习网 - 讲义教程网友有所帮助,学习一下!
c
.net编程学习网 IP数据报首部校验和算法
详细 非代码 IP数据报首部校验和算法 详细 非代码
内容 IP数据报首部校验和
算法 详细 非代码 当用
google搜索IP数据报首部校验和算法的时候总是看到的是代码
没有看到其
过程于是就有了此文如有
错误请指正。
文章省略
一点呵呵 IP/ICMP/IGMP/
TCP/
UDP等协议的校验和算法都是相同的算法如下 在发送数据时为了计算数IP据报的校验和。
应该按如下步骤 1把IP数据报的首部都置为0包括校验和字段。
2把首部看成以16位为单位的数字组成依次进行二进制反码求和。
3把得到的结果存入校验和字段中。
在接收数据时计算数据报的校验和相对
简单按如下
步骤 1当接收IP包时
需要对报头进行确认检查IP头是否有误算法同上2、3步然后判断取反的结果是否为0是则正确否则有错。
1、发送方 i将校验和字段置为0然后将IP包头按16比特分成多个单元如包头长度不是16比特的倍数则用0比特填充到16比特的倍数 ii对各个单元采用反码加法运算即高位溢出位会加到低位通常的补码运算是直接丢掉溢出的高位将得到的和的反码填入校验和字段 iii发送数据包。
2、接收方 i将IP包头按16比特分成多个单元如包头长度不是16比特的倍数则用0比特填充到16比特的倍数 ii对各个单元采用反码加法运算
检查得到的和是否符合是全1有的实现可能对得到的和会取反码然后
判断最终值是不是全0 iii如果是全1则
进行下步处理否则意味着包已
变化从而丢弃之。
需要强调的是反码和是采用高位溢出加到低位的如3比特的反码和运算100b101b010b因为100b101b1001b高位溢出1其应该加到低位即001b1b高位溢出位010b。
1.实例 请看我用ominipeek的抓包 I.将校验和字段置为0然后将IP包头按16比特分成多个 校验和Header Checksum0x618D将其重置为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.对各个单元采用反码加法运算即高位溢出位会加到低位通常的补码运算是
直接丢掉溢出的高位将得到的和
的反码填入校验和字段 0x00020x9E700x9E72 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. 0x
0029 3. 0x44F1 4. 0x4000 5. 0x8006 6. 0x618D -------这个为Header Checksum的值 7. 0xC0A8 8. 0x01AE 9. 0x4A7D 10. 0x477D ------------------------------------------------------- 将1至10相加求出来的和为0x2FFD 对各个单元采用反码加法运算即高位溢出位会加到低位通常的补码运算是直接丢掉溢出的高位将得到的和的反码填入校验和字段 0x00020x0FFD0xFFFF 0xFFFF二进制为1111 1111 1111 1111 1111 1111 1111 1111反码为0
关于这一部的补充
说明 将IP包头分段 1. 0x4500 2. 0x0029 3. 0x44F1 4. 0x4000 5. 0x8006 6. 0x0000 -------这个为Header Checksum的值
我们前面将其重置为0了 7. 0xC0A8 8. 0x01AE 9. 0x4A7D 10. 0x477D ---------------------------------------------------------------------------------------------------------- Have a nice day ??
2011 c.net
编程学习网
xml地图