Ping命令 原理 详解(图)

ping命令 背后涉及网络层的ARP->ICMP->IP协议

!如图所示,有3台机器ABC ,分两情况,一种是A ping B同网段的情况,另一种A ping C不同网段的情况。

* A机器 B机器 路由器端口1 路由器端口2 C机器 IP 1.1.1.1 1.1.1.3 1.1.1.2 2.1.1.2 2.1.1.1 MAC macA macB macR1 macR2 macC

1.A ping B同网段的情况

Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“1.1.1.3”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“1.1.1.3”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到1.1.1.3的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建数据帧。 “想办法找到B的MAC地址”就是通过ARP 协议。首先A找自己的ARP缓存表有没有缓存B的MAC地址,没有,A就发ARP请求 到交换机找,交换机发现自己的ARP缓存表也没有,就发ARP广播给自己所有连接的机器找,其它主机收到后,发现不是在找自己,就纷纷丢弃了该报文,不去理会。。直到主机B收到了报文后,就立即相应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A。

各阶段简化报文如下:

1>>A想办法找到B的MAC地址 ARP广播 : A->交换机->子机器

以太网目的MAC 以太网源MAC 帧类型 硬件类型 4 6 OP 发送端以太网MAC 发送端IP地址 目的MAC 目的IP FF macA 0806 0800 4 6 1 macA 1.1.1.1 00 1.1.1.3

*其中OP表示:1:表示ARP请求;2:表示ARP应答;3:表示RARP请求;4:表示RARP应答。 2>>B回复自己的mac给A ARP回复 : B->交换机->A

以太网目的MAC 以太网源MAC 帧类型 硬件类型 4 6 OP 发送端以太网MAC 发送端IP地址 目的MAC 目的IP macA macB 0806 0800 4 6 2 macB 1.1.1.3 macA 1.1.1.1

3>>A拿到MAC地址后开始ping ICMP报文: A->交换机

目的地址 源地址 目的IP 源IP ICMP报文 macB macA 1.1.1.1 1.1.1.3 Echo request

4>>B回应A的ping ICMP报文: B->交换机->A

目的地址 源地址 目的IP 源IP ICMP报文 macA macB 1.1.1.3 1.1.1.1 Echo answer

2.A ping C不同网段的情况

各阶段简化报文如下:

1>>A通过ARP协议找到路由器的MAC地址 2>>A发ICMP报文到路由器(Aping路由器) ICMP报文: A->交换机->路由器

目的地址 源地址 目的IP 源IP ICMP报文 macR1 macA 2.1.1.1 1.1.1.1 Echo request
目的地址 源地址 目的IP 源IP ICMP报文 macC macR2 2.1.1.1 1.1.1.1 Echo request

4>>C回复ping到路由器 ICMP报文: C->路由器->A

目的地址 源地址 目的IP 源IP ICMP报文 macA macC 1.1.1.1 2.1.1.1 Echo answer

参考:

经验分享 程序员 微信小程序 职场和发展