!如图所示,有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 |
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 |
如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发。情况就变成Aping 网关了,此时A只要获得网关的MAC即可,至于网关如何联系上C ,A是不关心的 。A获得网关(路由器)MAC的方法跟上面一样,利用ARP协议.
当路由器收到主机A发过来的ICMP报文,发现报文目的地址(MAC)是路由器自身MAC地址,根据目的IP2.1.1.1,查路由表,发现2.1.1.1的MAC,去掉原来的MAC头部.加上自己的MAC地址向主机C转发…(如果网关也没有主机C的MAC地址,还是要向前面一个步骤一样,ARP广播一下即可相互学到….路由器端口2能学到主机C的MAC,主机C也能学到路由器端口2的MAC..)
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 |
3.1>>路由器找到C的MAC地址
3.2>>路由器转发ICMP报文到C(路由器pingC)
ICMP报文: 路由器->C
目的地址 | 源地址 | 目的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 |
参考:
http://www.360doc.cn/article/1278923_43700893.html
http://www.360doc.cn/article/29273511_519167941.html
https://zhidao.baidu.com/question/567325786.html