网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

TCP校验和的计算

更新时间:2026年03月27日   作者:spoto   标签(Tag):

在网络通信中,确保数据的完整性是非常重要的。因此,为了检测传输过程中可能出现的错误,互联网协议的重要组成部分——传输控制协议采用了校验和机制。这种校验和由发送方计算出来,并由接收方进行验证。这种机制能够有效防止数据被损坏。

通过基于TCP头部和数据来计算校验和值,同时包含包含重要IP信息的伪头部,发送方可以确保数据的完整性。接收方在接收到数据包后重新计算校验和。如果校验和结果一致,则说明数据准确无误;如果结果不一致,则需要进行重传处理,从而确保数据能够在网络中可靠地传输。在本文中,我们将了解TCP/UDP校验和的计算方法。

理解TCP的校验和

那个TCP校验和这是一种用于检测在网络上传输的数据中是否存在错误的方法。 当数据以TCP段的形式发送时,发送方会计算出一个校验和值,该值用于表示数据的完整性。 这个值会被包含在数据段中。当数据到达时,接收方会重新计算校验和,然后将其与发送方发送的值进行比较。 如果这些数据能够匹配,那么就可以认为数据是无误的。反之,如果数据无法匹配,那就说明存在传输错误,此时需要丢弃或重新传输这些数据。 TCP校验和有助于确保数据传输过程中的数据准确性。

TCP的校验和是通过考虑以下因素来计算得出的:TCP头部、TCP主体以及伪IP头部现在,主要的模糊之处在于:如何计算IP头部中的校验和呢?因为IP数据报是在传输层以下的层次中产生的。简单来说,就是我们处于传输层,而IP数据报则是在这一层被生成的。网络层.

  • 当我们从应用程序接收到数据时,这些数据会被分割成更小的部分。因为整个数据量太大,无法通过网络传输到接收方的主机上。
  • 我们使用的协议是……OSI在…里面传输层它是TCP协议。因此,在将应用层的数据拆分成更小的部分之后,这些被拆分出来的部分就构成了TCP协议的主体部分。
  • TCP头部的大小通常从20字节(此时没有使用任何选项字段的位)到60字节不等(此时所有选项字段的位都被使用了)。
  • 它包含诸如源端口地址、目标端口地址、紧急指针、校验和等字段。

伪IP头

这种伪头部并不是真正的IP头部,而是IP头部的组成部分。我们并不直接使用IP头部,因为IP头部中包含许多会随数据包在网络中传输而不断变化的元素。需要注意的是,我们所使用的其实是IP头部的一部分,这部分内容是不会随着IP数据包在网络中的传输而改变的。为了克服这些错误并提高错误检测的能力,我们采用了这种方式。伪IP头我们可以通过“Transport”字段来估算IP头部的大小。因为,如果估算结果是错误的,那么计算校验和就没有任何意义了。TCP/UDP在传输层中的错误检测功能,依赖于网络层的帮助,从而实现正确的错误检测。

伪IP头部中的字段包括:

  1. 源头的IP地址
  2. 目标设备的IP地址
  3. TCP/UDP段长度
  4. 协议(说明所使用的协议类型)
  5. 8位固定长度

那么,整体的规模就是……伪头部(12字节)= 源IP地址(32位)+ 目标IP地址(32位)+ TCP/UDP段长度(16位)+ 协议类型(8位)+ 固定的8位字段

需要指出的是,这种伪头部是在传输层为计算而创建的。在计算完成后,这个伪头部就会被移除。被丢弃的/无用的而校验和则是通过常用的校验和计算方法来得出的。
因此,所谓的“伪头部”并不被传输到网络中。实际上,会被传输的是在网络层生成的真正的IP头部信息。
TCP校验和包含以下内容:

1.伪IP头
2.TCP头部
3.TCP数据体

逐步指导:如何计算TCP校验和

要计算TCP校验和,请按照以下步骤操作:

  1. 准备数据:将TCP头部与需要传输的数据合并在一起。务必确保包含必要的填充字符,以保证数据的对齐。
  2. 将数据进行划分/分配:将数据分割成16位的数据块(即2字节的单元)。如果最后一部分不完整,则用零来填充它。
  3. 将单词相加:将所有16位的数值相加。如果总和超过了16位的范围,那么将超出部分的数值重新归位到最下方的16位上。
  4. 将总和取反:在将所有单词相加之后,再计算其和的补数(即将所有位取反)。这个补数就是校验和。
  5. 请附加校验和信息:计算得到的校验和会被包含在TCP头部中,以便进行传输。

既然伪头部已经被丢弃,不会被传输到目标主机中,那么目标主机如何判断数据是否被正确接收呢?实际上,伪头部会在目标主机的传输层被重新生成。然后,在目标主机的传输层再次计算校验和。最后,通过常规的校验和计算方法来确认接收到的数据是否正确。

TCP校验和计算中的常见错误及避免方法

在计算TCP校验和时,常见的错误包括:

  • 不包括伪头部信息:TCP校验和的计算不仅仅涉及到TCP段本身,还涉及到一个伪头部,该伪头部中包含了源地址和目的地址等信息。如果忽略了这个伪头部的存在,那么得到的校验和就会出错。
  • 错误的填充方式:有时候,需要添加填充字符来使数据以16位的整数倍进行对齐。如果缺少填充或填充方式不正确,就会导致校验和出错。
  • 溢出处理问题:在添加16位字时,如果总和超过了16位的范围,就需要对超出部分进行处理。如果不正确处理这个问题,就会导致校验和出现错误。
  • 数据错位:确保数据被正确地分割成16位的部分是非常重要的。任何不正确的分割方式都可能导致校验和错误。

在现实场景中计算TCP校验和

以下是计算TCP校验和的一个实际例子:

1. 数据准备:假设我们需要计算以下16位TCP数据中的校验和:

0x1234,0x5678,0x9abc,0xdef0

2. 将单词相加:把它们加在一起:

0x1234 + 0x5678 + 0x9abc + 0xdef0 = 0x2468c

3. 处理溢出情况:由于该数值超过了16位的范围,因此我们需要处理超出16位的多余部分,并将其加回到前16位上。

0x2468c → 0x468 + 0x2 = 0x46a

4. 将总和的符号反转:将数字之和的所有位都反转(即转换为二进制补码形式:0x46a的补码)。

0x46a的1的补码等于0xb95。

5. 最终校验和:校验和的值为 0xb95,该值会被添加到TCP头部中,以便进行传输。

比较分析:TCP校验和与UDP校验和的比较

虽然两者都如此TCP还有UDP使用校验和来检测传输数据中的错误,但两者之间存在关键的区别:

  • TCP校验和:TCP的校验和覆盖了整个数据段,包括头部、数据以及伪头部(其中包含了源地址和目的地址)。IP地址这有助于确保整个通信过程的完整性,包括错误处理和可靠的传输过程。
  • UDP校验和:UDP也使用校验和,不过它的实现方式更为简单。它只是对数据进行简单的检查而已。UDP头部不过,这种处理方式并不包括伪头部的内容。这意味着,与TCP相比,UDP的错误检测机制不够完善,因为UDP无法像TCP那样确保数据的可靠传输。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料