文章目录
- 搭建拓扑图
- 设备说明
- 通过PC1 ping PC2
- 小结:
- 当arp表缓存过期,而mac学习表未过期
- 当arp表缓存未过期,而mac学习表过期
- 使用VLAN分割广播域
搭建拓扑图
设备说明
两台PC电脑
同理另外一台电脑也是同理配置 IP地址:192.168.1.2/24
交换机: 类型为:S3700,PC1电脑和交换机的 Ethernet0/0/1相连。PC2电脑和交换机的 Ethernet0/0/2相连。
交换机端口都保持默认模式及配置,即Hybrid,pvid 1,untag 。
在交换机上 执行 u t m //即关键告警及日志 stp disable //关闭stp协议,因为抓包时会有大量的stp报文,影响查询其他报文,故而关闭
通过PC1 ping PC2
当PC电脑及交换机都连接好以后,开启成功后。
此时查看PC1上的arp表:
arp表里 有 IP地址 和 MAC地址的对应关系,以及类型(是动态的还是静态的)动态的有老化时间,而静态的则不会
通过 arp -a 命令
此时可以看到PC1的arp表是空的。
查看交换机上MAC地址表:
可以看到交换机上学习的MAC地址表目前也是空的。
为了更好的模拟再加一台电脑:
新的拓扑如下:
当PC1首次通过ping命令访问PC2时,即 ping 192.168.1.2 。手写PC1先按照自身的子网掩码和PC2的IP地址192.168.1.2 计算。得到PC2的网段192.168.1.0。发现和自身处于同一个网段。然后查询arp列表,看是否有IP地址192.168.1.2,没有找到。那么此时PC1会首先
主动发送一个ARP广播数据包(request)到交换机。
此时在Ethernet 0/0/1端口抓包可以看到
发送者(源)MAC 地址为:54:89:98:AD:50:60 , 发送者(源)IP 地址为: 192.168.1.1
目标 MAC地址为:ff:ff:ff:ff:ff:ff (全是1的MAC地址为广播地址)
目标 IP地址为:192.168.2.1
当交换机收到来自PC1的ARP的请求报文时,交换机拆开二层报文,获取发送者的MAC地址,然后对发送者的MAC地址及对应的转发端口进行学习,记录到MAC地址表中。
然后 查看源MAC地址,发现数据包中的,源MAC地址为ff:ff:ff:ff:ff即广播地址。那么交换机会对此ARP数据包进行广播,广播到除接收此数据包Ethernet 0/0/1的
其他交换机端口。则此时PC2和PC3都会收到此数据包。
PC2
收到此ARP数据包后,拆开三层报文,会把发送者的IP地址及MAC地址缓存到自己的ARP表中,然后查看目标IP地址是否自己主机的IP地址是否一致,经比较发现一致,则PC2发送ARP响应报文。
PC3
收到此ARP数据包也是先把发送者的IP地址及MAC地址缓存到自己的ARP表中,然后查看目标IP地址是否自己主机的IP地址是否一致,经比较发现不一致,则PC3则不会发送ARP响应报文,也就是PC3不会做出回复的响应。
PC2在ARP响应报文中,发送者的MAC地址为:54:89:98:2a:0b:ed, 发送者的IP地址为:192.168.1.2,
目标者MAC地址:54:89:98:ad:50:60,目标者IP地址:192.168.1.1
到交换机收到PC2发送的ARP响应报文后,会把发送者的MAC地址学习到MAC地址表中,然后查看目标者MAC地址是否在 MAC地址表。因为 之前交换机在接收ARP请求报文时,已经学习过了。所以交换机会根据MAC表记录的目标者的MAC地址对应的转发端口,将ARP响应报文转发到Ethernet 0/0/1口,(也就是ARP请求报文是广播,ARP响应报文是单播)。进而PC1收到ARP响应报文。PC1主机将PC2的MAC地址及IP地址缓存到自己的ARP表中。
PC1电脑上的ARP表:
经以上过程后,PC1就知道了IP地址为:192.168.1.2这台电脑的MAC地址。
紧接着PC1就会每个1秒给PC2主动发送ICMP请求报文。交换机接收到PC1发送的ICMP请求报文后,会根据MAC学习表,将ICMP请求报文转发至和PC2相连的端口上,当PC2收到ICMP请求报文后,会给PC1发送ICMP响应报文。交换机接收到PC2发送的ICMP响应报文后,会根据MAC学习表,将ICMP请求报文转发至和PC1相连的端口上,PC1收到PC2的ICMP响应报文。那么将表明PC1和PC2之间的网络是相通的。
小结:
ARP协议:地址解析协议,作用就是根据IP地址寻找对方的MAC地址。它是一个适用局域网的协议报文,不会跨网段进行转发。
一个主机发送的ARP报文只会到达和其直连的交换机,同网段的主机,自己的网关设备处,总之不会跨网段进行转发。
当 一个主机ping 同网段的另一个主机时,如果当前主机不知道对方的MAC地址,则会先发送一个ARP报文,获取到对方的MAC地址后,再进行发送ICMP报文。
如果当前主机知道对方的MAC地址(即当前主机ARP表有对方主机的IP及MAC映射),则直接发送ICMP报文。
当arp表缓存过期,而mac学习表未过期
在PC1上 通过 arp -d 命令清空arp缓存表 ,相当于手动强制过期
通过arp -a 再次查看发现为空,表明确实缓存表已经清空了。
交换机上学习到的MAC地址还在
此时在PC1上ping 192.168.1.2 (PC2主机的ip),由于PC1主机上arp表是空的,在本地找不到同网段的目标IP地址192.168.1.2的MAC地址,所以PC1主机,会首先发生一个ARP广播请求数据报文到交换机,交换机上虽然有MAC学习地址表,但是交换机收到的是ARP广播请求数据包,即目标MAC地址为ff:ff:ff:ff:ff:ff即广播帧。交换机是不会查MAC地址表的,(显示MAC学习表中是不会有这个广播MAC地址的)。交换机会把这个ARP广播请求包,广播到其他端口,当PC2和PC3收到此广播数据包后,只有PC2主机会发送ARP响应数据包。流程就和上面的一样了。
总结:只要主动发起ping的PC上的ARP缓存表中,没有同网段的目标IP地址就发送ARP广播请求数据报文。
交换机上的动态MAC表虽然未过期,如果接收到的数据包中的源MAC地址及接收的端口对应关系有变化,那么交换机的动态MAC表
会根据数据包最新的源MAC地址及接收数据包的端口号,进行会主动更新MAC地址表。
当arp表缓存未过期,而mac学习表过期
PC1 不会发送 arp,因为它已经知道 PC2 的 mac 地址
交换机发送 arp,因为它是 l2 设备,而 arp 本质上是 l3
那么这种情况,PC1 在ping PC2时,因为PC1的ARP表中有PC2的MAC地址,所以就不会先发送ARP包了,直接发送ICMP请求报文。
当交换机收到ICMP请求报文后,由于MAC地址表是空的,会先学习源MAC地址将入端口的映射关系记录到MAC地址表中,然后根据目标MAC地址,查询MAC地址表,发现找到对应的目标MAC地址,则交换机认为这样的包为未知单播帧,会将其广播(即泛洪)到其他端口。
则PC2和PC3都会收到此ICMP单播数据帧。但只有PC2会回复ICMP响应报文,交换机收到ICMP响应报文后,学习响应报文中的源MAC地址及入端口记录到MAC地址表中。根据MAC地址表中的目的地址对应的端口将数据转发到PC1主机上。
总结:交换机处理数据帧的行为
如果接收的 是单播帧:交换机在MAC地址表查不到这个帧的目的MAC地址,则交换机认为此数据帧为未知单播帧,对该单播帧执
行泛洪操作。
如果接收的 是广播帧:交换机不会去查MAC地址表,直接对该广播帧执行泛洪操作。
这就是为什么我们使用 VLAN 来包含广播并在逻辑上将“类似”流量分段到自己的网络。
使用VLAN分割广播域
在交换机上:
[Huawei] vlan batch 10 20 //批量创建vlan 10 和 vlan20
[Huawei] interface Ethernet0/0/1 //进入端口Ethernet 0/0/1
[Huawei-Ethernet0/0/1] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/1] port default vlan 10 //将模式为access的端口Ethernet0/0/1的pvid改为 vlan 10
[Huawei-Ethernet0/0/1] dis th //查询当前端口的上述配置是否生效
[Huawei] interface Ethernet0/0/2 //进入端口Ethernet 0/0/2
[Huawei-Ethernet0/0/2] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/2] port default vlan 10 //将模式为access的端口Ethernet0/0/2的pvid改为 vlan 10
[Huawei] interface Ethernet0/0/3 //进入端口Ethernet 0/0/3
[Huawei-Ethernet0/0/3] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/3] port default vlan 20 //将模式为access的端口Ethernet0/0/3的pvid改为 vlan 30
access端口的特点:收到数据帧后打pvid标签,发送数据帧时剥离vlan(pvid)标签,再发送。
上述相当于 端口0/0/1和0/0/2 加入到vlan 10下。0/0/3加入到vlan20下。
那么在 PC1发送广播帧时,或者交换机收到PC1发送过来的未知单播帧时,交换机进行泛洪时,就不会再数据帧泛洪到0/0/3端口了,即PC3也就收不到了。也就是广播帧和未知单播帧,交换机会基于vlan进行广播转发,在逻辑上起到划分广播域。
华为交换机默认出厂时端口为hybrid ,pvid 为vlan 1。untag列表里只有一个vlan 1,tagged列表里为空。这也是默认出厂设置。
其他在什么都没配置华为交换机,在接收到PC1的单播数据帧后,会给数据帧打上pvid标签,即vlan 1。然后根据VLAN属性查找MAC地址表。
如果VLAN/ VSI /SI 这一列的 vlan 属性值 和单播数据帧里的vlan标签相同的。会进一步比较单播数据帧里的目的MAC地址是否在MAC Address里。
如果找不到相匹配的vlan属性值,或者找到了对应的vlan属性值但是在含有这些vlan属性值的记录里,找到目的MAC地址。那么交换机就会进行广播转发数据帧。
如果PC1发送的是广播帧,则交换机收到后会打上pvid标签,不会根据属性查看Mac地址表,直接将广播帧泛洪到所有其他端口,然后根据端口模式规则对广播帧是转发还是丢弃。
ping 命令:要保证 发送数据 和接收数据都要通才行。有可能出现发送数据是通的,但是响应数据的链路是不通的。所以两者都要考虑。