RFC 791说:
互联网协议不提供可靠的通信设施。没有端到端或逐跳的确认。对数据没有错误控制,只有一个标头校验和。没有重传。没有流量控制。检测到的错误可以通过在互联网协议模块中实现的互联网控制消息协议 (ICMP) [3] 进行报告。
我的问题:
- 举一个报头校验和设置为 1 的例子
- “可能会报告错误”是什么意思?它如何决定应该报告哪些错误,哪些不应该报告?
先感谢您!请注意,我不是大学生,所以如果您抛出一些奇怪的词,请解释它们的意思。
RFC 791说:
互联网协议不提供可靠的通信设施。没有端到端或逐跳的确认。对数据没有错误控制,只有一个标头校验和。没有重传。没有流量控制。检测到的错误可以通过在互联网协议模块中实现的互联网控制消息协议 (ICMP) [3] 进行报告。
我的问题:
先感谢您!请注意,我不是大学生,所以如果您抛出一些奇怪的词,请解释它们的意思。
至于第 1 点。好吧,也许您可以制作一个校验和结果为 1 的 IP 标头,查看所使用的算法(在您链接的 RFC 中进行了描述),但是如果您希望有人为您做这件事,很好运气...
关于第 2 点,您必须查看RFC2119中所说的:
- MAY 这个词,或形容词“OPTIONAL”,意味着一个项目是真正可选的。一个供应商可能会选择包含该项目,因为特定市场需要它,或者因为供应商认为它增强了产品,而另一个供应商可能会省略相同的项目。不包含特定选项的实现必须准备好与另一个包含该选项的实现互操作,尽管功能可能有所减少。同样,包含特定选项的实现必须准备好与不包含该选项的另一个实现互操作(当然,选项提供的功能除外。)
因此,由实现其 IP 堆栈版本的人来决定是否报告哪些错误。我不知道是否有人通过 ICMP 编写了带有校验和错误报告的 IPv4 堆栈,但我对此表示怀疑。
我的理解是,如果校验和错误,则应丢弃数据包,仅此而已。如果需要,重传将由上层管理(通常由 TCP)。