MAC地址
单播MAC地址第一个字节的最低比特位为0,组播MAC地址第一个字节的最低比特位为1;只有单播MAC地址才能够被分配一个以太网接口,组播或广播MAC地址是不能被分配给任何一个以太网接口
Ethernet II格式
IEEE802.3格式
二层交换的工作原理
当交换机在某个接口上收到一个单播数据帧时,它将首先读取数据帧的目的MAC地址,并且在自己的MAC地址表中查询该地址,如果查询不到匹配的表项,则将该数据帧进行泛洪(Flooding),所谓的泛洪是指将数据帧从除了收到该帧的接口之外的所有接口都发送一份拷贝。如果能够在MAC地址表中找到匹配的表项,并且收到该帧的接口与该表项中对应的接口不同时,则将数据帧从该表项中对应的接口转发出去;如果收到该帧的接口与该表项中对应的接口相同时,则丢弃该数据帧。
此外,当交换机收到一个数据帧时,它还会读取数据帧的源MAC地址,如果该地址在MAC地址表中并不存在相关表项,则交换机将创建一个MAC地址表项,并将该MAC地址及收到该数据帧的接口记录在该表项中。
当交换机收到一个广播数据帧(目的MAC地址为FFFF-FFFF-FFFF)时,交换机不会进行目的MAC地址查询,而是直接将其进行泛洪
如图当PC1发送数据帧给PC2时:
- PC1首先会发送一个广播的ARP Request数据帧,用于请求PC2的E0/0/1口的MAC地址,这个广播帧会被LSW1进行泛洪。PC3收到该帧后将数据帧解封装,然后将ARP荷载上交ARP协议模块去处理,当该协议模块发现该ARP请求并非发给自己时,PC3将忽略该ARP请求。而PC2收到ARP帧后,会使用一个单播的ARP Relay数据帧进行应答,如此PC1就知道了PC2的E0/0/1口对应的MAC地址
- PC1将源IP地址设置为192.168.1.1/24,目的地址为192.168.1.2/24,源MAC地址为PC1的E0/0/1口的MAC地址,目的MAC地址已经通过步骤1获取到填充进去,然后发出
- 当LSW1收到这个数据帧后,首先借助数据帧尾部的CRC字段进行差错校验,确保该数据帧在传输过程中没有被损坏。接下来LSW1读取数据帧的目的MAC地址,并且在其MAC地址表中查询该地址,如果发现不存在匹配的表项,LSW1会将数据帧进行泛洪(除了G0/0/1接口)。同时发现源MAC地址在MAC地址表中不存在,LSW1会进行源MAC地址学习,这里会将PC1的E0/0/1口的MAC地址与LSW1的G0/0/1口进行关联
- PC3收到交换机转发的数据帧后,发现该帧的目的MAC地址与PC3的E0/0/1口MAC地址不相同,因此丢弃这个数据帧。而PC2则会接受这个数据帧,并对数据帧进行解封装
- PC2需要应答PC1的请求,将数据从E0/0/1口发出,LSW1在g0/0/2口上接受这个帧,首先读取数据帧的目的MAC地址,然后在其MAC地址表中查询该地址,找到是g0/0/1,然后从该接口发出。同时LSW1将数据帧的源MAC地址学习到MAC地址表中
VLAN
基于IP地址划分VLAN
//LSW1配置
#
vlan batch 30
#
interface Ethernet0/0/3
port link-type access
port default vlan 30
#
interface Ethernet0/0/4
port link-type trunk
port trunk allow-pass vlan 30
#
//LSW2配置
#
vlan batch 10 20 30
#
vlan 10
ip-subnet-vlan 1 ip 10.10.10.0 255.255.255.0
vlan 20
ip-subnet-vlan 1 ip 10.10.20.0 255.255.255.0
#
interface Ethernet0/0/1
port hybrid tagged vlan 30
port hybrid untagged vlan 10 20
ip-subnet-vlan enable
#
interface Ethernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20 30
#
//LSW3配置
#
vlan batch 10 20 30
#
interface Ethernet0/0/2
port link-type access
port default vlan 10
#
interface Ethernet0/0/3
port link-type access
port default vlan 30
#
如图,分别将三个网段数据对应如下表格
| VLAN | IP地址规划 |
|---|---|
| 10 | 10.10.10.0/24 |
| 20 | 10.10.20.0/24 |
| 30 | 10.10.30.0/24 |
在不更改LSW1的配置情况下,在LSW2配置如上;ip-subnet-vlan enable 只能在Hybrid类型的接口上应用。
使用以太网子接口实现VLAN之间的通信
多臂路由
当PC1发送数据给PC2时,过程如下
- PC1的上层协议产生的数据荷载到了网络层,数据荷载在网络层被封装一个IP头部,在IP头部中,源IP地址填写的是192.168.10.1,目的是192.168.20.1;PC1的E0/0/1口将其封装成帧。PC1发现数据包的目的IP地址与E0/0/1口的IP地址不在同一个网段,因此会将这个数据包先发送到默认网关,由默认网关将其转发到目的地。通过配置得到网关的IP地址为192.168.10.254,然后在ARP表中查询这个IP地址对应的MAC地址。初始状态下,PC1并没有相应的ARP表项,因此会以广播的方式发送一个ARP Request数据帧,该数据帧用于请求192.168.10.254对应的MAC地址
- PC1发送的广播ARP Request数据帧到达了LSW1,交换机读取数据帧目的MAC地址,发现是一个广播数据帧,而接收这个数据帧的接口E0/0/1又加入了VLAN10,因此LSW1在VLAN10内泛洪这个数据帧。G0/0/1口也加入了VLAN10,因此LSW1也会从这个接口发送一份拷贝出去。E0/0/2属于VLAN20,因此不从该接口泛洪数据。另外交换机还会学习源MAC地址,将源MAC地址与E0/0/1口绑定
- 路由器的G0/0/0口接收到了ARP Request数据帧,由于ARP Request中填充着发送者PC1的IP地址及MAC地址,因此路由器为PC1创建一个ARP表,然后构造一个单播的ARP Reply数据帧回复给PC1
- ARP Reply数据帧到达LSW1后,LSW1在MAC地址表中查询这个数据帧的目的MAC地址,发现能匹配的上且出接口为E0/0/1,因此将数据帧从E0/0/1口发送出去。另外LSW1还会学习数据帧的源MAC地址,并且与G0/0/1口绑定
- PC1接收ARP Reply数据帧,根据源IP地址和MAC地址创建一个ARP表,然后将待发送给PC2的数据包封装成数据帧,帧头中的目的MAC地址为路由器的G0/0/0口的MAC地址
- 数据帧到达LSW1后,LSW1通过MAC地址表查询,发现该帧的目的MAC地址匹配的上,出接口为G0/0/1,然后将其发出
- 路由器接收到这个数据帧后,读取数据帧的目的MAC地址,发现正是自己的G0/0/0口,意识到该帧是发送给自己的,通过帧头的“类型”字段,发现封装的是IP报文,于是将数据帧解除封装,交给IP协议模块去处理。上层IP协议模块检查报文的IP头部中的目的IP地址,发现为192.168.20.0/24,出接口为G0/0/1,意识到这个数据包是要发往本地直连的一个网段。因此它重新将数据包封装成帧,帧头的源MAC地址为路由器的G0/0/1口的MAC地址,目的地址是PC2的E0/0/1口的MAC地址(初始时路由器可能并不知道PC2的IP地址对应的MAC地址,因此将出发ARP解析过程),然后发出
- LSW1处理该数据帧,最后到达PC2,PC2检查该数据帧的目的MAC地址,发现正是自己,于是将数据帧解除封装并交给上层IP协议模块。如此PC1发送给PC2的转发过程完成
单臂路由
当PC1发送数据给PC2时,过程如下
- PC1判断出目的IP地址不在同一网段,因此将数据帧发往网管192.168.10.254,PC1发往PC2的数据帧(无标记帧),目的MAC地址是192.168.10.254的MAC地址(假设此时它已经知道网关的MAC地址)
- LSW1的E0/0/1收到后,查询VLAN10的MAC地址表中这个数据帧的目的MAC地址,匹配到出接口为G0/0/1后,由于G0/0/1为trunk口并且放行VLAN 10和20,因此数据帧以标记帧的形式发出
- 路由器的G0/0/0口收到后,根据携带的VLAN TAG,判断该标记帧来源于VLAN10,于是交给G0/0/0.10口处理,路由器将数据帧的TAG剔除,将帧头解封装,去路由表中查询到192.168.20.0/24,该直连接口的出接口为G0/0/0.20,于是重新封装数据包成帧,此时帧头中的源MAC地址为G0/0/0.20的MAC地址(也就是G0/0/0的MAC地址),目的地址为PC2的E0/0/1的MAC地址(假设此时已经该MAC地址),由于子接口指定了VLAN20,因此在数据帧中插入VLAN TAG为20,然后发送出去
- LSW1收到该标记帧,从TAG中获取VLAN20,然后在MAC地址表中查询目的MAC地址,LSW1只会在VLAN20中查询该MAC地址,匹配到后,将该数据帧的TAG剔除,然后将无标记帧从E0/0/2口发出
MUX VLAN
| 术语 | 概念 |
|---|---|
| 主VLAN(Principal VLAN) | 加入Principal VLAN的接口可以与MUX VLAN内的所有接口通信 |
| 互通型Subordinate VLAN(Group VLAN) | 加入Group VLAN的接口可以同,加入Principal VLAN的接口和属于同一个Group VLAN的接口通信,属于不同Group VLAN的接口无法通信 |
| 隔离型Subordinate VLAN(Separate VLAN) | 加入Separate VLAN的接口只能与加入Principal VLAN的接口通信,而无法与其他类型的接口通信(包括同属一个Separate VLAN的接口) |
//LSW1配置
#
vlan batch 100 to 102 109
#
vlan 100
mux-vlan
subordinate separate 109
subordinate group 101 to 102
#
interface Ethernet0/0/1
port link-type access
port default vlan 101
port mux-vlan enable
#
interface Ethernet0/0/2
port link-type access
port default vlan 101
port mux-vlan enable
#
interface Ethernet0/0/3
port link-type access
port default vlan 102
port mux-vlan enable
#
interface Ethernet0/0/4
port link-type access
port default vlan 102
port mux-vlan enable
#
interface Ethernet0/0/5
port link-type access
port default vlan 109
port mux-vlan enable
#
interface Ethernet0/0/6
port link-type access
port default vlan 109
port mux-vlan enable
#
interface Ethernet0/0/7
port link-type access
port default vlan 100
port mux-vlan enable
#
VLAN聚合
| 术语 | 概念 |
|---|---|
| Super-VLAN | 创建Super-VLAN后,需将Sub-VLAN关联到该Super-VLAN中。Super-VLAN并不包含任何物理接口,它只用于将Sub-VLAN进行聚合,并且提供对应的三层接口(VLANIF) |
| Sub-VLAN | 必须关联到对应的Super-VLAN,可以向Sub-VLAN添加物理接口,但是不能创建Sub-VLAN对应的VLANIF。同一个Super-VLAN内的Sub-VLAN之间彼此依然二层隔离,但是这些Sub-VLAN共用Super-VLAN的VLANIF,也就是所有Sub-VLAN内的主机使用相同的IP网段,并且这些主机都可以将缺省网关设置为Super-VLAN的VLANIF |
//LSW1配置
#
vlan batch 11 to 12 100
#
vlan 100
aggregate-vlan
access-vlan 11 to 12
#
interface Vlanif100
ip address 192.168.8.254 255.255.255.0
arp-proxy inter-sub-vlan-proxy enable
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 11
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 12
#
//LSW2配置
#
vlan batch 11
#
interface Ethernet0/0/1
port link-type access
port default vlan 11
#
interface Ethernet0/0/2
port link-type access
port default vlan 11
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 11
#
//LSW3配置
#
vlan batch 12
#
interface Ethernet0/0/1
port link-type access
port default vlan 12
#
interface Ethernet0/0/2
port link-type access
port default vlan 12
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 12
#
相同的Sub-VLAN内的主机之间可以直接通信。PC1可以直接与PC2进行二层通信,而所有的PC如果需要发送数据到外部网络,则流量首先会到达网关VLANIF100,再由LSW1负责将流量转发出去。缺省情况下,不同Sub-VLAN的PC之间是无法互访的,PC1无法与PC3或PC4互访。如果要实现互访,必须借助三层设备,需要在LSW1的VLANIF100中配置arp-proxy inter-sub-vlan-proxy enable
假设PC1需要发送数据给PC3,PC1发现目的IP地址192.168.8.11/24在同一个网段内,因此会认为目的PC与自己同处于一个二层网络,于是向网络中发送一个广播的ARP Request数据帧,试图获得PC3的MAC地址。这个广播数据帧会在VLAN11内泛洪,因为PC3属于VLAN12,因此PC3收不到这个广播数据帧。如果在LSW1的VLANIF100中配置arp-proxy inter-sub-vlan-proxy enable,当VLANIF100收到PC1发送的广播的ARP Request数据帧后,将使用ARP Reply进行回应,将自己的MAC地址告知PC1,PC收到后,创建ARP表,将192.168.8.11/24与LSW1的VLANIF100的MAC地址进行绑定,然后它将到达PC3的数据帧发给LSW1,LSW1将该帧转发给PC3,以实现通信