TCP的校验和机制详解
字数 1154 2025-11-09 06:15:06
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在传输层提供了基础的数据完整性保障。