ping命令原理图解

一、第一部分:原理

先看拓朴图:

我在这里讲拼的两情况,一种是同一网段内,一种是跨网段的ping ….

首先,如果主机A,要去ping主机B,那么主机A,就要封装二层报文,他会先查自己的MAC地址表,如果没有B的MAC地址,就会向外发送一个ARP广播包,如图:

其中ARP报文格式如下:

以太网目的MAC

以太网源MAC

帧类型

硬件类型

4

6

OP

发送端以太网MAC

发送端IP地址

目的MAC

目的IP

FF-FF-FF-FF-FF-FF

00-50-56-C0-00-01

0806

0800

1

00-50-56-C0-00-01

1.1.1.1

00-00-00-00-00-00

1.1.1.3

其中OP  

     1 :表示ARP请求

     2:表示ARP应答

                  3:表示RARP请求

                  4:表示RARP应答

  首先,交换机会收到这个报文后,交换机有学习MAC地址的功能,所以他会检索自己有没有保存主机B有MAC,如果有,就返回给主机A,如果没有,就会向所有端口发送ARP广播,其它主机收到后,发现不是在找自己,就纷纷丢弃了该报文,不去理会。。直到主机B收到了报文后,就立即响应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A,如图:

ARP报文格式:

以太网目的MAC

以太网源MAC

帧类型

硬件类型

4

6

OP

发送端以太网MAC

发送端IP地址

目的MAC

目的IP

00-50-56-C0-00-01

00-50-56-C0-00-03

0806

0800

2

00-50-56-C0-00-03

1.1.1.3

00-50-56-C0-00-01

1.1.1.1

这时候主机A学到了主机B的MAC,就把这个MAC封装到ICMP协议的二层报文中向主机B发送,报文格式如下:

目的地址

源地址

源IP

目的IP

ICMP报文

00-50-56-C0-00-03

00-50-56-C0-00-01

1.1.1.1

1.1.1.3

Echo request

 当主机B收到了这个报文后,发现是主机A 的ICPM回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的ping过程…

目的地址

源地址

源IP

目的IP

ICMP报文

00-50-56-C0-00-01

00-50-56-C0-00-03

1.1.1.3

1.1.1.1

Echo answer

      

在这里,我讲了这么久的局域网内的PING,实际过程的发生不到1毫秒….

       再继续…

       如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发,但是他也不知道网关的MAC情况下呢?他就会向之前那个步骤一样先发送一个ARP广播,学到网关的MAC,再发封装ICMP报文给网关路由器.

报文格式如下:

目的地址

源地址

源IP

目的IP

ICMP报文

00-50-56-C0-00-02

00-50-56-C0-00-01

1.1.1.1

2.1.1.1

Echo request

   当路由器收到主机A发过来的ICMP报文,发现自己的目的地址是其本身MAC地址,根据目的的IP2.1.1.1,查路由表,发现2.1.1.1/24的路由表项,得到一个出口指针,去掉原来的MAC头部.加上自己的MAC地址向主机C转发…(如果网关也没有主机C的MAC地址,还是要向前面一个步骤一样,ARP广播一下即可相互学到….路由器2端口能学到主机D的MAC,主机D也能学到路由器2端口的MAC..),报文格式如下:

目的地址

源地址

源IP

目的IP

ICMP报文

00-50-56-C0-00-05

00-50-56-C0-00-04

1.1.1.1

2.1.1.1

Echo request

   最后,在主机C已学到路由器2端口MAC,路由器2端口转发给路由器1端口,路由1端口学到主机A的MAC的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求回复过来..报文格式大致如下:

目的地址

源地址

源IP

目的IP

ICMP报文

00-50-56-C0-00-04

00-50-56-C0-00-05

2.1.1.1

1.1.1.1

Echo Answer 

二、第二部分:问题

 问题:设置ip 子网掩码为:(主机一)130.130.1.1 255.255.0.0

                                            (主机二)130.130.1.2 255.255.255.0
第一个ip网络号为:130.130 第二个ip网络号为:130.130.1即不在一个子网内,且2个主机并没有设网关(没通过路由器),为什么能ping通?其他的子网划分又是可行的。

答:第一种理解方式:

A机:130.130.1.1/16 ;B机:130.130.1.2/24;A机pingB机的时候,用A的子网掩码与B机IP地址做与运算,可得B机的网段为130.130.0.0/16, A机认为B机与自己处于相同网段,发送ICMP到B机。B机收到A机的ping数据包,用B的子网掩码与A机IP地址做与运算,可得A机的网段为130.130.1.0/24,认为A机与自己处于相同网段,则将返回包送回A机。则A机ping通了B机。
第二种理解方式:
B机的网段是A机网段的子网,只要A机和B机的IP地址都在B机的网段内,则A机一定可以ping通B机。

猜你喜欢

转载自blog.csdn.net/weixin_40449300/article/details/84797598