ARP 请求包 被 SW2的E0/0/1接收,此时,交换机解封装数据链路层 ,给ARP数据包 打一个 vid=10的tag , 学习 源MAC地址,添加到 vlan10的MAC地址表中, 查看目标MAC地址,为全FFFF,交换机查询vlan数据库,找到vlan10数据库中的成员接口,会将这个数据包从 所有vlan10的成员接口转发
ARP请求包被 SW1的G0/0/1接收, 解封装数据链路层,学习源MAC地址, 会将源MAC和 G0/0/1接口的对应关系 添加到 vlan10的 MAC地址表中。
再查看目标MAC地址为全FFFF,这个ARP包会被该vlan下的所有接口接收 ----》 最终会被 vlanif 10接收,
vlanif 10 接收到ARP,解封装数据链路层,获得源MAC地址 和 ARP数据部分的 sender-IP(源IP) ----> 会将这个对应关系添加到自己的 ARP缓存表
target-ip----> 从该字段可以看出,这个ARP是在请求 192.168.10.254 的MAC地址,也就是 vlanif10的MAC地址。
此时 vlanif 10对该 ARP请求作出回应。该报文如下:
该ARP回复包被 SW2的G0/0/1接收, 解封装数据链路层,查看源MAC地址,和G0/0/1生成对应关系,添加到 vlan 10的MAC地址表中。(交换机学习源MAC)
交换机学习源MAC地址之后,查看目的MAC地址为 759E----> 对应的出接口是 E0/0/1
所以,交换机会将这个ARP回复包 从E0/0/1发出,被PC1 接收。
PC1接收到 ARP回复包,解封装数据链路层,先查看目标MAC地址,是自己的,然后继续解封装到ARP部分, 根据源MAC和 sender ip,获得 网关的MAC地址,填入自己的ARP缓存表。
此时,PC1获得了网关的MAC地址, 再次封装 ICMP数据包,并发送出去,被SW2的E0/0/1接收。
SW2收到该数据帧, 解封装数据链路层,打tag(vid=10) 学习源MAC地址,将 75-9E和 E0/0/1的对应关系 添加到 vlan10的MAC地址表,再查看目的MAC地址,是7F-29,根据自己的 vlan10的MAC地址表,找到对应的出口
- 解封装数据链路层,学习源MAC地址 (75-9E 和G0/0/1----> 添加到 vlan10的MAC地址表 )
- 查看目的MAC地址,目标MAC地址是vlanif10的,vlanif10 接收该数据包,继续解封装网络层
- 这个数据包就被 vlanif10接收,更新ARP缓存表(ARP缓存表的老化时间默认是 20分钟)
- 再查看目标IP地址,目标IP地址,不是自己的,所以,vlanif 10 知道,这个数据包实要自己帮忙转发的-----》 查看路由表,根据目标网段,找到对应的逃出接口
所以,此时,vlanif10,要把这个数据包,交给 vlanif 20
此时,vlanif20要转发这个数据, 在转发前,要将这个数据进行封装。
此时,ARP缓存表中,并不存在关于 20.1的MAC地址,于是触发ARP请求。
查看目标MAC地址为全FFFF,SW1将这个ARP请求 从 vlan20数据库中所有的 成员接口发出(从G0/0/1发出)
被SW2接收到,该ARP请求包,解封装数据链路层,学习源MAC地址 ,将 7f29--G 0/0/1形成对应关系 添加到 vlan20的MAC地址表
再查看目标MAC地址为 全FF,SW1将这个ARP请求 从 vlan20数据库中所有的 成员接口发出(从E0/0/2发出)
PC2接收到该数据包,接封装数据链路层,查看目标MAC地址是全FF,继续接封装 ARP部分, 学习源MAC地址和Sender-IP的对应关系,添加到自己的 ARP缓存表
SW2接收到 ARP回复包, 首先要 接封装 数据链路层, 打 vlan 20的 tag, 学习源MAC地址, 642e-E0/0/2生成对应关系,添加到 vlan20的MAC地址中.
SW2查看目标MAC地址(7f29),查询 vlan20的MAC地址表,找到出口为 G0/01
于是,这个ARP回复包 会从 G0/0/1发出 ,被SW1的G0/0/1接收:
SW1接收到 ARP回复包,接封装数据链路层, 学习源MAC地址 642E--G0/0/1生成对应关系,添加到 vlan20的MAC地址表中
再查看目标MAC地址是vlanif20的,此时 会将 ARP回复包给到 vlanif20, vlanif20,将 源MAC地址和 Sender-IP的对应关系,添加到自己的ARP缓存表
此时,vlanif20获得了 PC2的MAC地址了 ,能够将ICMP的数据包 完整封装.
SW1查看vlan 20的MAC地址表根据 目标MAC地址 642e,将这个数据包从G0/0/1发出.
SW2接收到 该ICMP请求包, 接封装数据链路层, 学习源MAC地址 7f29--G 0/0/1 ----> 添加到vlan20的MAC地址表(MAC地址更新)
SW2再查看这个ICMP的 目标MAC地址,是 642E,查询 vlan20的MAC地址表,找到对应的出口为 E0/0/2,于是,这个ICMP包,从E0/0/2 剥离掉tag,发出.
此时 这个ICMP的数据包,就被PC2接收,PC2接收到该数据帧,
对于 PC1 的第一个包出现 time out的解释: PC1最先将 icmp的请求发出去之后,对于SW1,vlanif20并没有获得PC2的MAC地址,此时 vlanif20先发送了一个ARP请求,获得ARP回复之后,才能继续转发ICMP的请求包,但是此时,对于PC1来讲,等待的时间过长,会认为网络不可达,出现 request timeout的 回显.