R1----------SW------------R2

条件:R1:192.168.1.1  mac:a  R2: 192.168.1.2 mac:b
sw是2层交换机
 
R1数据包转发给R2过程:
R1 收到数据包后,查询R1的路由表,查路由表的目的是查找数据包从那个接口出,找到出接口后,目的封装什么类型的帧,完成二层帧封装后,查ARP表,目的是找R2的MAC地址,有2种情况:
(1) R1在ARP表项中找到,完成2层封装,发出去
(2) R1如在ARP中没找到,将数据包丢弃(丢弃的是二层以太网帧),引发R1的ARP表查询,现象是ping 第一个包不通。 R1 以出接口的mac:a 为源mac,以自己的IP:192.168.1.1 为源IP, 以R2的IP:192.168.1.2为目的IP,
目的mac为全F的广播。
SW收到R1发来的ARP请求帧(收到二层单播帧),会打开帧头,查看源和目的mac. 查看自己的mac表,有2种情况
(1) sw收到arp请求帧,查找自己的mac表,如找到表项,查看对方的接口是那个,把帧还原,没有改变R1发来的帧。从出接口转发(2层透传,不改变源mac)
(2) sw查找mac表,如没找到,会在相应vlan里的所有接口复制一份数据帧,泛洪(防止帧丢失)(未知单播帧,未知目的mac)
R2 上收到sw发来的arp请求帧,会以自己的ip:192.168.1.2 为源ip,以出接口的mac:b 为源mac,给R1发arp的回应帧,此时,R2上已建立起与R1的arp表项,
当sw收到R2发的arp回应帧,会不改变的发给R1, R1收到回应帧后,与R2建立起arp表项,
R1再发第二个icmp echo个R2,R2会给R1回应,ping通。