如果我 ping 8.8.8.8,有时会在一段时间内返回以下内容:来自 172.22.1.1 icmp_seq=36 目标主机不可达
但有时它确实达到了目标,但它却说有数据包丢失。即使我执行 ping 并且从未出现上述错误消息,当 ping 会话停止时,它也会说大约有 30% 的数据包丢失。
有人告诉我这可能意味着数据包最终会通过,因为未显示无法访问的消息。这是真的吗?
答案1
如果消息为“目标主机无法访问”,则表示本地系统没有路由,要发送的数据包从未发送到网络上。这些请求将报告为 0% 丢失,因为从未发送过任何内容。
现在,如果消息显示“来自 10.xxx icmp_seq=1 目标主机无法访问”(10.xxx 不是您自己的 IP),则数据包将被报告为丢失。因为这些数据包允许你的机器通过,但由于某种原因被沿线路阻止。
此外,如果您没有收到一个或多个 ping 请求,也没有收到该错误消息,则可能是出于多种原因。这些将要被报告为数据包丢失。
答案2
数据包最终可能会通过,也可能不会通过,但您不会收到响应。从您的角度来看,这没什么区别。您没有收到错误消息并不意味着数据包最终会到达目的地。
如果您没有收到对您的 ping 的回复,则可能是您的数据包丢失了,或者对您的数据包的回复丢失了。
数据包可能只是悄无声息地丢失,也可能返回错误消息。如果返回数据包丢失,则可能会向发送方(即 ping 的目的地)发送错误消息,但该消息不会到达您手中。
你可以把这些包裹想象成邮寄的信件或包裹。你在信封上写上地址,把它投进邮箱,然后祈祷一切顺利。可能的结果有三种:
- 数据包可能会到达。
- 该数据包可能会被悄悄丢弃。
- 数据包可能会被丢弃,但会向发送者返回一条错误消息。
出现错误消息的情况通常是由于数据包不是因为过载而被丢弃,而是因为数据包目的地存在一些特定问题。
作为发送者,您无法区分数据包是否到达。但在 ping 的情况下(以及大多数其他协议),发送者将发送回复。此回复也可能到达,也可能不会到达。对于除 ping 之外的大多数协议,发送者将重试几次,直到响应到达或发送者放弃。