tcp/udp校验和以及伪首部介绍

TCP的检验和

 原文地址:http://www.cnblogs.com/zxiner/p/7203192.html

检验和目的

        目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到检验和有差错,则TCP段会被直接丢弃。

        TCP在计算检验和时,要加上一个12字节的伪首部。伪首部顾名思义就是假的首部,既不往上传也不往下传,只是用于校验TCP/UDP报文段。

伪首部

   伪首部共有12字节,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地址、8位保留字节(置0)、8位传输层协议号(TCP是6,UDP是17)、16位报文长度(首部+数据)。

        伪首部是为了增加校验和的检错能力:通过伪首部的目的IP地址来检查TCP报文是否收错了、通过伪首部的传输层协议号来检查传输层协议是否选对了。

       众所周知,IP首部的校验和会校验IP,那么为何在tcp校验和还需要校验IP呢?因为数据包经过中间器件(路由器)的时候,这些中间器件可能会修改IP首部的内容,例如同时修改目的IP和IP首部校验和。这样一来将导致错误的接收方接收到该数据包。因此在TCP的伪首部加上IP地址,可以防止错收报文。既然中间器件可以修改IP首部的信息,为什么不将TCP的校验和一起修改呢,这样不就使得接收方误收数据包吗?当然可以,但是中间器件一般不会修改TCP层的信息。

 

检验和计算过程(以TCP校验为例)

        TCP首部校验和计算三部分:TCP首部+TCP数据+TCP伪首部。

发送端:

        首先,把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。

        把TCP报头中的校验和字段置为0。

        其次,用反码相加法(对每16bit进行二进制反码求和)累加所有的16位字(进位也要累加,进位则将高位叠加到低位)。

        最后,将上述结果作为TCP的校验和,存在检验和字段中。

接收端:

        同样利用反码求和,高位叠加到低位, 如计算结果的16位中每一位都为1,则正确,否则说明发生错误。  

 

验证示例:

          校验和  反码求和过程

        以4bit 为例

        发送端计算:

        数据:   1000  0100   校验和  0000

        则反码:0111  1011               1111

        叠加:   0111+1011+1111 = 0010 0001   高于4bit的, 叠加到低4位      0001 + 0010 = 0011 即为校验和

 

        接收端计算:

        数据:  1000   0100   检验和  0011

        反码:  0111   1011                1100

        叠加:  0111 + 1011 +1100 = 0001 1110  叠加为4bit为1111.   全为1,则正确

 

UDP检验和

        基本过程和TCP检验和相同,不同的是UDP的伪首部中8位传输层协议号是17而TCP是6。

 

IP检验和

        IP首部中的检验和只覆盖IP的首部,不覆盖IP数据报中的任何数据

 

三者检验和的异同

        TCP和UDP检验和是一个端到端的检验和,由发送端计算,然后由接收端验证。

        TCP和UDP检验和覆盖首部和数据,而IP首部中的检验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。

        TCP的检验和是必需的,而UDP的检验和是可选的。

        TCP和UDP计算检验和时,都要加上一个12字节的伪首部。

 

(全文完)

  • 24
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值