
这是软考系列的第二篇,此文将详细说明交换机的工作原理,ACL等概念。这篇搞懂了,对于局域网的了解将有很大的帮助。
access、trunk和hybrid
access、trunk和hybrid的区别是什么?pvid、vid、tagged、untagged到底什么时候用?这篇将会全部讲明。数据帧到底怎么走?
这三者的工作原理可参考本站的文章:交换机接口类型及转发原理,此文比较详细,再次不再赘述。本文将的侧重点为搞清楚这三者的关系和数据桢时ARP和IP的工作原理。
access和trunk是特殊的hybrid,hybrid 包含access和trunk。认识到这点很重要。当要了解这个问题时,需要知道pvid、vid、tagged、untagged的作用是什么。
需牢记:终端设备如PC、打印机等都只能发出和接收到无标签的数据帧,而交换机内部转发是根据vlan标签进行工作。
1)vid:vlanID,当接口归到某个vlan时,VID是VLAN的标识符,代表这个数据包的“身份”,本身不执行动作;
2)pvid:port VID,端口VIP,当终端发出无标签的数据帧,进过配置了pvid的端口,pvid会打上所配置的vlan,只在无标签数据帧进入配置了pvid的接口时进行工作;
3)tagged 是保持标签的传输;
4)untagged 是剥离vlan标签,当在接口中配置untagged时,即剥离了vlan标签,一般作用于与终端对接的端口;
了解上述的四个概念后,就可以理解为什么access和trunk是变种的hybrid了.
1)当在一个接口配置port access vlan 100时,其实等于在接口配置了:
[sw1-g0/0/1]port hybrid pvid vlan 100 //此句的作用是将终端发出来的无标签数据帧打上vlan100的标签
[sw1-g0/0/1]port hybrid untagged vlan 100 //当vlan100标签进入接口要到终端设备时,剥离vlan100标签
2)当在一个接口配置port trunk allow-pass vlan 100 200 300 ,其实等于在接口配置了:
[sw1-g0/0/1]port hybrid tagged vlan 100 200 300 //此句作用是保持vlan 100 200 300的vlanid继续转发
而对于TRUNK类型的端口,建议根据实际情况设置其PVID的值,以便在转发不带VLAN标签的数据包时使用默认的VLAN ID。一般是在门禁机中或者一些特殊终端中会使用到。
[sw1-g0/0/1]port hybrid tagged vlan 100 200 300
[sw1-g0/0/1]port hybrid untagged vlan 100
数据帧通讯过程
这是整个本篇的重中之重,越基础的东西越多人忽视。但这块搞明白后,对后续学习、考证和工作有相当大的作用。当设备之间需要通讯时,需使用ARP和IP协议,二层通讯时,需使用ARP收集设备mac地址和IP地址对应关系,收集后封装为IP协议,再进行转发。ARP的mac地址根据接口或vlanif的mac地址进行变化,源IP和目的IP也会进行变化;而IP协议除mac地址外,源IP和目的IP保持不变。
数据帧转发时分为两种情况:纯二层和跨三层。以下两个例子,均是已所有设备第一次接入角度进行编写。
纯二层通讯
如下图所示,当两台设备在同一vlan和网段,此时PC1需要在PC2进行通讯,因为二层是靠ARP和IP进行通讯。但PC1、交换机接口1,2和PC2各自都不知道对方的mac地址和IP地址,那么就要用到ARP收集,收集完后封装IP协议进行通讯。

阶段一:PC1 检查与PC2是否同网段,PC1判断:
自己IP:192.168.1.10
目标IP:192.168.1.20
子网掩码:255.255.255.0
同网段不需要网关,直接找PC2
查自己ARP表:192.168.1.20 有记录吗?->没有->发ARP广播
阶段二:PC1 发 ARP 广播
源MAC: AA
目的MAC: FF:FF:FF:FF:FF:FF
源IP: 192.168.1.10
目的IP: 192.168.1.20
交换机收到后:
学习:AA → Port1 写入MAC表
目的MAC是广播 → 洪泛所有端口
PC2收到
交换机MAC表:AA → Port1
阶段三:PC2 回复 ARP,PC2收到,目的IP是自己,回复:
源MAC: BB
目的MAC: AA
源IP: 192.168.1.20
目的IP: 192.168.1.10
交换机收到:
学习:BB → Port2 写入MAC表
查MAC表:AA → Port1 → 单播转发给PC1
PC1收到并学习:192.168.1.20 = BB → 写入ARP表
此时各设备表项:
交换机MAC表:
AA → Port1
BB → Port2
PC1 ARP表:
192.168.1.20 = BB ✓
PC2 ARP表:
192.168.1.10 = AA ✓
阶段四:PC1 发 IP 报文给 PC2
PC1 构造数据帧:
源MAC: AA
目的MAC: BB ← 直接填PC2的MAC,不经过网关
源IP: 192.168.1.10
目的IP: 192.168.1.20
交换机收到:
查MAC表:BB → Port2 → 单播转发
原封不动,不修改任何内容
PC2收到:
目的MAC = BB,是自己 → 收下
目的IP = 192.168.1.20,是自己 → 交给上层应用
总过程如下所示:
阶段 类型 源MAC 目的MAC 源IP 目的IP
PC1问PC2的MAC ARP AA FF:FF:FF:FF:FF:FF 192.168.1.10 192.168.1.20
PC2回复PC1 ARP BB AA 192.168.1.20 192.168.1.10
PC1发数据给PC2 IP报文 AA BB 192.168.1.10 192.168.1.20
跨三层通讯
如下图所示,当两台设备不在同一个vlan和网段,此时PC1需要在PC2进行通讯。因为跨三层需要网关、ARP和IP进行通讯。

阶段1:PC-A 发 ARP 广播,询问vlanif10网关MAC
源MAC: AA
目的MAC: FF:FF:FF:FF:FF:FF
源IP: 192.168.10.10
目的IP: 192.168.10.1
阶段2:交换机回复 ARP 给 PC-A
源MAC: GW
目的MAC: AA
源IP: 192.168.10.1
目的IP: 192.168.10.10
此时 PC-A 和交换机 ARP 表互相记录完毕
阶段3:PC-A 发数据给交换机(真正的数据传输)
源MAC: AA
目的MAC: GW
源IP: 192.168.10.10
目的IP: 192.168.20.10
阶段4:交换机向PC-B发 ARP 广播,询问PC-B的MAC
源MAC: RR
目的MAC: FF:FF:FF:FF:FF:FF
源IP: 192.168.20.1
目的IP: 192.168.20.10
阶段5:PC-B 回复 ARP 给交换机
源MAC: BB
目的MAC: RR
源IP: 192.168.20.10
目的IP: 192.168.20.1
此时交换机PC-B 的 ARP 表互相记录完毕
阶段6:交换机转发数据给 PC-B(真正的数据传输)
源MAC: RR
目的MAC: BB
源IP: 192.168.10.10
目的IP: 192.168.20.10
总过程如下所示:
阶段 类型 源MAC 目的MAC 源IP 目的IP
1 PC-A问网关MAC ARP AA FF:FF:FF:FF:FF:FF 192.168.10.10 192.168.10.1
2 交换机回复PC-A ARP GW AA 192.168.10.1 192.168.10.10
3 PC-A发数据 IP报文 AA GW 192.168.10.10 192.168.20.10
4 交换机问PC-BMAC ARP RR FF:FF:FF:FF:FF:FF 192.168.20.1 192.168.20.10
5 PC-B回复交换机 ARP BB RR 192.168.20.10 192.168.20.1
6 交换机发数据给PC-B IP报文 RR BB 192.168.10.10 192.168.20.10
关键规律
ARP 报文:源IP和目的IP是发起方和被询问方自己的接口IP,每次都不同
IP 报文:源IP和目的IP始终是 PC-A 和 PC-B,全程不变
MAC 地址:每一段都在变,只在当前这一跳有意义
PC-A、PC-B和路由器都在各自的APR表时,从PC-B给PC-A回包时过程会怎么样?
PC-B 回包给 PC-A 的过程,由于 ARP 表都已经记录好了,不需要再发任何 ARP 广播,直接通信。
阶段1:PC-B 发数据给路由器
PC-B 判断:目标 192.168.10.10 不在我的网段,发给我的网关(192.168.20.1)
PC-B 查自己的 ARP 表:192.168.20.1 = RR ✓ 直接用
源MAC: BB
目的MAC: RR
源IP: 192.168.20.10
目的IP: 192.168.10.10
阶段2:路由器收到,转发给 PC-A,路由器收到后:
目的MAC 是 RR,是自己 → 收下,剥掉帧头
查路由表:192.168.10.10 从左口(G0)出
查 ARP 表:192.168.10.10 = AA ✓ 直接用,不需要再发 ARP
重新封装发出
源MAC: GW
目的MAC: AA
源IP: 192.168.20.10
目的IP: 192.168.10.10
阶段3:PC-A 收到
目的MAC 是 AA,是自己 → 收下
目的IP 是 192.168.10.10,是自己 → 交给上层应用处理
总过程如下所示:
阶段 类型 源MAC 目的MAC 源IP 目的IP
1 PC-B发数据 IP报文 BB RR 192.168.20.10 192.168.10.10
2 路由器转发给PC-A IP报文 GW AA 192.168.20.10 192.168.10.10
ACL的介绍及配置说明
关于ACL,之前写过一篇:网络服务与应用,但之前写的还是有点浅。没有写出详细的过程及作用原理。所以此次单摘出来进行详细的系统性的说明。
ACL即访问控制列表,作用为控制流量是否放行。一般作用于vlan和接口中。配置根据需要放通的网络进行配置:
1)分为基本ACL,编码2000-2999,作用为控制网段流量;高级ACL编码3000-3999,除控制网段流量,还可控制协议等;(还有其他ACL类型就不展开说明)
2)写rule,建议rule以5的倍数进行填写,如rule 5、rule 10。这样做可以随时插入需要的rule。rule 编写时需按照从严到松,从小到大写,因为ACL将从上到下匹配,匹配中则执行对应permit或deny,思科设备无匹配中的执行会在末尾隐含的 deny any,即默认拒绝,华为和H3C设备无匹配中的会执行默认放行;
3)将写好的ACL作用于vlan或接口,分清楚inbound或outbound;
4)ACL当二层和三层都有ACL时,流量会一一匹配。也就是说当流量经过时,有ACL就会进行匹配从二层匹配到三层,如果流量被匹配,则执行对应动作。
inbound和outbound说明及举例
上面只是配置方式和思路,但最让我纠结的,什么时候用inbound,什么时候用outbound。但了解了原理后,其实后续使用就心里有底而不是乱用瞎试。
1)inbound:在这个接口或者vlan下的用户发出的所有流量,进入接口或者vlan前,都经过rule一层层检查。符合放行,不符合阻拦,也就是目标vlan或接口也就是能接发出什么数据帧;
2)outbound:所有流量到某个接口或者vlan后,需判断是否放行时,会按照outbound的条件进行匹配,从而实现通讯,也就是目标vlan或接口也就是能接收到什么数据帧。
具体inbound和outbound的工作机制如下图所示:
可能这样说还是有点抽象,用两个例子即可解释说明:
例子1--inbound应用
当两方出现互相deny时,需两端都放开后,双方才可正常通讯。单方放开无效。因为正常通讯的前提是正常接收和发送数据帧。ACL挂在inbound方向,A→B的流量在VLAN A的inbound上检查,B→A的回包在VLAN B的inbound上检查,是两条独立的检查链路,所以必须两端都permit才能双向通。
此时下方的vlan 170和vlan 180都无法ping通对方。为什么?因为会被各自的rule 1000所匹配中,前往对方的流量被deny。
xx vlan 170 ip :10.1.170.1/24;
[core-acl-ipv4-adv-xx-isolation]dis this
#
acl advanced name xx-isolation
rule 100 permit icmp destination 10.1.170.1 0
rule 1000 deny ip destination 10.1.0.0 0.0.255.255
[core]int vlan 170
[core-Vlan-interface170]dis this
#
interface Vlan-interface170
ip address 10.1.170.1 255.255.255.0
ip forward-broadcast
packet-filter name xx-isolation inbound
yy vlan 180 ip :10.1.180.1/24;
[core]acl name yy-isolation
[core-8.1-acl-ipv4-adv-yy-isolation]dis this
#
acl advanced name yy-isolation
rule 100 permit icmp destination 10.1.180.1 0
rule 1000 deny ip destination 10.1.0.0 0.0.255.255
#
return
[core]int vlan 180
[core-Vlan-interface180]dis this
#
interface Vlan-interface180
ip address 10.1.180.1 255.255.255.0
ip forward-broadcast
packet-filter name yy-isolation inbound
其中:
1)rule 1000:规则编号。
2)deny:动作是拒绝/丢弃。
3)ip:网络协议。这里的 ip 指的是所有基于 IP 协议的流量,也就是说它是一个“全包套餐”,不仅包括了 ping(ICMP 协议),还包括了网页浏览(HTTP/HTTPS)、文件传输(FTP)、远程连接(SSH/Telnet)等所有三层流量。
4)destination:表示后面配的是目的地址(即流量去往哪里)。
rule 1000 deny ip destination 10.1.0.0 0.0.255.255
[规则编号] [执行动作] [协议类型] [目的方向] [目标网段与通配符掩码]
合起来的意思就是:只要目的 IP 是以 10.1.x.x 开头的流量(换算成 CIDR 格式就是 10.1.0.0/16),全都会被这条规则抓出来。也就是说rule 1000 inbound的意思是:10.1.170.0 无法前往10.1.0.0/16网段,而不是其他的无法进来。
如果有需要vlan 170的10.1.170.25/24和vlan 180的10.1.180.25/24互通怎么处理?此时需在ACL中添加下方的两句:
[core-acl-ipv4-adv-xx-isolation]dis this
#
acl advanced name xx-isolation
rule 85 permit ip source 10.1.170.25 0 destination 10.1.180.25 0 //添加此句
rule 100 permit icmp destination 10.1.170.1 0
rule 1000 deny ip destination 10.1.0.0 0.0.255.255
[core-acl-ipv4-adv-yy-isolation]dis this
#
acl advanced name yy-isolation
rule 85 permit ip source 10.1.180.25 0 destination 10.1.170.25 0 //添加此句
rule 100 permit icmp destination 10.1.180.1 0
rule 1000 deny ip destination 10.1.0.0 0.0.255.255
此时10.1.170.25和10.1.180.25再次互相通讯时则是正常状态,因为ACL是从上到下进行匹配,当被匹配中后,则会进行相应动作,10.1.170.25 ping 10.1.180.25时,匹配中各自的rule 85,则会继续进行。而其他10.1.170.x和10.1.180.y依旧会被rule 1000拦截后deny。
例子2--outbound应用
研发 VLAN10 (10.1.10.0/24) ──┐
财务 VLAN20 (10.1.20.0/24) ──┼── 三层交换机 ── 服务器 VLAN100 (10.1.100.0/24)
访客 VLAN30 (10.1.30.0/24) ──┘
需求:服务器 VLAN100 只允许研发访问,财务和访客不能访问。
有两种做法:
1)需要在每个 VLAN 的接口上分别应用,逻辑分散,管理成本更高;
2)服务器的接口或VLAN上写一个outbound,说明只要是研发IP地址可以通过接口或vlan前往服务器。而其他的我拒绝接收。那么只需要写1条。
可在服务器网段vlan中写入:
[core]acl advanced name server
[core-acl-ipv4-adv-server]rule 5 permit ip source 10.1.10.0 0.0.0.255
[core-acl-ipv4-adv-server]rule 1000 deny ip destination 10.1.0.0 0.0.255.255
[core]int vlan 100
[core-Vlan-interface100]packet-filter name server outbound
本文由 yorickbao 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。