一、实验拓扑:
使用华为ENSP模拟器(版本V100R002C00 1.2.00.350)
二、实验需求:
1. 了解ARP协议及其作用
2. 掌握交换机的工作原理
3. 解决以太网广播风暴问题
三、实验步骤:
1. iP规划:
c1:192.168.1.10
c2:192.168.1.20
c3:192.168.2.30
R1:g0/0/1192.168.1.1 g0/0/2 192.168.2.1
2. ARP协议作用:
1) 概念:ARP(全称Address Resolution Protocol)即地址解析协议,是网络层协议。
2) 作用:通过arp的请求报文来获取目标mac地址。
3) Arp协议有两种报文,分别是arprequest(请求)报文和arp reply(回应)报文。c1和c2是在同一个网段,并且都是24位掩码,所以它们是可以通信的,c1、c2之间详细的通信过程是这样的:数据包在封包时,原ip地址是192.168.1.10,目标地址封装为192.168.1.20,网络层封包完成交给下一层数据链路层,在装帧时,帧头的原mac地址字段是c1的网卡的mac地址,在目标Mac地址字段不是c2的mac地址,管理员在c1上pingc2可以让c1知道c2的ip地址,但不知道它的mac地址。所以二层装帧是完不成的。
4) 这种情况就需要通过arp request报文获得目标mac地址,request报文是通过广播的方式发送出去的。 //所谓广播就是连在c1上的所有设备都能收到报文。但是只有c2会发送回应报文,把自己的mac地址告诉c1,即arp reply报文,是以单播的形式回应c1的。
5) 每台pc都会有arp缓存表,把动态学习到的mac地址和iP地址对应关系放到arp缓存表里。
6) 用arp -a查看arp缓存表,当c1没有和c2通信过,它的缓存表里是没有c2的mac地址的,我用c1来ping c2,然后再查看arp缓存表,它就会学到c2的mac地址。验证如下:
7) 通过抓包可以抓到发送的报文。在c1处抓,右击“开始抓包”,单击ok,然后右击打开WIRESHARK(抓包工具)之后会出来很多报文,我们在Filter(过滤器)里输入arp单击Apply //只抓arp报文。很明显这里抓到两个报文,一个是广播,一个是单播。
先看广播request(请求)报文,打开之后先看二层信息,
我可以用ipconfig查看c1的mac地址
再看三层信息
8) 我们再看单播reply(回应)报文
通过c2的回应报文,c1学到了c2的mac地址,下次c1要和c2通信就不会发送arp请求报文了,因为c1记在了自己的arp缓存表里。那么此时再用c1 ping c2并抓包,如果发现还发送arp报文,说明它忘记了,或者arp缓存表过期。
9) 当arp缓存表里有对方的mac地址并且没有忘记或过期,通信时就不会发送arp报文。 //以上就是arp工作原理。
10)当c1发送广播报文时,连在交换机上的所有设备都能收到,包括路由器,但是只有c2会回应它,我们在路由器下面接口抓包,验证如下:
R1的g0/0/1接口处抓包
11) 那么c3是不能收到c1的arp报文的,因为路由器的作用就是隔离广播。Arp 并不会泛洪到路由器的另一边,因为是不同网段。Arp报文只会在以太网之间发送,并不会在网络之间发送。C1和C3通信正确的流程:首先c1和c3通信,在三层网络层原ip是1.10目标ip是2.30,在二层数据链路层原mac是c1的,目标mac是网关的mac,二层封装完之后数据交给物理层,物理层沿着线路把数据给了g0/0/1口,这个口会判断目标mac是不是它自己的,如果是就会把帧抽下来,把mac地址脱掉,露出三层信息。当查看数据包头的时候,看目标ip是2.30,然后看自己路由表里有没有,由于2.0段是直连,它知道怎么走,数据就由g0/0/1转到g0/0/2出口,但数据包不会从出口直接发送到c3,因为数据包是不能直接在线路上传输的,还需要做二层封装,此时原mac是出口地址的mac,目标mac是c3的mac。 //当mac地址离开自己的以太网之后会被换掉。二层完成之后数据就送到c3了。回应是反过来的。验证如下:用c1 ping c3,在g0/0/1处抓包。(c1和c3都配了网关)
这时数据由网关中转给c3,在e0/0/3处抓包。这时不是抓arp报文了,arp报文是网关发送的,查询c3的mac地址的。我们用c1 ping c3的,所以抓的是icmp报文。
很明显,有请求和回应报文,因为两个网段都做了网关,所以c1和c3通信数据既能到也能回来。我们看看回应报文,原地址是c3,目标地址不是c1而是c3网关,可以用dis arp在路由器上查看到mac地址表。
通过上面的验证,我们知道不在同一网段的主机想要通信必须经过网关。当主机跨网段通信的时候,是不会发arp报文的。主机会主动请求网关的mac地址,由网关把数据中转出去。当路由器把数据转给对方的过程中会把mac地址替换掉。数据到g0/0/1时会把mac脱掉,然后从g0/0/2出口出来数据又重新封装了mac。
3. 交换机工作原理:交换机是二层设备,它有mac地址表,能够记住它每个接口下所连的设备的mac地址。第一次当交换机收到一个数据帧的时候,它会查看这个数据帧的的目标mac地址,看看这个目标mac在自己的mac地址表里有没有。如果有,它就会通过指定端口把数据帧发出去,如果没有就会向所有端口转发。当对方回应请求报文时,交换机就通过数据帧的原mac地址字段学到这个mac地址并记在自己的mac地址表里。下面以c1和c2通信为例:当c1和c2通信时,交换机会从e0/0/1端口收到一个数据帧,之后它可以通过数据帧的原mac字段学到c1的mac地址,并记在mac地址表里。用dismac-address查看mac地址表,当sw1收到数据帧之后,由于它不知道c2这个设备连在哪个端口下,所以会向所有端口泛洪这个数据,但不是一直泛洪,当c2回应的时候,sw1就会从自己的e0/0/2端口学习到c2的mac地址。下次通信的时候,由于它知道c2的mac地址,就直接把数据发给e0/0/2口。验证如下:首先c1ping c2能通。
c1 ping c2时,sw1通过e0/0/1学到了c1的mac,c2回应了c1,并且sw1也从端口e0/0/2学到了c2的mac地址。
在g0/0/1处抓包,看看sw1会不会泛洪。没有抓到ping报文,说明sw1并没有发向所有端口。
4. ARP攻击: arp在设计的时候是有缺陷的。c1再和c2通信,数据就不会发向所有端口了。那么这时如果sw1下面连个c3,它也是不能监听到c1和c2的通信的。所以我们认为在以太网如果是交换式环境是安全的。第三方想要监听到c1和c2的通信,只有不停的向sw的mac地址表里写东西,让mac地址表溢出,它就记不住新学到的了。 //mac地址表是有大小空间的。还有一些问题比如说c1没有向c2发送请求,而c2主动向c1发送回应,并欺骗它,由于arp没有验证机制,导致c1与其它通信被拦截,甚至局域网里的所有成员都上不了网。这就叫arp攻击。
5. 广播风暴问题:如果一个二层网络非常大的时候,会导致大量带宽被各种报文占据,那么正常的流量就无法传输了。我们把这种大的二层网络称为平面网络 //所谓平面网络就是没经过分层设计。能够收到某一设备发送的报文的所有设备的集合叫做广播域,广播域越多越好。扁平化的设计是不合理的,不能优化广播域的数量,会导致广播风暴产生,网络性能大大下降。所以在设计网络时应采用分层设计来提高网络性能。如果用路由器隔离广播当然是一种选择,但是路由器的端口是有限的。三层转发没有二层效率快,所以尽量在二层转发。通过在交换机上来把大的广播域隔离成多个小的广播域的技术叫vlan技术 //虚拟局域网技术。这个以后会讲解。通过在交换机上划分多个vlan,把e0/0/1和e0/0/2划在不同的vlan。这样就从一个广播域变成两个广播域了。用这种技术来优化网络性能,减少广播风暴的范围。