ICMP 消息中包含 IP 数据报的前八个字节?

网络工程 协议理论 国际会议
2021-07-07 05:03:27

ICMP 消息的定义表示它具有类型、代码和导致错误的 IP 数据报的前 8 个字节。

问题:ICMP 数据报中包含 IP 数据报的前八个字节是什么?

我的理解:下图中红框标出的部分。

在此处输入图片说明

3个回答

好吧,发送方可能想知道 ICMP 消息所指的是它的哪些数据包。为此,整个 IP 标头加上(至少)IP 有效载荷的前 8 个字节被附加到错误消息的 ICMP 标头中。

查看RFC 792

主机使用此数据将消息与适当的进程匹配。如果更高级别的协议使用端口号,则假定它们位于原始数据报数据的前 64 个数据位中。

你的理解是错误的。

这 8 个字节是 IP 有效载荷的字节,并且是对导致错误的数据包的完整 IP 标头的补充。通常,这 8 个字节将是传输协议标头的一部分。它们可用于将 ICMP 错误与连接匹配,甚至可能是导致它的单个数据包。

此外,虽然 RFC 792 说应该包括 8 个字节的有效载荷,但 RFC 1812 指出 ICMP 错误应该包括尽可能多的原始数据包(在 ICMP 数据包大小的 576 字节限制内)。这样做的动机是支持在隧道场景中对 ICMP 错误进行合理的处理。

我不确定你指的是什么定义(来源?),但它可能意味着 8 位。

一个ICMP数据包共8个字节[1],前16位是类型和代码字节(一个字节中的8位);类型字节被赋予一个从 0 到 255[2] 的数字,不同的数字代表不同类型的子代码。

正如 Zac67 所说,发送方通常喜欢知道 ICMP 数据包来自哪里,因此它将其封装在 IP 标头中,当 ICMP 数据包携带在有效载荷中时,该 IP 标头包含一个称为“协议”的字段,协议字段被设置[ 3] 到 1(十六进制的 0x01 或二进制的 00000001),协议字段也是位(1 字节)长。

以下是一些有用的资源和来源。希望这可以帮助。

https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol

http://slideplayer.com/slide/3602717/

http://www.enterprisenetworkingplanet.com/netsp/article.php/3584166/Networking-101-Understanding-and-Using-ICMP.htm

http://www.pearsonicertification.com/articles/article.aspx?p=1804873

[1] - http://www.keyboardbanger.com/wp-content/uploads/2015/07/ICMP-header.png

[2] - https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages

[3] - https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers