关于ping命令工作原理及ping -c1执行时数据包/帧数量的技术问询
关于
ping -c1 "something"在全缓存为空时的数据包/帧生成量 嘿,这个问题得拆成二层以太网帧和三层IPv4数据包分别说,而且要注意「所有缓存为空」包括DNS缓存和ARP缓存——这俩缓存空了,会让ping多走好几步流程,直接影响生成的数据包/帧数量:
先明确核心前提
你执行的ping -c1 "something"里,目标是域名而非直接的IPv4地址,而且本地的DNS缓存、ARP缓存全是空的。所以ping命令得先搞定「怎么找到DNS服务器」「怎么拿到目标域名的IP」「怎么找到目标IP的物理地址」,才能发核心的ICMP探测包。
正常流程(DNS解析成功)下的本地生成统计
咱们一步步捋本地主动生成的内容:
- 找本地DNS服务器的MAC地址(ARP缓存空)
- 本地生成1个ARP请求以太网帧(ARP是二层协议,不需要封装在IPv4包里,所以这一步没有IPv4数据包)
- (收到DNS服务器的ARP响应是对方生成的,不算咱们的)
- 发DNS域名查询(DNS缓存空)
- 本地生成1个UDP协议的IPv4数据包(用来问DNS服务器
something对应的IPv4地址) - 同时生成1个以太网帧(把这个UDP包封装起来发给DNS服务器)
- (收到DNS响应是对方生成的,不算)
- 本地生成1个UDP协议的IPv4数据包(用来问DNS服务器
- 找目标IP的MAC地址(ARP缓存空)
- 本地生成1个ARP请求以太网帧(还是二层帧,无对应IPv4包)
- (收到目标IP的ARP响应是对方生成的,不算)
- 发ping的核心探测包
- 本地生成1个ICMP Echo Request类型的IPv4数据包(ping的核心请求包)
- 同时生成1个以太网帧(封装这个ICMP包发给目标IP)
- (收到ICMP响应是对方生成的,不算)
最终统计:
- IPv4数据包:2个(1个DNS查询UDP包 + 1个ICMP请求包)
- 以太网帧:4个(2个ARP请求帧 + 1个DNS查询帧 + 1个ICMP请求帧)
特殊情况:DNS解析失败
如果something是个无法解析的无效域名,流程会在DNS查询后直接终止,ping会报错说找不到主机。此时本地生成的内容就少了:
- IPv4数据包:1个(仅DNS查询的UDP包)
- 以太网帧:2个(1个DNS服务器的ARP请求帧 + 1个DNS查询帧)
内容的提问来源于stack exchange,提问作者MisterPur
相关产品推荐
相关产品推荐

