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头部包含的字段更多
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头部包含的字段更多
相关文章推荐
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
- python---TCP UDP IPv4 IPv6 客户端和服务端的实现
- Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
- MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式
- TCP socket ipv6与ipv4的区别
- 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
- Windows下使用IPV6 socket收发TCP,UDP数据
- Linux命令精选-显示当前激活的tcp连接(支持IPv4和IPv6)
- MAC、IPv4、UDP、TCP包结构分析
- IPv4头和TCP头校验和计算算法
- ipv4及ipv6及tcp的头部结构
- IP校验和算法,tcpdump,tcp、udp
- IPv4、TCP和UDP的校验和计算
- 简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信
- IPV6 UDP编程实例 & IPV6 TCP编程实例
- 转载]MAC、IPv4、UDP、TCP包结构分析
- C# — WinForm TCP连接IPv4和IPv6的判断