您的位置:首页 > 理论基础 > 计算机网络

ipv4和ipv6的 udp/tcp CRC校验和算法

2016-11-30 14:30 1171 查看
IPheader.length是总长度(占16比特包括 IP头 和 后续的数据)
UDPHeader.Length:长度字段:占16比特。标明UDP头部和UDP数据的总长度字节。
IPv4层
1.fcs实际上是32位的crc校验
2.udp校验和首先要求和:
   求和是16位高低位取反求和:比如\x1000要转化成\x0001,同时报文的长度不是16位的整数倍时,那么在末位添2字节的0,故而当报文为b'\x10\x00\x11',实际求和报文为b'\x10\x00\x11\x00',高低位取反后是b'\x00\x10\x00\x11'结果为16+17=33.

依次对"IPHeader.DestAddress""IPHeader.SourceAddress" "IPHeader.Protocol""UDPHeader.Length" “udp头部+playload"高低位取反求和,其中"IPHeader.Protocol"是8位的,要在高位补8位0,然后再高低位取反去和,将5个求和结果相加求和得到32位结果s
再投入以下公式:
s = (s >> 16) + (s &0xffff)
   s += s >> 16
   s = ~s
    s= s & 0xffff

最后的s取低16位,再高低位取反,就是udp的校验和。

3.IP的checksun是只对“IP头”反码求和,结果也要进行如下计算:
s = (s >> 16) + (s &0xffff)
   s += s >> 16
   s = ~s
    s= s & 0xffff

最后的s取低16位,高低位取反,就是IP的校验和。

3.tcp校验和首先要求和,与udp一样,只是tcp头部包含的字段更多
 
IPv6层
1、udp校验和首先要求和:
   求和是16位高低位取反求和:比如\x1000要转化成\x0001,同时报文的长度不是16位的整数倍时,那么在末位添2字节的0,故而当报文为b'\x10\x00\x11',实际求和报文为b'\x10\x00\x11\x00',高低位取反后是b'\x00\x10\x00\x11'结果为16+17=33.

依次对" IPv6Header.DestAddress " "IPv6Header.SourceAddress " " IPv6Header.NextHead " "UDPHeader.Length" “udp头部+playload"高低位取反求和,其中" IPv6Header.NextHead "是8位的,要在高位补8位0,然后再高低位取反去和,将5个求和结果相加求和得到32位结果s
再投入以下公式:
s = (s >> 16) + (s &0xffff)
   s += s >> 16

4000
   s = ~s
    s= s & 0xffff

最后的s取低16位,再高低位取反,就是udp的校验和。

3.IP的checksun是只对“IP头”反码求和,结果也要进行如下计算:
s = (s >> 16) + (s &0xffff)
   s += s >> 16
   s = ~s
    s= s & 0xffff

最后的s取低16位,高低位取反,就是IP的校验和。

2、tcp校验和首先要求和,与udp一样,只是tcp头部包含的字段更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: