《交换机转发原理的回顾》—那些你应该知道的知识(十一)

写在前面:

近期被一道有点奇怪的题目考住了,考点其实就是最基础的交换机的转发原理。在此复习、整理一下。

在此,我们不讲这个题目提出的其他条件,单独讲述PC1能够ping通PC2的这一过程。

交换机SW1 eth0属于vlan10,交换机SW2 eth0属于vlan20.两个交换机互联接口为三层接口。

两台交换机通过三层接口互联,并在接口上配置ip地址如下图所示:

在两台交换机上分别起SVI作为网段的网关;在两台交换机上配置静态路由,通过互联三层地址实现互通。

下面就PC1 10.1.1.1 ping通 PC2 10.1.2.1的这一过程,做出解释。

在开始之前,我们先关闭CDP,清除ARP缓存,关闭两台交换机的互联接口。


过程阐述:

在ping之前

我们先来看看,在ping之前,有什么事情已经发生。

打开SW1,eth0/1接口,查看该接口上的抓包情况

免费ARP

通过抓包,我们可以看到,SW1从ETH0接口发出免费ARP,该数据包的源mac地址为ETH0接口的MAC地址,目的MAC地址为广播MAC地址。

SW1通过这样的方式,告知二层广播域内的所有设备ip地址1.1.1.1的mac地址是多少,同时通过这样的方式,接收到该数据包的交换机,可以将该数据包的源mac地址和收到该数据包的接口形成一一对应关系,更新到mac地址表中。同样,可以将1.1.1.1与mac地址形成对应关系,更新到arp表中。

于是仅通过这一条免费ARP,在SW2 ETH0/1接口打开的情况下,SW2就可以学习到1.1.1.1对应的mac地址,和去往该mac地址,对应到的交换机接口。

ARP请求

除了免费ARP以外,SW1还从ETH0/1接口发出了arp请求,在二层广播与内询问1.1.1.2对应的mac地址。这应该与我们配置了静态路由有关,SW1在询问1.1.1.2所对应的mac地址,已完成数据包二层mac地址的封装。

由于SW2的ETH0接口此时没有打开,所以SW1无法得到回应,通过抓包我们可以看到SW1以约为2.35、4.65、9.32这样的,每次增长两倍频率发ARP请求,这个行为与TCP SYN包重传的间隔非常相似。

下面我们打开SW2的ETH0/1接口,查看接口上的抓包情况

免费ARP

通过抓包,我们可以看到,在打开接口的瞬间,交换机SW2同样从ETH0/1接口发出了免费ARP,通过这样的方式,告知同一个二层广播域内的设备ETH0接口IP地址1.1.1.2所对应的mac地址,这样SW1便学到了1.1.1.2所对应的mac地址,可以更新ARP表。

ARP请求

除了免费ARP之外,由于之前SW2接口ETH0/1是关闭状态,SW2并没有能够接收到SW1发出的免费ARP,这导致在SW2的ARP表中,没有1.1.1.1对应的条目。于是SW2发出ARP请求,这得到了SW1 ETH0/1接口的回应。SW2从自身的ETH0/1接口收到这个ARP应答,更新ARP表记录1.1.1.1对应的ip地址,和收到ARP回应的ARP接口。

至此,我们可以在SW1和SW2的设备上,查看ARP表。

两台设备通过上述数据包的交互,学习到了直连接口对端IP地址对应的mac地址,以及要去往该mac地址,对应的交换机接口。

开始ping测试

我们可以看到,ping包的前两个包没有得到回应,从第三个包开始ping通。下面通过抓包分析该过程

分析PC1 这一侧的情况,查看SW1 ETH0/0接口的抓包情况。

在开始ping之前,我们可以看到

在SW1创建SVI10之后,SW1在vlan 10 这个广播域内发出免费ARP,告知10.1.1.254所对应的mac地址。

通过这样的方式,PC1便学到了10.1.1.254对应的mac地址,不需要再发ARP请求进行学习。

第一个ping包

源mac地址为PC1接口的mac地址,目的mac地址为10.1.1.254的mac地址

SW1收到该数据包后,发现目的mac地址是在自己这台交换机上,于是将数据包该看,查看IP包头。

查看IP包头,发现数据包目的IP地址为10.1.2.1.查看ARP表,无对应条目。

查找路由表,匹配静态路由,开始进行路由的递归查询。

10.1.2.0/24的路由,下一跳为1.1.1.2

1.1.1.2对应的路由为1.1.1.0/24的直连路由,出接口为ETH0/1

于是SW1开始封包,封装源mac地址为出接口mac地址,目的mac地址为下一条ip地址对应的mac地址,这在ping开始之前的过程中,已经学到并记录在ARP表中。

通过SW1 ETH0/1接口的抓包,我么可以看到第一个ping包确实是这样封装的。

除此之外,我们还可以看到,其实是有4个ping包得到了回应的,这月PC1上看到的现象不符,我们将在接下来解释这个现象的原因。

当SW2从ETH0/1接收到该数据包之后,发现目的mac地址就是自己,于是拆掉二层包,查看IP包头,发现目的IP地址为10.1.2.1.

查找本地ARP表,此时没有10.1.2.1对应的条目。之后查找路由表,发现匹配的10.1.2.0/24的直连路由,对应的接口为vlan 20

于是在vlan 20这个广播域内发出arp请求,询问10.1.2.1对应的mac地址,这得到PC2的回应,并记录在ARP表中

同时,将收到10.1.2.1对应的mac地址和收到该arp返回的接口,形成对应关系,记录到mac地址表中

在这个过程中,第一个ping包已经超时,所以SW2并没有将这个ping包发送给PC2。

第二个ping包

在于上述相同的步骤后到达SW2,SW2拆开数据包查询目的IP地址,查询ARP表,发现有10.1.2.1对应的ARP条目,查询到10.1.2.1对应的mac地址,之后在查询mac地址表,发现要去往目的mac地址,要从接口ETH0/0进行转发。

于是封装该数据包,源mac地址为mac地址表中出接口的mac地址,目的mac地址为查询ARP表的到的10.1.2.1对应的mac地址。将数据包从ETH0/0接口进行转发。

之后当PC2收到这第二个ping包后,PC2需要进行回应。

与之前的SW1一样,在配置SVI20时,交换机SW2通过免费ARP,在VLAN20这个广播域内发出了关于10.1.2.254的免费ARP,于是PC2便知道了10.1.2.254对应的mac地址。

于是PC2准备回应第二个ping包,调换第二个ping request的源、目ip地址。封装二层数据包头,源mac地址为PC2的出接口mac地址,目的mac地址为10.1.2.254的mac地址。

当SW2收到该数据包后,发现目的mac地址是自己,于是拆开IP包头,发现目的IP地址是10.1.1.1,首先查找ARP表,发现没有对应条目。接着查找路由表,匹配到10.1.1.0的路由,如下图:

匹配到下一跳IP地址为1.1.1.1,进行递归查询,查询到1.1.1.0直连路由,出接口为ETH0/1。于是开始封装数据二层包头,源mac地址为直连路由的出接口ETH0/1,目的mac地址为下一跳IP地址1.1.1.1的mac地址,这已经在ping开始之前的过程中学习到了,可以从ARP表中查询到。封装完数据包后,进行转发。

当SW1收到这个数据包,查询到目的mac地址是自己,于是拆开二层包查看三层包头,发现目的IP地址为10.1.1.1,查询ARP表没有对应条目,于是查询路由表。匹配直连路由10.1.1.0/24,对应接口为vlan10

于是在vlan10这个广播域内,发出ARP请求,询问10.1.1.1对应的mac地址。

