本文首发于我的公众号码农之屋(id: Spider1818),专注于干货分享,包含但不限于Java编程、网络技术、Linux内核及实操、容器技术等。欢迎大家关注,二维码文末可以扫。
导读:深入了解同网段和跨网段ping的流程后,对于各种复杂网络流程的理解会有很大的帮助。本文将详细介绍同网段和跨网段ping的所有流程(更偏向交互流程),希望能够帮助大家加深对这块的理解。
一、前言
在介绍ping流程之前,先跟大家简单介绍一下网络传输涉及的三张表:MAC地址表、ARP缓存表以及路由表。
交换机有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表将数据帧传输到指定的主机上,而这张表就是MAC地址表(主要记录了MAC地址和出端口的关系)。通常交换机的MAC地址表项有效期是300s(不同厂商设备,老化时间都不一样),也就是说如果300s内,已记录的MAC地址没有通信,则会删除该记录(MAC表项会实时根据通信情况刷新存活时间)。
交换机是依靠MAC地址通信的,那么我们怎么获取到目的主机的MAC地址呢?这时ARP协议就开始大显神通了(工作在网络层,负责将IP地址解析为MAC地址),每台主机都有一张ARP缓存表,它记录着主机IP地址与MAC地址的对应关系。同样,不同厂商设备的ARP缓存表项有效期不一样,比如Cisco为5min,而华为则为20min。
个人认为,路由表是三张表中最为复杂的一张表,它记录着不同网段的信息,指向通往目的主机的下一跳(如果同网段,都用不到路由表)。当路由器的某个接口收到一个包时,它会读取包中目标逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口;如果在路由表中没有找到目标地址的路由条目,则看下是否配置了默认路由,已配置默认路由,则按照默认路由信息转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。
二、同网段场景
图1 同网段ping拓扑图
首先,host1要ping host2前,会判断host2是否跟自己是同网段(主机A拿着自己的掩码,与主机B的IP进行与操作,判断是否与自己同网段),判断为同网段后,它会先查询自己的ARP缓存表(存放IP和MAC的对应关系),假如没有B的MAC地址,就会向外发送一个ARP广播包,如图:
图2 host1向外发送一个ARP广播包
其中ARP报文格式如下:
以太网目的MAC |
以太网源MAC |
帧类型 |
硬件类型 |
4 |
6 |
OP |
发送端以太网MAC |
发送端IP地址 |
目的MAC |
目的IP |
FF-FF-FF-FF-FF-FF |
00-50-56-C0-00-01 |
0806 |