资讯动态

TCP的“校验和“是做什么的?它和PHP的md5()有什么区别?

发布时间:2026/10/13 3:31:52 来源:尧图企业网站定制
一、TCP校验和是什么干什么TCP校验和是放在TCP头部里的一段简短校验码。拼图比喻你寄出每一块拼图碎片TCP分段在碎片背面快速写一个简易的校验验证码。收件人拿到这块碎片按同样的算法重新算一遍验证码对比是否一致。如果不一致说明这块碎片在运输途中上面的图案字节发生损坏比特翻转0变1、1变0直接丢弃这个分段等待发送方超时重传。核心作用检测传输过程中TCP分段的数据TCP头 TCP载荷有没有发生比特错误。网线、网卡、电磁干扰有可能导致个别字节在传输途中出错。校验和用来发现这类损坏。校验和校验范围TCP头部 TCP携带的业务数据比如PHP发出的SQL字符串计算在发送端内核TCP模块完成接收端内核TCP模块做校验校验失败 → 直接丢弃该分段不会给应用层MySQL/PHP通知依靠后续超时重传机制补发。注意TCP校验和只是差错检测不能修复错误坏包只能丢掉重传。二、PHPmd5()是什么md5是密码学哈希摘要算法。给一段原始数据算出一个固定128bit32位十六进制字符串的指纹。md5(SELECT name FROM user WHERE id1);用途对完整业务数据生成唯一指纹用来做完整性校验、比对文件。三、核心区别5个维度面试重点1. 运行位置不同TCP校验和操作系统内核的TCP协议栈自动计算。PHP代码完全感知不到不需要程序员写任何代码。每一个TCP分段都会单独算校验和。md5()PHP应用层函数在用户代码里手动调用。是你业务代码主动执行。2. 计算粒度不同TCP校验和按每一个TCP分段单独计算。一大段SQL被TCP切成多个拼图碎片每一块碎片单独算自己的校验和。只负责这一小段。md5针对完整的原始字符串整体计算。必须拿到全部完整数据一次性算出整个文本的指纹。你不能单独对一小块碎片算md5然后简单拼接得到整体md5。3. 算法设计目标不一样TCP校验和轻量、快速。是简单的16位累加求反。硬件网卡就能直接计算几乎不耗性能。缺点检错能力有限存在碰撞概率两段不同数据算出同样校验和不用于防人为篡改只抓线路随机比特错误。md5密码学哈希设计目标是尽量保证不同数据摘要不同。理论上可以用来校验文件有没有被人为修改。缺点计算开销更大md5已经被破解不能用于安全签名仅适合简单文件完整性比对。4. 作用场景不一样TCP校验和网络链路传输层对付线路随机损坏。只管数据包在路上传输时意外损坏。不防人为恶意修改。如果中间人刻意修改数据包同步修改TCP校验和TCP校验和无法发现。md5业务层。比如PHP上传文件后服务端计算md5和客户端传来的md5比对确认整个文件有没有改动。5. 出错之后的处理逻辑不同TCP校验和出错内核直接丢弃包依靠TCP的ACK、超时重传自动补发PHP完全不知道这件事。md5校验失败是你的PHP业务代码判断由你自己写代码决定怎么处理抛出异常、重试、报错返回给用户操作系统不会自动处理。四、结合PHP连MySQL例子串起来PHP发送SQL语句SELECT name FROM user WHERE id1内核TCP把这条SQL切成分段每一段单独计算TCP校验和放到TCP头部IP包通过网络传输。如果电磁干扰导致某个字节翻转MySQL服务器操作系统收到这个分段重新计算校验和比对发现不一致直接丢弃这个包客户端长时间收不到ACK触发超时重传重新发送这一段。整个过程PHP代码无感知。如果你在PHP代码里写md5($sql)那是另外一回事这是业务层面对整条SQL生成指纹不是网络传输用的。一句话浓缩TCP校验和是操作系统内核给每一小段网络数据快速算的简易校验码用来检测网线传输的随机比特损坏PHP md5()是应用层的密码学摘要针对完整数据生成指纹用于业务层面校验文件/内容完整性算法、运行位置、粒度、安全目标完全不一样。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