如果 ICMP 是网络层协议,我很困惑,为什么它会在其错误报告消息中发送传输层字段。
ICMP 是在网络层工作的协议。为什么报错时只发送传输层的几个字段?
网络工程
网络
传输协议
icmp
2022-02-06 01:48:00
2个回答
因为这正是他的目的。
ICMP 是专门为此创建和设计的。
来自RFC792
介绍
[...]
有时,网关或目标主机会与源主机通信,例如,报告数据报处理中的错误。为此目的,使用了该协议,即 Internet 控制消息协议 (ICMP)。
[...]ICMP 消息在几种情况下发送:例如,当数据报无法到达其目的地时,当网关没有缓冲能力来转发数据报时,以及当网关可以指导主机在较短的路由上发送流量时。
[...]
ICMP 消息通常报告
数据报处理中的错误。
还要记住,分层模型只是一个模型,有很多东西跨越层边界。
ICMP 错误将返回导致错误的部分数据包。这是为了提供有关哪个连接导致错误的信息。如果我只是在没有上下文的情况下返回“超时”,那么发起者将 (a) 不知道我是谁——作为一个随机传输路由器,并且 (b) 不知道哪个连接出错了。如果我在错误中包含 IP 标头,那么发起者可以判断是哪个连接导致了它。(即“我到 X 的数据包由于 Z 原因在 Y 失败”)
其它你可能感兴趣的问题