TCP和UDP校验和
校验和所校验的内容包括:12字节伪首部、TCP的首部以及全部数据。
伪首部:包含了源地址、目的地址、协议和TCP长度等字段,这能够防止TCP出现
路由选择错误的
数据段。
伪首部并非TCP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。
这样的校验和,既校验了TCP用户数据的源
端口号和目的端口号以及TCP用户数据报的数据部分,又检验了
IP数据报的源IP地址和目的地址。(伪报头保证UDP和TCP
数据单元到达正确的目的地址。因此,伪报头中包含IP地址并且作为计算校验和需要考虑的一部分。最终目的端根据伪报头和数据单元计算校验和以验证通信数据在传输过程中没有改变而且到达了正确的目的地址。)

tcp报文中,在tcp的首部之前,多了一个12字节的伪首部,伪首部中4个字节保存源ip信息,4个字节目的ip信息,一个字节的保留位置,一个字节保存协议号(6代表tcp,17代表udp),2个字节保存tcp首部+数据的长度。
根据伪首部的信息通过位运算,得到了一个校验和数据,保存在tcp保温的checksum字段。接收端接收到tcp报文后,也按照特定算法计算出一个校验和,与checksum保存的校验和比较,如果相同,则完成此报文的接收。如果不相同,则丢弃此报文,让发送端重传。
tcp校验和与ip校验和的区别是:TCP和UDP检验和覆盖首部和数据,而IP首部中的检验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。
tcp校验和和udp校验和的区别是:TCP的检验和是必需的,而UDP的检验和是可选的。
参考资料:https://blog.csdn.net/jigetage/article/details/88739511