交换机的二三层接口、PVID及VLANIF介绍

二层接口,可以简单理解为只具备二层交换能力的接口,例如二层交换机上的物理接口,或者三层交换机的物理接口,一般情况下,这些接口缺省时都可认为是二层模式。

  • 二层接口不能直接配置IP地址,并且不能直接终结广播帧。二层接口收到广播帧后,会将其从同属一个广播域(VLAN)的所有其他接口泛洪出去。
  • 二层接口有几种类型:access、trunk、hybrid。

三层接口维护IP地址与MAC地址。

  • 三层接口可以终结广播帧,三层接口在收到广播帧后,不会进行泛洪处理。
  • 三层接口有物理形态的,也有逻辑形态的,典型的物理接口如路由器的三层物理端口;逻辑接口如VLANIF,以及以太网子接口,例如GE0/0/1.1 等等。VLANIF与其关联的VLAN的ID对应(例如VLANIF10对应VLAN10,VLANIF10作为一个三层逻辑接口,可以与同属于VLAN10的设备直接进行二层通信),而以太网子接口,通常也会绑定相应的VLAN-ID,从而与相应的VLAN对接。这两种典型的三层接口均可以直接配置IP地址。

二层接口在收到单播帧后,会在FDB表中查询该数据帧的目的MAC地址,然后依据表项指引进行转发,如果没有任何表项匹配,则进行泛洪。三层接口在收到单播帧后,首先判断其目的MAC地址是否为本地MAC地址,如果是,则将数据帧解封装,并解析出报文目的IP地址,然后进行路由查询及转发。所以二层接口与三层接口在数据处理上也存在差异。

在以太网二层交换网络里,VLAN是一个非常基础的东西。每个VLAN都是一个逻辑的广播域,每个VLAN都使用对应的ID进行标识,这是VLAN-ID

  • 接口缺省VLAN标识,即PVID(Port Default VLAN ID),指的是二层接口上的缺省VLAN-ID(每个二层接口上有且只有一个VLAN-ID作为PVID),也就是说,PVID必定是某一个具体VLAN的VLAN-ID。PVID的作用是,当这个接口收到了流量,并且该流量不携带任何802.1Q Tag(VLAN-ID信息),该接口便认为这些流量属于PVID对应的VLAN。当然,PVID还会影响接口发送数据帧,这里不再赘述。缺省情况下,所有接口的PVID均为VLAN1。

  • 对于Access接口,缺省VLAN就是它允许通过的VLAN,修改接口允许通过的VLAN即可更改接口的缺省VLAN。

  • 对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN,修改接口允许通过的VLAN不会更改接口的缺省VLAN,即变更接口的缺省VLAN(PVID)需要使用特定的命令。

三层接口未必一定对应VLAN-ID,例如路由器的三层物理接口,就不维护关于VLAN-ID的相关信息,当然,该接口也无法识别携带VLAN-ID的数据帧,除非你基于这个物理接口创建了逻辑子接口,并通过该子接口与相应的VLAN对接。

在三层交换机上,每个VLAN都有对应的VLANIF,VLANIF指的是VLAN对应的逻辑三层接口,这个三层接口在VLAN被创建后可以直接赋予IP地址,具备路由转发能力。一个VLAN对应一个VLANIF,VLAN与VLANIF的标识相同。

在 Java 中,我们可以使用一些开源的分页插件来实现分页功能,比如 MyBatis、Hibernate 等。这里以 MyBatis 分页插件为例,介绍如何实现分页功能: 1. 在 Maven 中引入 MyBatis 分页插件的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> ``` 2. 在 MyBatis 配置文件中配置分页插件: ```xml <!-- 配置分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 分页参数的合理化配置 --> <property name="reasonable" value="true"/> </plugin> </plugins> ``` 3. 在 Java 代码中使用分页插件: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; // 查询第 2 页的数据,每页 10 条 int pageNum = 2; int pageSize = 10; PageHelper.startPage(pageNum, pageSize); List<Data> dataList = dataMapper.selectData(); // 将查询结果封装为 PageInfo 对象 PageInfo<Data> pageInfo = new PageInfo<>(dataList); // 获取分页信息 int totalPages = pageInfo.getPages(); // 总页数 int totalData = pageInfo.getTotal(); // 总记录数 int currentPage = pageInfo.getPageNum(); // 当前页码 List<Data> pageData = pageInfo.getList(); // 当前页的数据 ``` 上面的代码中,首先使用 PageHelper.startPage() 方法指定要查询的页码和每页数据量。然后使用 MyBatis 进行数据查询。最后,将查询结果封装为 PageInfo 对象,通过 PageInfo 对象获取分页信息和当前页的数据。 需要注意的是,MyBatis 分页插件的使用方法可能会因版本不同而略有不同,具体使用方式可以参考官方文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值