TCP/UDP 校验和、伪首部

tcp和udp两个协议相对应的首部,都有一项是校验和。

校验和是干什么的?
在接收端收到数据时,判断协议首部和数据是否被破坏。是在数据包中真实存在的一段数据。
伪首部是干什么的?
伪首部用来生成校验和,伪首部只是一种根据真实的首部的部分数据抽象出来的一种数据结构。并没有在数据包中真实的存在。
伪首部的构成
TCP的校验和与UDP包的校验和相似,将下图中UDP包长度改为TCP包长度就是TCP伪首部的构成。

在这里插入图片描述

  • 源IP地址:32位
  • 目标IP地址:32位
  • 包长度:16位
  • 协议号:8位

由于伪首部的全长是16的倍数(后面解释为什么是16),目前是32+32+16+8=88,最近的一个16的倍数是96,所以需要补8位,伪首部中的填充就是将需要补的8位用0填充。

为什么伪首部必须是16的倍数?
是因为利用伪首部生成校验和的流程。流程如下
  • 拿到伪首部以后,以16位为单位,将96位的伪首部划分成4个16位的数。
  • 将这4个16位的二进制数相加。
  • 取反。
  • 得到16位校验和(16个二进制的数,可化为一个16进制的数)。
接收端校验过程

接收端收到数据后根据TCP首部数据构造出伪首部。重复生成校验和一直到取反的前一步。将得到的结果值与tcp首部中的校验和相加,如果是16个1。那么校验成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值