当一个数据包从源发送到目的地时,它必须通过多个路由器,每个路由器将数据包的TTL值减1。因此,在每个路由器上重新计算头校验和,因为一个头域的TTL肯定会改变。那么目的地如何通过计算校验和来验证错误的存在,尽管它的校验和已经改变了,而不是校验和的校验和?IPV4头校验和验证
回答
如果路由器丢弃数据报,则每个路由器计算并验证路由前的校验和。
当数据包离开源时,它有一些初始的TTL和(希望)有效的校验和。
当数据包到达路由器时,路由器只检查IPv4报头校验和。如果不正确,则丢弃数据包。如果它是正确的,它(1)递减TTL; (2)检查TTL高于零(否则数据包被丢弃),(3)计算并填充新的IP头校验和。有趣的是,新的校验和可以直接从旧的校验和和旧的和新的TTL值中计算出来,并且有一些聪明的算术:https://tools.ietf.org/html/rfc1624,所以再次读取整个IPv4头是没有必要的。
请注意,IPv6具有跳数限制(与TTL类似),但不包含头校验和。
tnx为正确的顺序,对路由器的操作!还有一个问题,如果没关系。如果ttl = 0并且16位标头中存在校验和问题,这是否意味着ICMP将向源发送TTL错误?由于路由器中的操作顺序? –
首先执行校验和验证。确切的算法在https://www.rfc-editor.org/rfc/rfc1812.txt第5.2.1.1节中描述。根据http://www.ietf.org/download/rfc-index.txt,它仍然适用(“状态:最佳当前实践”),但它有点老(1995年)。 – o9000
- 1. 验证IP标头和TCP标头的校验和
- 2. 的IPv6验证和IPv4验证在JavaScript
- 3. IPv4校验和与wireshark相矛盾
- 4. Ipv4验证Jquery
- 5. TCP报头和校验和
- 6. IP标头校验和:0x0000
- 7. PdfSharp.SharpZipLib.SharpZipBaseException - 头校验和非法
- 8. ICMP头和IP头校验和计算
- 9. Xades-BES验证为校验和
- 10. 使用binascii.crc32()验证校验和()
- 11. 验证IPv4,IPv6和主机名称
- 12. Jquery校验和
- 13. 计算ICMPv6头的16位校验和
- 14. 在ICMP头校验和计算中?
- 15. maven:“校验和校验失败,没有可用的校验和”,为什么?
- 16. JavaScript卡PAN校验码Luhn验证
- 17. 在c中验证模块化总和校验和#
- 18. 校验和VBScript中
- 19. MD5/SHA1校验和
- 20. 校验和计算
- 21. 增量校验和
- 22. OpenSSL SHA1校验和
- 23. 校验和解释?
- 24. 验证Inno Setup脚本中文件的校验和?
- 25. Intranet与Internet应用程序中的校验和验证
- 26. 如何创建carrierwave上传的校验和来验证下载?
- 27. 使用Xcode 5提交时校验和验证失败
- 28. 使用校验和验证接收到的文件
- 29. 两个大文件的python校验和验证
- 30. openssl中的rsa加密校验和验证?
这意味着首先路由器验证校验和,然后仅更改TTL值并重新计算校验和值。 –
@Shubhamverma,是的。更重要的是,如果校验和不正确,它就会丢弃它。如果它是正确的,则路由器对其进行处理:检查路由表并学习下一跳,它减少TTL,重新计算校验和,然后将其发送到下一跳。一般来说,出于性能原因,校验和计算被卸载到NIC。 – rodolk