TCP/IP 校验和简析

简介: TCP/IP 校验和简析

Checksum原理


Checksum广泛应用于TCP/IP协议族,用于校验IP、TCP、UDP数据,其原理比较简单,其计算校验和的步骤如下: 1)在数据发送端,首先将检验和字段本身清零,将被检验的相邻字节成对配成16bit的整数,将所有的配对相加,同时将进位加到校验和的低字节上,我们将得到的校验和定义为a,最后再将校验和取反记为-a,将-a放到校验和字段发送到网络中。 2)如果在数据传输过程中,没有比特位改变,则在目的地计算的校验和应该为等于a+(-a)即,二进制反码-0(全1),而它的二进制反码为0(全0)。所以在目的地,一个没有损坏分组计算出来的校验和总是0。


Checksum 特性


校验和计算原理虽然十分的简单,但其中包含了不少数学特性在里面,下面简单介绍一下:


  1. 校验和对于被校验的数据长度没有限制,即数据长度为奇数或偶数都不会影响校验的结果。


  1. 校验和的计算结果不依赖于硬件平台的大小端特性,即对于同一组数据大端平台和小端平台计算的结果一样。


举个例子,例如下面一组数据为待校验的分组:


内存地址  0x00  0x01  0x02  0x03  0x04
数据  0xF1  0xF2  0xF3  0xF4  0xF5


小端平台的校验和计算:
计算所有数据的和:
0xF2F1 + 0xF4F3 + 0x00F5 = 0x01E8D9
将进位加到低字节:
0xE8D9 + 0x01 = E8DA
取反:0x1725
 校验和在内存中的位置:
内存地址  0x05  0x06
校验和 0x25  0x17


大端平台的校验和计算:
计算所有数据的和:
0xF1F2 + 0xF3F4 + 0xF500 =0x02DAE6
将进位加到低字节:
0xDAE6 + 0x02 = 0xDAE8
取反:0x2517
校验和在内存中的位置:
内存地址  0x05  0x06
校验和 0x25  0x17


可见不同平台下计算得到的校验和在内存中表示都是一样的,即结果都是一样的。


Checksum 实现


下面为C实现较为原始的checksum算法,代码中对于算法做了比较详细的注释:


unsigned short 
checksum(unsigned short * addr, int count)
{
long sum = 0;
/*
计算所有数据的16bit对之和
*/
    while( count > 1  )  {
        /*  This is the inner loop */
        sum += *(unsigned short*)addr++;
        count -= 2
    }   
/* 如果数据长度为奇数,在该字节之后补一个字节(0),
   然后将其转换为16bit整数,加到上面计算的校验和
  中。
 */
    if( count > 0 ) { 
        char left_over[2] = {0};
        left_over[0] = *addr;
        sum += * (unsigned short*) left_over;
    }   
/*  将32bit数据压缩成16bit数据,即将进位加大校验和
  的低字节上,直到没有进位为止。
 */
    while (sum>>16)
        sum = (sum & 0xffff) + (sum >> 16);
  
   /*返回校验和的反码*/
   return ~sum;
}


相关文章
|
6月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
113 4
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
144 0
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
295 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
|
网络协议
TCP/IP协议族有哪些?
大家好,我是阿萨。昨天我们学习了[URI 和URL 的区别是什么?]了解了URI 和URL的区别。 学习HTTP, 绕不开TCP/IP,那么TCP/IP 协议族分为哪4层?
315 0
TCP/IP协议族有哪些?
|
网络协议 网络性能优化 网络安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
|
域名解析 网络协议 安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
|
网络协议 算法 网络性能优化
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
|
存储 运维 网络协议
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了