数据链路层已有CRC,为何仍需IP首部校验和?
为什么有了数据链路层CRC还需要IP首部校验和?
CRC是逐链路的,管不了路由器内部的篡改或损坏
数据链路层的CRC只负责当前链路的帧完整性。当路由器收到帧后,会解封装取出IP数据报,这时候CRC的作用就结束了。路由器在处理IP数据报时(比如把TTL减1、更新首部校验和),如果IP首部在路由器内部出现损坏(比如内存读写错误),这时候还没封装成新的帧,自然没有CRC能检测到这问题。IP首部校验和就是用来在路由器转发前,确认IP首部没出问题的。IP校验和更轻量,适合逐跳校验首部
CRC要计算整个帧的校验值,开销不小。而IP首部校验和只针对IP首部(不包含数据部分),计算简单,路由器每跳都能快速验证首部的完整性,不用消耗太多算力。毕竟路由器要处理大量数据包,轻量的校验更实用。链路层CRC不是绝对可靠的(漏检概率极低但存在)
虽然CRC的检错能力很强,但理论上还是存在极小的漏检概率。IP首部校验和相当于给IP首部多了一层保险,尤其是针对首部这种关键信息(比如目的IP、TTL),双重校验能进一步降低错误传递的风险。部分链路可能没有CRC机制
IP协议是设计成跨各种链路类型的,有些特殊链路可能没有CRC校验。这时候IP首部校验和就成了保障IP首部完整性的最后一道防线,确保IP数据报能被正确处理。
内容的提问来源于stack exchange,提问作者dewesh jha
相关产品推荐
相关产品推荐

