ping一个地址的过程

image.png
192.168.1.1/24 ping 192.168.1.2/24 发生了什么?

主机判断请求地址

首先,192.168.1.1/24 这台主机(以下简称H1)会通过子网掩码和IP地址的相与结果判断192.168.2.1/24(以下简称H2)是不是和它在同网段
image.png

可见H1和H2的属于不同的网络

因此,主机需要先获取网关的MAC地址,然后将ping包发送给网关,由网关去进行转发。
如果在主机中没有网关的MAC地址缓存,这时候就需要发送arp包去进行请求。(如果有直接填入mac地址和ip地址发送就可以了)

以下假设第一次请求,没有MAC地址缓存

[arp]主机到交换机到网关

主机的网关是192.168.1.254(以下简称R1),这是在同一个网络内的传输,因此要通过交换机去进行转发。
交换机的工作原理:源MAC地址学习,目的MAC地址转发

交换机收到主机的ARP包后,它会进行学习,假设H1的MAC地址是111111,那么在交换机中就学习到了
image.png
然后根据目的MAC地址去转发,由于转发的是ARP包,是广播,因此将arp包转发给所有和交换机有连接的主机
image.png
然后所有有连接的主机会收到这个arp包,但只有目的IP符合的主机(即网关)会返回一个单播包告诉H1它的MAC地址

[arp]网关到交换机到主机

网关将自己的MAC地址填入arp包后进行回复(假设R1的MAC地址是222222)
image.png
回复的包会发送到交换机,然后交换机再次学习源MAC地址
image.png
然后根据mac地址进行转发,把回复的单播包发送给主机,这样,H1就获取到了MAC地址

[ping]主机到交换机到网关

然后,主机这时候可以发送一个ping包到网关,目的地址是H2
image.png
同样,交换机还是要学习源MAC地址,不过这次并没有更新,它会将ping包转发给网关

网关发现目的MAC地址是自己,因此解开二层包,发现目的IP地址不是自己,因此需要查询路由表进行转发

[ping]网络中转发

image.png
R1查询到下一跳需要发送到R2(如果没有MAC地址,同样通过ARP去请求,这里假设R2的地址是333333),然后将ping包转发给R2
image.png
同样,R2发现目的IP不是自己,数据包也和自己不在一个网段内,因此需要继续转发给R3(假设地址是444444)
image.png
然后R3获取到了数据包,通过地址计算发现数据包和自己是在同一个网段内,可以进行二层转发

[ping]网关到交换机到主机

同样,如果路由器R3不知道H2的MAC地址,就需要通过ARP请求获取H2的MAC地址,这里假设它知道,因此填入H2的MAC地址(假设是555555)
image.png
这是,交换机会进行学习,了解到R3的IP和MAC的对应关系,然后进行转发

H2最后获得这个数据包,解析发现目的IP是自己,因此就继续解析三层包,因为ping是三层的包,所有它就直接回复它收到了这个包,此阶段和之前一样,就不做赘述。

知识链接

  1. NA