TCP/IP 中的二进制反码求和算法
作者:
对于这个算法,很多书上只是说一下思路,没有具体的实现。我在这里举个例子吧
以4bit(计算方便一点,和16bit是一样的)做检验和来验证。
建设原始数据为 1100 , 1010 , 0000(校验位)
那么把他们按照4bit一组进行按位取反相加。 1100取反0011 , 1010取反是0101,0011加上0101 是1000,填入到校验位后
1100 , 1010 , 1000
那么这个就是要发送的数据。收到数据后同样进行按位取反相加。0011+0101+0111 =1111;全为1表示正确
另外注意,当地一步计算校验和的时候,有可能相加后最高位会有进位,那么不能舍弃,一定要加到低位,才能是结果正确。
建设原始数据为 1100 , 1010 , 0000(校验位)
那么把他们按照4bit一组进行按位取反相加。 1100取反0011 , 1010取反是0101,0011加上0101 是1000,填入到校验位后
1100 , 1010 , 1000
那么这个就是要发送的数据。收到数据后同样进行按位取反相加。0011+0101+0111 =1111;全为1表示正确
另外注意,当地一步计算校验和的时候,有可能相加后最高位会有进位,那么不能舍弃,一定要加到低位,才能是结果正确。