我做了很多研究,这让我更加困惑。问题是,是否在互联网层(IP),传输层(TCP / UDP)或两者都验证了数据包校验和?
谢谢, 颜
答案 0 :(得分:4)
IP和TCP层都有校验和。 IP校验和仅是头校验和,而TCP执行伪头,TCP段头和有效负载的校验和。
校验和由两者检查,IP检查其头校验和,如果它通过,TCP在从IP层接收数据包时执行校验和。校验和都应传递给数据以达到预期的应用程序。
如果IP校验和失败,IP应该丢弃数据报,如果TCP校验和失败,它也应该丢弃它。
答案 1 :(得分:0)
很好的问题。这是另一个问题,谁的答案可能会提供帮助。谁使用校验和?
不是每个设备都查看每个标头,对吗?交换机仅查找第2层/数据链路层,路由器仅查找第3层/网络层,最终主机评估第4层/传输层。如您所述,只有L3和L4标头具有校验和,这意味着交换机无法评估校验和。但是,路由器可以并且将丢弃具有错误CRC的数据包(它仅评估IP报头校验和)。这样可以节省带宽,因为数据包仅会被丢弃到目的地。如果数据包确实到达了最终主机,它将验证L3校验和以及L4报头。因此,我们可以对CRC错误进行端到端检测,从而节省了带宽。
注意:我不确定路由器是否由于CRC错误而丢弃数据包是否会向客户端生成通知,以便它可以立即重新传输,而不必等待计时器到期。这样可以加快重传过程的速度,它可能是路由器上的一个可配置选项,但我想如果它存在的话,那将是一个安全漏洞。