TCP协议之校验和

发送方生成校验和: 1.将待发送数据分成若干个16位的位串,每个位串看成一个二进制数,这里并不管位串代表什么,可以是整数、浮点数、或者位图;
2.将IP、UDP、TCP的PDU首部中的校验和字段置为0,该字段也参与校验和运算;
3.对这些16位的二进制数进行1的补码和运算,累加的结果再取反码即生成了校验码,将校验码放入校验和字段中。
(其中1的补码和运算,即带循环进位的加法,最高位有进位则循环进到最低位;反码即二进制各位取反,如0111的反码为1000。)
接收方校验校验和: 1.接收方将接收的数据(包括校验和字段)按发送方同样的方法进行1的补码和运算,累加的结果再取反码;
2.校验,如果上步的结果为0,表示传输正确;否则传输出错。
校验算法示例如图: TCP协议之校验和
文章图片
image.png 图中所示为一个只包含4个16位二进制数进行检验和运算的简单例子。图(a)所示为发送方的运算,①、②、③是3个数据,④是检验和,先置0,也参加检验和运算。⑤是它们的一的补码和,⑥是⑤的反码。发送方将⑥放到检验和字段和数据一起发出。图(b)所示为接收方的运算,如果没有传输差错,最后结果应为0。
参考: 【TCP协议之校验和】https://baike.baidu.com/item/%E6%A0%A1%E9%AA%8C%E5%92%8C/7358071?fr=aladdin

    推荐阅读