TCP的校验和机制详解
字数 1154 2025-11-09 06:15:06

TCP的校验和机制详解

一、校验和的基本概念
TCP校验和是TCP头部中的一个16位字段,用于检测TCP报文段在传输过程中是否出现错误。发送方计算校验和并填入头部,接收方重新计算校验和并与接收值对比,若不一致则丢弃报文段。其核心目的是保证数据传输的完整性。

二、校验和的计算步骤

  1. 伪首部的构造
    TCP校验和计算不仅包含TCP头部和数据,还包含IP层部分信息(伪首部),确保数据正确传递给目标进程。伪首部结构如下:

    • 32位源IP地址
    • 32位目的IP地址
    • 8位保留字段(全0)
    • 8位协议号(TCP为6)
    • 16位TCP报文段总长度(头部+数据)
  2. 数据分组与补零
    将伪首部、TCP头部和数据按16位(2字节)一组分割。若总字节数为奇数,末尾补一个零字节(填充字节不传输,仅用于计算)。

  3. 反码求和运算
    对所有16位分组进行二进制反码求和(即加法时最高位进位需循环加至最低位)。例如:

    • 假设两组数据为 0x12340x5678,求和过程:
      • 第一步:0x1234 + 0x5678 = 0x68AC
      • 第二步:若结果有进位(如 0xFFFF + 0x0001),将进位加到最低位:0x0000 + 0x0001 = 0x0001
  4. 取反码得到校验和
    对求和结果按位取反(0变1,1变0),结果存入校验和字段。若结果为0x0000,则表示为0xFFFF(因反码中0有两种表示形式)。

三、接收方的验证过程

  1. 重新构造伪首部(使用接收到的IP数据报信息)。
  2. 将伪首部、TCP头部和数据按相同方式分组,包含发送方计算的校验和字段。
  3. 对所有16位分组执行反码求和。
  4. 若结果为全1(0xFFFF),说明数据无误;否则丢弃报文段并触发重传。

四、校验和的特性与局限性

  • 特性:轻量级错误检测,计算效率高,但非加密哈希,无法防御恶意篡改。
  • 局限性
    • 可能漏检多位错误(如偏移错误)。
    • 依赖伪首部,若IP地址被篡改且校验和重算,接收方无法发现。
  • 增强措施:在物理层(如CRC)和应用层(如TLS哈希)叠加更严格的校验。

五、实例演示
假设TCP报文段数据为2字节:0x1234,伪首部中IP地址为192.168.1.1(0xC0A80101)和192.168.1.2(0xC0A80102),协议号6,长度=20字节头部+2字节数据=22(0x0016)。

  1. 伪首部:C0A8 0101 C0A8 0102 0006 0016
  2. TCP头部(无校验和时填0):0000 0000 0000 0000 0000 0000 5002 0000 0000 0000
  3. 数据:1234
  4. 求和后取反得到校验和,接收方验证时若结果非全1则判为错误。

通过此机制,TCP在传输层提供了基础的数据完整性保障。

TCP的校验和机制详解 一、校验和的基本概念 TCP校验和是TCP头部中的一个16位字段,用于检测TCP报文段在传输过程中是否出现错误。发送方计算校验和并填入头部,接收方重新计算校验和并与接收值对比,若不一致则丢弃报文段。其核心目的是保证数据传输的完整性。 二、校验和的计算步骤 伪首部的构造 TCP校验和计算不仅包含TCP头部和数据,还包含IP层部分信息(伪首部),确保数据正确传递给目标进程。伪首部结构如下: 32位源IP地址 32位目的IP地址 8位保留字段(全0) 8位协议号(TCP为6) 16位TCP报文段总长度(头部+数据) 数据分组与补零 将伪首部、TCP头部和数据按16位(2字节)一组分割。若总字节数为奇数,末尾补一个零字节(填充字节不传输,仅用于计算)。 反码求和运算 对所有16位分组进行二进制反码求和(即加法时最高位进位需循环加至最低位)。例如: 假设两组数据为 0x1234 和 0x5678 ,求和过程: 第一步: 0x1234 + 0x5678 = 0x68AC 第二步:若结果有进位(如 0xFFFF + 0x0001 ),将进位加到最低位: 0x0000 + 0x0001 = 0x0001 取反码得到校验和 对求和结果按位取反(0变1,1变0),结果存入校验和字段。若结果为0x0000,则表示为0xFFFF(因反码中0有两种表示形式)。 三、接收方的验证过程 重新构造伪首部(使用接收到的IP数据报信息)。 将伪首部、TCP头部和数据按相同方式分组,包含发送方计算的校验和字段。 对所有16位分组执行反码求和。 若结果为全1(0xFFFF),说明数据无误;否则丢弃报文段并触发重传。 四、校验和的特性与局限性 特性 :轻量级错误检测,计算效率高,但非加密哈希,无法防御恶意篡改。 局限性 : 可能漏检多位错误(如偏移错误)。 依赖伪首部,若IP地址被篡改且校验和重算,接收方无法发现。 增强措施 :在物理层(如CRC)和应用层(如TLS哈希)叠加更严格的校验。 五、实例演示 假设TCP报文段数据为2字节: 0x1234 ,伪首部中IP地址为 192.168.1.1 (0xC0A80101)和 192.168.1.2 (0xC0A80102),协议号6,长度=20字节头部+2字节数据=22(0x0016)。 伪首部: C0A8 0101 C0A8 0102 0006 0016 TCP头部(无校验和时填0): 0000 0000 0000 0000 0000 0000 5002 0000 0000 0000 数据: 1234 求和后取反得到校验和,接收方验证时若结果非全1则判为错误。 通过此机制,TCP在传输层提供了基础的数据完整性保障。