TCP的检验和spa
检验和目的blog
目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。若是接收方检测到检验和有差错,则TCP段会被直接丢弃。it
TCP在计算检验和时,要加上一个12字节的伪首部。二进制
伪首部共有12字节,包含IP首部的一些字段,有以下信息:32位源IP地址、32位目的IP地址、8位保留字节(置0)、8位传输层协议号(TCP是6,UDP是17)、16位TCP报文长度(TCP首部+数据)。im
伪首部是为了增长TCP校验和的检错能力:经过伪首部的目的IP地址来检查TCP报文是否收错了、经过伪首部的传输层协议号来检查传输层协议是否选对了。数据
检验和计算过程协议
TCP首部校验和计算三部分:TCP首部+TCP数据+TCP伪首部。
img
接收端:di
将全部原码相加,高位叠加到低位, 如计算结果的16位中每一位都为1,则正确,不然说明发生错误。 co
UDP检验和
基本过程和TCP检验和相同,不一样的是UDP的伪首部中8位传输层协议号是17而TCP是6。以下图所示
IP检验和
IP首部中的检验和只覆盖IP的首部,不覆盖IP数据报中的任何数据
三者检验和的异同
TCP和UDP检验和是一个端到端的检验和,由发送端计算,而后由接收端验证。
TCP和UDP检验和覆盖首部和数据,而IP首部中的检验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。
TCP的检验和是必需的,而UDP的检验和是可选的。
TCP和UDP计算检验和时,都要加上一个12字节的伪首部。
(全文完)