网络安全笔记(Twenty Days)单臂路由or三层交换

发布时间 2023-05-08 16:16:13作者: supernova_dark_horse

Twenty Days

单臂路由or三层交换

一、单臂路由(router-on-a-stick)

1、目的
  • 实现不同vlan之间的通信

2、概述
  • 在路由器的一个接口上通过配置 子接口 (或"逻辑接口",并不存在真正物理接口)的方式,实现原来相互隔离的不同VLAN( 虚拟局域网 )之间的互联互通

  • 在路由器上划分子接口作为不同vlan的网关,每一个子接口作为一个vlan的网关,需要做vlan封装

3、链路类型
  • 交换机连接主机的端口:access链路

  • 交换机连接路由器的端口:Trunk链路

4、工作原理

以上图为例,PC0需要发送数据给PC1,发现PC1和自己不是同一个网段,这时将数据交给自己的网关,网关为路由器0的F0/0.1子接口,通过ARP协议获取自己网关的MAC地址,数据会通过交换机进行转发,到了交换机之后,会为收到的数据打上vlan标签10,将数据传到路由器0,路由器0收到数据,集合路由器的工作原理,查看目的IP地址,找到对应接口,再进行标签转换,再发送到交换机,这时交换机收到的就是打上vlan20标签数据,根据交换的mac地址表的对应关系直接转发

 

二、三层交换

1、目的
  • 通过在交换机上划分vlan,想要实现不同vlan间的通信,这时候就可以使用三层交换来解决

2、概述
  • 本质上就是“带有路由功能的(二层)交换机”。路由属于OSI参考模型中第三层网络层功能,因此被称为“三层交换机”。

3、工作原理(一次路由,多次交换)
  • 当三层设备接收到一个数据帧,会拆除源数据帧,重新封装新的源MAC地址和目标MAC地址,并且因为帧头部的信息发生变化,最后的帧校验CRC也应当随之改变

 

  • 在这个数据流中的多个数据包,其中只有第一个数据包是由三层交换的三层引擎来处理的,处理方式是软件方式,与路由器相同,三层引擎获取了新的2层封装信息后,路由这个数据包,从数据流的第二个开始,交换ASIC从3层引擎中获悉2层重写信息在硬件中创建一个MLS条目,负责重写和转发数据流中的后续数据包

 

 

三、基于CEF的三层交换(MLS)

1、概述
  • CEF(Cisco Express Forwarding,Cisco特快交换)技术是思科公司推出的一种全新的路由交换方案,它具有良好的交换性能,增强的交换体系结构和极高的包转发速率

  • 与传统的MLS不同的是,CEF预先根据路由表(ip地址与接口对应关系)学习路由信息后,直接存储在FIB(转发信息库)。CEF预先根据ARP表(ip地址与MAC地址对应关系)生成邻接关系表,直接由硬件进行转发,传统的MLS至少需要软件查询一次路由表后,建立转发条目,才能使用硬件进行转发

  • 维护了两张表

    • 路由表FIB(转发信息库):IP 地址与VLAN ID对应关系

    • 邻接关系表:邻接主机和交换机MAC地址的对应关系

2、传统的多层交换与基于 CEF 的多层交换的区别
  • 传统的交换:快速交换;一次路由,多次交换。根据数据流概念(一定时间内,相同的源目IP,同一个入接口,被视为一个数据流),每个数据流的第一个数据包使用原始的数据交换(查两次表,路由表和ARP表),该过程完成后会将转发的过程信息记录在cache(相当于缓存)中,包括出接口、封装的MAC地址;该数据流的后续数据将基于这个cache来转发数据包。数据流转发完成后该cache会被超时刷新

  • 基于CEF的交换:无需路由,直接交换。FIB表(转发信息数据库),基于路由表生成,解决了路由条目的递归;ADJ表(邻接表),基于ARP表生成,之后路由器结合FIB表和ADJ表直接转换为二进制表,生成转发列表(出接口、新的二层封装),这些表都是提前生成的。当流量进入路由器时,基于目标IP直接查询转发列表进行转发

3、工作原理
  • 第三层交换工作在OSI七层网络模型中的第三层即网络层,是利用第三层协议中的IP包的包头信息来对后续数据业务流进行标记,具有同一标记的业务流的后续报文被交换到第二层数据链路层 ,从而打通源IP地址和目的IP地址之间的一 条通路。这条通路经过第二层链路层。有了这条通路,三层交换机就没有必要每次将接收到的数据包进行拆包来判断路由,而是直接将数据包进行转发,将数据流进行交换

  • 当一个三层数据包进入三层交换机以后,会查看FIB表(路由表),即“一次路由”,查找出接口和下一跳,之后会找到下一跳的MAC地址,进行二层封装的变换,和三层设备即路由器的本质是一样的(三层的本质:是把一个子网的MAC迁移到另外一个子网,不同子网的MAC不可能会出现在同一个包的源目MAC上,把原有的二层封装去掉,封装上新的MAC地址,源是出接口的MAC地址,目的是下一跳的MAC地址,此时新的二层封装形成,数据包转发出设备),完成一次“路由器”的工作

  • 如果找不到下一跳的MAC地址,进行ARP洪范,再找不到就丢弃。在做二层封装的时候,因为有目标MAC的存在,所以也可以说是三层的目标IP最后会映射到目标MAC上,此时会形成一个目标IP和封装目标MAC的映射,而三层交换机具有二层交换机的功能,则此时就形成了三层到二层的一个映射,转发一定是要找到接口,通过IP找到MAC,通过MAC找到对应出接口,这就相当于形成了一个IP的MAC表,那么三层IP进来以后就直接会找到对应的出接口,数据包就不需要再查看数据表,只需要变换一次二层封装就可以了

 

 

四、扩展 虚接口(virtual interface)

  • 三层交换机具备路由功能,所以两个vlan之间可以相互访问,每一个vlan虚接口就是网段的网关

  • 为什么引入虚接口?

    • 接口(interface)代表了实际的物理信号,是静态的,而验证平台需要动态的连接设计,比如一个driver类要连接DUT的不同接口,但你肯定不希望每个接口都写一个对应的driver类和DUT接口连接,而是通过例化传参的方式连接DUT。因此system verilog提出了一种虚接口(virtual interface)的概念,虚接口是物理接口的句柄,在仿真平台运行时,再决定要传入哪一个物理接口的句柄,并产生相应激励。因此,虚接口将物理DUT和仿真验证平台分开,将硬件和软件分开,把软件平台的激励送给了硬件。(虚接口是唯一一个桥接动态对象和静态模块、接口的一种机制:引自绿皮书)

 

五、配置命令(供参考)

# 交换机配置
en
conf t
vlan 10
vlan 20
exit
int f0/1
sw acc vlan 10
int f0/2
sw acc vlan 20
int f0/3
sw mo trunk

# 路由器配置
en
conf t
int f0/0.1
encapsulation dot1q 10
ip add 192.168.10.254 255.255.255.0
exit
int f0/0.2
encapsulation dot1q 20
ip add 192.168.20.254 255.255.255.0
exit
int f0/0
no shutdown
exit
ip dhcp pool vlan10
network 192.168.10.0 255.255.255.0
default-router 192.168.10.254
exit
ip dhcp pool vlan20
network 192.168.20.0 255.255.255.0
default-router 192.168.20.254
exit