【发布时间】:2016-04-16 02:59:56
【问题描述】:
当一个数据包从源发送到目标时,它必须经过多个路由器,每个路由器将数据包的 TTL 值减 1。因此,由于其中一个头字段,因此每个路由器都需要重新计算头校验和即 TTL 肯定会改变。那么目的地如何通过计算校验和来验证错误的存在,尽管它得到的校验和已经改变了而不是源端的校验和呢?
【问题讨论】:
标签: networking
当一个数据包从源发送到目标时,它必须经过多个路由器,每个路由器将数据包的 TTL 值减 1。因此,由于其中一个头字段,因此每个路由器都需要重新计算头校验和即 TTL 肯定会改变。那么目的地如何通过计算校验和来验证错误的存在,尽管它得到的校验和已经改变了而不是源端的校验和呢?
【问题讨论】:
标签: networking
当数据包离开源时,它有一些初始 TTL 和(希望)一个有效的校验和。
当数据包到达路由器时,路由器只检查 IPv4 标头校验和。如果不正确,则丢弃数据包。如果它是正确的,它 (1) 递减 TTL; (2) 检查 TTL 是否大于零(否则丢弃数据包)和 (3) 计算并填写新的 IP 标头校验和。
有趣的是,新的校验和可以直接从旧的校验和以及 TTL 的新旧值计算出来,并通过一些巧妙的数学运算:https://www.rfc-editor.org/rfc/rfc1624,因此无需再次读取整个 IPv4 标头。
请注意,IPv6 有跳数限制(与 TTL 类似)但没有标头校验和。
【讨论】:
每个路由器在路由之前计算并验证校验和,如果不匹配,路由器将丢弃数据报。
【讨论】: