Files
security-book/00.基础阶段/01.网络基础/10.交换原理.md
2025-08-27 14:07:52 +08:00

288 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 10.交换原理
## 1. 交换机的工作原理
- 交换机的主要作用是将多个节点连接至同一个广播域中
- 广播域中的设备可以直接通信同一个广播域建议IP地址网络号一样
![image-20200412101431873](10.交换原理/image-20200412101431873.png)
如图R1和R2属于同一个广播域只需要有二层的数据封装就可以通信不看三层的数据封装
<!--more-->
R1和R2故意配置不是同一个网段的地址看下是否可以通信
```
R1(config)#int e0/0
R1(config-if)#ip add 172.16.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#ip route 0.0.0.0 0.0.0.0 e0/0
```
```
R2(config)#int e0/0
R2(config-if)#ip add 192.168.1.1 255.255.255.0
R2(config-if)#no sh
R2(config-if)#ip route 0.0.0.0 0.0.0.0 e0/0
```
测试是否可以互相访问
```
R1#ping 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/1 ms
```
这就说明二层的通信和三层的通信在一定程度上是隔离的,因为中间转发数据的设备不一样。
如果某个数据只有二层数据封装那么只能在本广播域传递交换机在处理的时候是不看IP地址相关信息也就是不去查看三层数据。
路由器只处理IP报头中的内容不去转发只有二层的数据甚至如果这个数据包中二层的目的MAC地址不是路由器路由器会直接丢弃。
1. 交换机收到一个数据之后首先会将数据的源MAC地址和收到的这个接口对应关系记录到MAC地址表中
```
Switch#sh mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 aabb.cc00.5000 DYNAMIC Et0/2
Total Mac Addresses for this criterion: 1
```
2. 查看目的MAC地址是否存在MAC地址表中如果不存在就会将这个数据复制多份每个接口都发一份(泛洪)。比如下图,就收到了交换机泛洪过来的,不应该发送的数据包,不过只收到了一个。
![image-20200412104114811](10.交换原理/image-20200412104114811.png)
3. 交换机收到了正确的设备回应并且学习到了MAC地址和接口对应关系所以后续的数据都不会再泛洪。
```
Switch#sh mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 aabb.cc00.5000 DYNAMIC Et0/2
1 aabb.cc00.7000 DYNAMIC Et0/1
Total Mac Addresses for this criterion: 2
```
### 1.1 MAC泛洪攻击
现有市面上的交换机学习到的MAC地址都是保存在内存中的MAC地址学习数量有限正常一个企业级入门交换机能学习到的MAC地址数量只有几千个。
比如cisco C3560交换机可以学习到的地址只有6056个正常情况下动态学习的MAC地址需要等待300s都没有再次通信就会删除。
```
Eagle#show mac address-table count
Mac Entries for Vlan 0:
---------------------------
Dynamic Address Count : 21
Static Address Count : 0
Total Mac Addresses : 21
Total Mac Address Space Available: 6056
```
如果有用户恶意的让交换机疯狂的学习MAC地址直到塞满MAC地址表那么所有的数据都会泛洪从而导致内网信息泄漏。
macof是dsniff套装工具集的成员macof会发送随机mac地址的数据让交换机瞬间塞满mac地址表这样交换机就不得不泛洪每个数据然后再通过dsniff分析敏感信息比如密码。
![image-20200412101431873](10.交换原理/123.gif)
没运行几秒钟交换机的MAC地址表就学习到了一万多条
```
Switch#show mac address-table count
Mac Entries for Vlan 1:
---------------------------
Dynamic Address Count : 11292
Static Address Count : 0
Total Mac Addresses : 11292
Total Mac Address Space Available: 209388488
```
### 1.2 路由器的工作原理
1. 收到一个数据包之后首先查看目的MAC地址是否是接收端口如果不是就丢弃如果是广播那就处理但是不转发。
2. 目的MAC地址如果通过检查就回判断目的IP地址时候可路由(也就是路由表中是否存在匹配条目),存在就转发。
3. 要注意不管是接收还是发送都会进行ACL检查。
## 2. VLAN
### 2.1 LAN(Local Area Network )
- 本地区域网络,一般指的是一个广播域,里面的节点可以直接使用数据链路层封装信息通信
- 不同的LAN往往是隔离的如果有通信的需要必须要经过一台三层设备比如防火墙、路由器、上网行为管理等等
- 在企业中不同的LAN之间通信需要进行安全策略比如研发部门的内网和销售部门的内网就应该中间隔离
一台交换机默认情况下所有接口都属于一个LAN但是有时候因为成本和部署的需要我们想让一台交换机可以有多个LAN这些LAN之间是逻辑上隔离的我们称为VLAN。
![image-20200412134143933](10.交换原理/image-20200412134143933.png)
如果SW的e0/0和e0/1没有配置不同的VLAN那么R1和R2即使网段不一样依旧可以通信。
将R1分配到vlan10将R2分配到vlan20这样就彻底隔离了。
```
SW(config)#vlan 10,20
SW(config-vlan)#int e0/0 # 要注意真实的交换机接口是从1开始的这边是模拟器的Bug
SW(config-if)#switchport access vlan 10
SW(config-if)#int e0/1
SW(config-if)#switchport access vlan 20
SW#show vlan
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Et0/2, Et0/3
10 VLAN0010 active Et0/0
20 VLAN0020 active Et0/1
```
- 默认情况下交换机所有的接口都属于vlan1所以交换机插电开机就可使用并且所有接口默认都是一个LAN
- VLAN号范围是0-4095其中有部分是保留的0是不可以使用的
- 在cisco设备上vlan信息是保存在vlan数据库中的在NVRAM的vlan.dat文件中并不在startup-config和running-config中所以show run是看不到对vlan操作的命令的
## 3. Trunk
如果在交换机级联的情况下(下面有介绍)各自VLAN的数据在交换机之间也需要传递。
![image-20200412140255963](10.交换原理/image-20200412140255963.png)
可以多台交换机之间将不同的VLAN拿线连起来这样就可以实现不同交换机相同VLAN可以通信但是不同VLAN又是隔离的。
不过这么做在VLAN多了之后比如一些大型公司VLAN就有几十个上百个之多这样的话接口都不够就需要有新的解决方案。
Trunk接口是被定义了用来区分不同VLAN流量的。
![image-20200412140705738](10.交换原理/image-20200412140705738.png)
- Trunk接口不能属于任何VLAN
- Trunk接口会将流量按照802.1Q标准重新封装数据链路层在类型字段后插入VLAN标签相关信息标识这个流量
- Trunk发出去的时候会加上VLAN信息接收的时候会去除信息并且把流量放到对应的VLAN中
- 如果多台交换机trunk级联要注意所有的交换机都必须要创建相同的VLAN号即使某台交换机没有任何接口属于这个VLAN也必须创建不然这个VLAN的流量经过这台交换机的时候就无法识别。
![image-20200412150537538](10.交换原理/image-20200412150537538.png)
![image-20200412141031615](10.交换原理/image-20200412141031615.png)
首先不去配置交换机只是配置PC的IP地址发现其实是会有跨网段访问的风险的。
![image-20200412141457560](10.交换原理/image-20200412141457560.png)
我们开始配置VLAN
```
Sw1(config)#vlan 10
Sw1(config-vlan)#name oppo
Sw1(config-vlan)#vlan 20
Sw1(config-vlan)#name vivo
Sw1(config-vlan)#int e0/1
Sw1(config-if)#sw ac vl 10
Sw1(config-if)#int e0/3
Sw1(config-if)#sw ac vl 20
```
```
Sw2(config)#vlan 10
Sw2(config-vlan)#name oppo
Sw2(config-vlan)#vlan 20
Sw2(config-vlan)#name vivo
Sw2(config-vlan)#int e0/1
Sw2(config-if)#sw ac vl 10
Sw2(config-if)#int e0/3
Sw2(config-if)#sw ac vl 20
```
配置接口支持trunk
```
interface Ethernet0/2
switchport trunk encapsulation dot1q
switchport mode trunk
```
查看trunk是否启动
```
Sw2#show interfaces trunk
Port Mode Encapsulation Status Native vlan
Et0/2 on 802.1q trunking 1
Port Vlans allowed on trunk
Et0/2 1-4094
Port Vlans allowed and active in management domain
Et0/2 1,10,20
Port Vlans in spanning tree forwarding state and not pruned
Et0/2 1,10,20
```
![image-20200412142212253](10.交换原理/image-20200412142212253.png)
### 3.1 本帧VLAN
- 修改数据链路层封装,需要破坏原始数据报头,加入新的报头,并且还需要重新计算帧尾校验序列(FCS),比较消耗性能
- 可以交换机约定好特定的VLAN大家都不打标签这个就是本帧默认本帧VLAN是vlan1
- Trunk接口如果收到一个没打802.1Q标记的流量就认为这个是本帧VLAN的流量
- PC接口如果收到一个打上802.1Q标记的流量,会认为数据出错,然后丢包
- 本帧VLAN如果配置错误可能导致流量在错误VLAN出现最新的Cisco交换机固件会发现这个问题然后将接口切断防止发生串错VLAN情况会将接口设置为`Inconsistent`状态
```
interface Ethernet0/2
switchport trunk native vlan 10
```
抓包发现没有802.1Q的信息了
## 4. 交换机级联
当交换机接口不够,或者是部署位置的需要,比如两栋楼不可能都接在同一台交换机上,这个时候就需要将多台交换机连接起来,一台接一台的做法称之为级联。
![image-20200412135443783](10.交换原理/image-20200412135443783.png)
默认情况下
1. win_3发出了一个数据Sw1记录下Win_3的MAC地址和e0/1接口的关系然后泛洪从e0/2发出。
2. Sw2收到了之后记录下Win_3的MAC地址和e0/2接口的对应关系然后泛洪从e0/1发出。
3. Win_4收到了Win_3发来的数据开始回复发送给Sw2
4. Sw2收到了之后记录下来Win_4和e0/1的对应关系然后查找MAC表准确的从e0/2转发给Win_3。
5. Sw1收到了之后记录下Win_4和e0/1的对应关系然后查找MAC表准确的从e0/1转发给Win_3。
下面是MAC地址表
```
SW1#show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 5000.0003.0000 DYNAMIC Et0/1
1 5000.0004.0000 DYNAMIC Et0/2
1 aabb.cc00.2020 DYNAMIC Et0/2
Total Mac Addresses for this criterion: 3
SW2#show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 5000.0003.0000 DYNAMIC Et0/2
1 5000.0004.0000 DYNAMIC Et0/1
1 aabb.cc00.1020 DYNAMIC Et0/2
Total Mac Addresses for this criterion: 3
```
级联可能会带来带宽瓶颈的问题