2016-04-14 114 views
1

当一个数据包从源发送到目的地时,它必须通过多个路由器,每个路由器将数据包的TTL值减1。因此,在每个路由器上重新计算头校验和,因为一个头域的TTL肯定会改变。那么目的地如何通过计算校验和来验证错误的存在,尽管它的校验和已经改变了,而不是校验和的校验和?IPV4头校验和验证

回答

0

如果路由器丢弃数据报,则每个路由器计算并验证路由前的校验和。

+0

这意味着首先路由器验证校验和,然后仅更改TTL值并重新计算校验和值。 –

+0

@Shubhamverma,是的。更重要的是,如果校验和不正确,它就会丢弃它。如果它是正确的,则路由器对其进行处理:检查路由表并学习下一跳,它减少TTL,重新计算校验和,然后将其发送到下一跳。一般来说,出于性能原因,校验和计算被卸载到NIC。 – rodolk

1

当数据包离开源时,它有一些初始的TTL和(希望)有效的校验和。

当数据包到达路由器时,路由器只检查IPv4报头校验和。如果不正确,则丢弃数据包。如果它是正确的,它(1)递减TTL; (2)检查TTL高于零(否则数据包被丢弃),(3)计算并填充新的IP头校验和。有趣的是,新的校验和可以直接从旧的校验和和旧的和新的TTL值中计算出来,并且有一些聪明的算术:https://tools.ietf.org/html/rfc1624,所以再次读取整个IPv4头是没有必要的。

请注意,IPv6具有跳数限制(与TTL类似),但不包含头校验和。

+0

tnx为正确的顺序,对路由器的操作!还有一个问题,如果没关系。如果ttl = 0并且16位标头中存在校验和问题,这是否意味着ICMP将向源发送TTL错误?由于路由器中的操作顺序? –

+1

首先执行校验和验证。确切的算法在https://www.rfc-editor.org/rfc/rfc1812.txt第5.2.1.1节中描述。根据http://www.ietf.org/download/rfc-index.txt,它仍然适用(“状态:最佳当前实践”),但它有点老(1995年)。 – o9000