Networking 为什么TCP和IP报头中有单独的校验和?

Networking 为什么TCP和IP报头中有单独的校验和?,networking,Networking,在不同的层上进行校验和的必要性是什么?例如,TCP层有校验和,IP层和以太网层也有校验和。 在一层上有校验和是不够的吗 出于多种原因,需要所有三层: IP并不总是通过以太网运行(想象一下RS-232串行IP,这是每个Cisco和Unix设备都能做到的) IP不会对数据进行校验和 TCP数据包可能会从IP数据包和具有完美校验和的片段中错误地重新组合 即使重新组装正确,也可能在IP和TCP之间的层中引入软件或其他错误 即使所有软件都正常运行,并且TCP/IP是通过以太网的,但在遇到持续性错误时,校

在不同的层上进行校验和的必要性是什么?例如,TCP层有校验和,IP层和以太网层也有校验和。
在一层上有校验和是不够的吗

出于多种原因,需要所有三层:

  • IP并不总是通过以太网运行(想象一下RS-232串行IP,这是每个Cisco和Unix设备都能做到的)

  • IP不会对数据进行校验和

  • TCP数据包可能会从IP数据包和具有完美校验和的片段中错误地重新组合

  • 即使重新组装正确,也可能在IP和TCP之间的层中引入软件或其他错误

  • 即使所有软件都正常运行,并且TCP/IP是通过以太网的,但在遇到持续性错误时,校验和的有限大小可能会意外地正确(并且在某些情况下,给定足够的数据包),因此有多个校验和是有帮助的

  • 每次引入一个新的报头时,校验和就有更多的内容,新层无法看到下面层的报头位


以太网校验和是一种逐跳校验和-意味着每次以太网报头字段更改时都会重新计算它。TCP/UDP校验和是端到端校验和,这意味着它由发送方计算并由接收方验证。TCP/UDP校验和覆盖整个网段。IP校验和只覆盖报头。以太网CRC覆盖整个帧。

IPv6的设计者认为在所有这些层都不需要它,并将其删除,以支持在其他层(如您提到的层)进行校验和。

RFC说,TCP校验和覆盖整个帧段,而IP校验和只覆盖错误的IP报头。+1非常有用,我认为最后一个原因是最有说服力的,“传输层”、“网络层”和“数据链路层”是btw的实际名称。