为什么TCP和IP头部有单独的校验和?

20

在各个层级中为什么需要使用校验和?例如,在TCP层、IP层以及以太网层都有校验和。

只在一层级中使用校验和不足够吗?


1
“transport layer”、“network layer”和“data-link layer”是它们的实际名称。 - TheTrowser
3个回答

21

出于多种原因,这三个层次都是必需的:

  • IP并不总是在以太网上运行(想象一下IP在RS-232串行线路上运行,这是每个Cisco和Unix盒子都可以做到的)

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

  • TCP数据包可能会从具有完美校验和的IP数据包和片段中错误地重组,即使正确重组,IP和TCP之间的层中也可能引入软件或其他错误。

  • 即使所有软件功能都正常,并且TCP/IP在以太网上运行,由于持续错误,校验和的有限大小可能会被意外地纠正(如果有足够的数据包,则一定会),因此多个校验和是有帮助的。

  • 每次引入新的标题时,就会有更多需要进行校验和的内容,并且新层无法看到下面一层的标题位。


6
RFC文档指出,TCP校验和覆盖整个数据段,而IP校验和仅覆盖IP头部,用于检测错误。 - sasian
+1 非常有启发性,我认为最后一个原因是最有说服力的。 - Ken D

10

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


2
IPv6 的设计者们认为在那些层级中校验和已经不再必要,因此他们选择去除它,并使用其他层级(例如您提到的层级)的校验和。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接