这得到PC1的回应,SW1收到后更新arp表和mac地址表,但此时第二个ping包的response包已经超时,所以SW1没有将该数据包进行转发。

这也就解释了为什么在PC1上看到的是,两个ping包没有得到回应,而在SW1和SW2 以及 SW2和PC2 的互联链路上只有一个ping包没有得到回应。

第三个ping包

于是接下来,当PC1发出第三个ping包的时候,当数据包到达SW2,SW2通过查询ARP表,封装目的mac地址和出接口对应的源mac地址,便将数据包转发给PC2,PC2回应该ping包,当ping response到达SW1后,SW1查询ARP表,得到对应的MAC地址和出接口,便将该数据包进行转发,PC1收到该数据包,判断ping得到了回应。之后的几个ping包也经历这样的过程,得到了回应。


知识点总结

在ping开始之前

免费ARP

配置三层接口地址后,交换机会发出免费ARP,向外告知该三层接口的IP地址对应的mac地址。

在配置了SVI接口后,交换机会在SVI对应的VLAN二层广播域内,发免费ARP,告知SVI接口对应的mac地址。

但是免费ARP不是一直发送的,只在接口up的时候,会发送两个免费ARP数据包。

ARP请求

在配置了静态路由指定下一跳地址后后,交换机会根据静态路由指定的下一跳地址,递归查询到直连路由对应的出接口,在出接口发出ARP请求,询问下一跳地址对应的mac地址。

这个ARP请求会反复发送,每次发送的间隔是上一次发送间隔的两倍。

ARP代理

(未通过本案例例证实,通过其他实验证实)

当配置的静态路由没有指定下一跳地址,而仅指定了出接口的时候;交换机会根据数据包的目的ip地址,在静态路由出接口发出ARP请求,对端交换机收到arp请求后,查询本地的arp表和路由表,若有可以匹配的条目,则以收到该数据包的接口的mac地址,作为该ARP请求的回应。这又被称作ARP代理

在ping开始之后

交换机数据包转发过程总结

发现目的mac地址是自己的时候,才会拆包查询目的IP地址。如果发现不是自己,直接查询mac地址表进行转发,若mac地址表没有对应条目,则丢弃。

查询到目的IP地址后,先查询ARP表,再查询路由表。

若ARP表有匹配条目,封装目的mac地址,并以出接口的mac地址,作为mac源地址,将数据包进行转发。若ARP表中的出接口为vlan,则根据ARP表对应的mac地址,查询mac地址表,根据mac地址表的出接口进行转发;若mac地址表没有查询到对应条目,则在这个vlan的二层广播域中,发ARP请求,更新mac地址表。

若ARP表没有匹配条目,查询路由表,若路由表指定了下一跳的IP地址,根据路由表递归查询到直连路由,以直连路由出接口为源mac地址,下一跳ip地址对应的mac地址为目的mac地址,进行封装转发,下一跳IP地址对应的mac地址,在完成静态路由的配置后会自动学习到。

若路由表中仅指定了出接口,没有指定ip地址。则会在出接口,针对数据包的目的ip地址发出arp请求,当出接口对端的交换机收到该ARP请求后,查询本地的ARP表和路由表,如果有对应查询结果,则返回收到该ARP请求接口的mac地址,作为ARP代理,交换机收到该返回后,直接更新ARP表,将数据包目的IP地址对应的mac地址更新为对端接口的mac地址。并且数据包以此作为根据封装二层数据包,完成转发!

我将在后续,针对上述描述输出流程图,方便之后的查阅。


尾巴

交换机转发数据包的原理,远比我们看到的要复杂,有很多技术细节值得被注意,也很容易被遗忘。就好像很多人认为网络工程师仅仅是陪陪静态路由,配置vlan一样,网络连接的过程远没我们表面看到的那样简单。同时,网络工程师也要夯实基础,在能够熟练完成配置,实现工作需求的基础上,了解网络的工作原理,这将为我们排除故障起到有效的帮助。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值