ping一个地址的过程

192.168.1.1/24 ping 192.168.1.2/24 发生了什么?
主机判断请求地址
首先,192.168.1.1/24 这台主机(以下简称H1)会通过子网掩码和IP地址的相与结果判断192.168.2.1/24(以下简称H2)是不是和它在同网段
可见H1和H2的属于不同的网络
因此,主机需要先获取网关的MAC地址,然后将ping包发送给网关,由网关去进行转发。
如果在主机中没有网关的MAC地址缓存,这时候就需要发送arp包去进行请求。(如果有直接填入mac地址和ip地址发送就可以了)
[arp]主机到交换机到网关
主机的网关是192.168.1.254(以下简称R1),这是在同一个网络内的传输,因此要通过交换机去进行转发。
交换机的工作原理:源MAC地址学习,目的MAC地址转发
交换机收到主机的ARP包后,它会进行学习,假设H1的MAC地址是111111,那么在交换机中就学习到了
然后根据目的MAC地址去转发,由于转发的是ARP包,是广播,因此将arp包转发给所有和交换机有连接的主机
然后所有有连接的主机会收到这个arp包,但只有目的IP符合的主机(即网关)会返回一个单播包告诉H1它的MAC地址
[arp]网关到交换机到主机
网关将自己的MAC地址填入arp包后进行回复(假设R1的MAC地址是222222)
回复的包会发送到交换机,然后交换机再次学习源MAC地址
然后根据mac地址进行转发,把回复的单播包发送给主机,这样,H1就获取到了MAC地址
[ping]主机到交换机到网关
然后,主机这时候可以发送一个ping包到网关,目的地址是H2
同样,交换机还是要学习源MAC地址,不过这次并没有更新,它会将ping包转发给网关
网关发现目的MAC地址是自己,因此解开二层包,发现目的IP地址不是自己,因此需要查询路由表进行转发
[ping]网络中转发

R1查询到下一跳需要发送到R2(如果没有MAC地址,同样通过ARP去请求,这里假设R2的地址是333333),然后将ping包转发给R2
同样,R2发现目的IP不是自己,数据包也和自己不在一个网段内,因此需要继续转发给R3(假设地址是444444)
然后R3获取到了数据包,通过地址计算发现数据包和自己是在同一个网段内,可以进行二层转发
[ping]网关到交换机到主机
同样,如果路由器R3不知道H2的MAC地址,就需要通过ARP请求获取H2的MAC地址,这里假设它知道,因此填入H2的MAC地址(假设是555555)
这是,交换机会进行学习,了解到R3的IP和MAC的对应关系,然后进行转发
H2最后获得这个数据包,解析发现目的IP是自己,因此就继续解析三层包,因为ping是三层的包,所有它就直接回复它收到了这个包,此阶段和之前一样,就不做赘述。
