单臂路由Trunk详解

2024-05-01 04:58
文章标签 详解 路由 trunk 单臂

本文主要是介绍单臂路由Trunk详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单臂路由作为CCNA的重点之一,有着非常重要的地位。这几年随着设备的更新,已经不太用二层交换和路由器所组成的单臂路由了,三层交换机配合二层交换机的拓扑,已经成为主流,这里先说道这里,回到主题

看拓扑:


PC1和PC2属于不同vlan,最终需要PC1和PC2能互通。

Vlan配置和IP的配置我这里省略了,不懂的可以看一下之前的博客。

我这里贴一下预配置检查

SW1#sh vlan-s bri

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/0, Fa0/3, Fa0/4, Fa0/5
                                                Fa0/6, Fa0/7, Fa0/8, Fa0/9
                                                Fa0/10, Fa0/11, Fa0/12, Fa0/13
                                                Fa0/14, Fa0/15
10   VLAN0010                         active    Fa0/1
20   VLAN0020                         active    Fa0/2
1002 fddi-default                     active    
1003 token-ring-default               active    
1004 fddinet-default                  active    
1005 trnet-default                    active  
vlan配完,测试PC1与PC2不通,这个肯定是不通的,PC的网关也没有,就算没有Vlan也通不了。。。。。

看单臂路由配置:

思路:通过R1交换功能,来实现路由

1、SW1需要把两个vlan的信息传输出去,那就是承载不同vlan的信息,自然需要Trunk

SW1(config)#int f0/0
SW1(config-if)#sw mo tr
*Mar  1 00:47:26.587: %DTP-5-TRUNKPORTON: Port Fa0/0 has become dot1q trunk
SW1(config-if)#sw tr enc dot
SW1(config-if)#no sh

2、R1接口配置,通过子接口配置单臂路由

要起子接口,父接口必须先开启

R1(config)#int e0/0
R1(config-if)#no sh
//vlan10 对应e0/0.10,这个.10只是个名字
R1(config-if)#int e0/0.10
R1(config-subif)#ip add 1.1.1.100 255.255.255.0
配置ip报错,查看以下报错信息,他告诉我必须先配置封装协议,才能实现IP Routing功能。
% Configuring IP routing on a LAN subinterface is only allowed if that
subinterface is already configured as part of an IEEE 802.10, IEEE 802.1Q,
or ISL vLAN.

配置封装

R1(config-subif)#encapsulation dot1Q ?
  <1-4094>  IEEE 802.1Q VLAN ID
后面还需要跟所对应的Vlan ID
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip add 1.1.1.100 255.255.255.0
R1(config-subif)#no sh
R1(config-subif)#exi
第一个子接口配置完成,接下来第二个

R1(config)#int e0/0.20
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip add 2.2.2.100 255.255.255.0
R1(config-subif)#no sh
查看以下R1的路由表
R1#sh ip rou
Gateway of last resort is not set

     1.0.0.0/24 is subnetted, 1 subnets
C       1.1.1.0 is directly connected, Ethernet0/0.10
     2.0.0.0/24 is subnetted, 1 subnets
C       2.2.2.0 is directly connected, Ethernet0/0.20
可以发现,子接口的网段已经被添加进了路由表,然后给PC1和2配置网关。

-------------------------------------------------------------------------------------------------------------------

好了,这时候你就会发现,PC1和PC2能互通了。网上的其他教程基本也就到这里结束了,嘿嘿,我告诉你,这里才只是开始。有没有想过这样一个问题,PC1是属于VLan10,PC2是属于vlan20,路由器只是简单的转发么?不是说不同Vlan,会有TAG么?他到底是怎么做到的呢?我来简单的证明一下,工具自然是wireshark。我要抓SW1 f0/0《==》R1 e0/0这条线路。

实验步骤和思路:从PC1pingPC2,PC2会收到ICMP请求,PC1会收到ICMP回复。(贴图不是很方便,我就把步骤和结果写的详细一下)

我从PC1就发一个ICMP包给PC2,从抓包的结果上看,可以看到两条从1.1.1.1发送给2.2.2.2的ICMP request,(这个应该可以理解,PC1先发给R1,R1再发给PC2,所有请求有两条),发现再原地址后面添加8个字节802.1Q virtual lan数据,里面有两个字节是用来表示VlanID的,第一个报文显示的是10(从PC1发送给R1),第二个显示的是20(从R1发送给PC2),从这里我们可以发现,R1收到从PC1发送的数据报文已经,会解封装,然后再重新封装发出,他会对这个vlan的值进行修改。我假设一下过程,R1收到数据包,拆掉vlan TAG标记,然后查询到路由,因为路由是从子接口学习到的,而子接口已经绑定了vlan,(不明白的回顾一下之前的配置)所以会重新打上vlan TAG标记,发送出去。

可以有些细节讲的不太对,大致应该就是这样。

-----------------------------------------------------------------------------------------------------------------

单臂路由最常见的就在这里了,但是接下来我还要讲第二种。我先配,配玩再说为什么会出现第二种,这里需要把R1改成一个三层交换机,起名叫做SW2


其他配置都不动,我们单单配置SW2

1、讲f0/0配置为Trunk

SW2(config)#int f0/0
SW2(config-if)#switchport trunk encapsulation dot
SW2(config-if)#no sh
SW2(config-if)#end

配置完查看一下

SW2#sh int tru

Port      Mode         Encapsulation  Status        Native vlan
Fa0/0     on           802.1q         trunking      1

Port      Vlans allowed on trunk
Fa0/0     1-1005

Port      Vlans allowed and active in management domain
Fa0/0     1

Port      Vlans in spanning tree forwarding state and not pruned
Fa0/0     1

2、添加Vlan

SW2#vlan da
SW2(vlan)#vlan 10
VLAN 10 added:
    Name: VLAN0010
SW2(vlan)#vlan 20
VLAN 20 added:
    Name: VLAN0020
SW2(vlan)#exi  
APPLY completed.
Exiting....

给Vlan配置IP,作为该Vlan所有终端的网关

SW2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
SW2(config)#int vlan 10
SW2(config-if)#ip add 1.1.1.100 255.255.255.0
SW2(config-if)#no sh

SW2(config-if)#int vlan 20
SW2(config-if)#ip add 2.2.2.100 255.255.255.0
SW2(config-if)#no sh
SW2(config-if)#end

----------------------------------------------------------------------------------------------------------------

注意:

1、可以发现我这里并没有创建Vlan,我只是int vlan xx,再某些机器上,你输入这条命令的时候他会自动为你创建vlan,但是并不是全部,而且有的机器根本就不支持(包括通过vlan xx创建vlan)。

2、我是用的GNS3做的第二个实验,我就发现一个BUG,你可以看出来我的机器是支持int vlan这条命令的,但是实际上查看vlan的时候,你是看不到这几个vlan的,所以我建议,还是先手动创建好vlan,做完最后再检查一下,以防万一。

*如果你忘记了创建vlan但是上面的命令你都成功配完了,我可以提供一个排查思路,去检查接口,sh ip int bri,去看vlan的接口你会发现,status是up但是protocol是down,等你创建好vlan,protocol就up了。

------------------------------------------------------------------------------------------------------------------

vlan配置完毕,查看一下路由表,如果显示没有路由只有ARP table,记得开启路由功能
SW2#sh ip rout
Gateway of last resort is not set

     1.0.0.0/24 is subnetted, 1 subnets
C       1.1.1.0 is directly connected, Vlan10
     2.0.0.0/24 is subnetted, 1 subnets
C       2.2.2.0 is directly connected, Vlan20
这时候就配置完成了,PC1和PC2就能通信了。

-----------------------------------------------------------------------------------------------------------------

方法二和方法一,异曲同工。一个给vlan配置ip,一个给接口配置ip,乍一看,差不多么,不就换了一个三层交换机么。其实仁者见仁,智者见智。现在大部分公司架构,介入层,核心层,转发层(或者防火墙),核心层是用来转发数据的,大部分用的都是三层交换设备,而再上一层转发曾,往往接的都是防火墙,主要就是同外部通信的,而且三层交换设备,相较于路由器而且,更加多变,吞吐量比老款的纯路由器高很多(这个我没有考证,网上是这么说的,而且我觉得这点不是很对。。。)反正就这样,大家还是实际考虑为主。

-------------------------------------------------------------------------------------------------------------------

你以为到这里就结束了?no no no今天还有一个点,直接看图


设置如下,就问一个问题PC0和PC1通不通

PC0             ip:1.1.1.1/24

PC1             ip:1.1.1.2/24

Switch0        f0/1 vlan10 mode access    f0/2 vlan10 mode access

Switch1        f0/1 vlan20 mode access    f0/2 vlan20 mode access

没了 没有Trunk 什么也没有  到底通不通?

自然是通,为什么?不是不同的Vlan么?

注意,Vlan只是划分本地的路由条目,多个vlan建立在一台交换机上的时候,他是通过将接口的mac地址进行划分,但是并不会加上Vlan Tag,VLAN TAG只会在你配置了封装协议之后也就是起了Trunk以后,进行添加。而我这里没有Trunk,自然也就不会有Vlan TAG(dot1q),switch0 发现f0/2也是vlan10,自然会把同属于vlan10的f0/1接口收到的数据转发出去,通过抓包会发现就是一个普通的数据包,没有关于vlan的信息,switch1也是同样。

总结一句话:vlan划分本地接口!!!

假设配了Trunk会怎么样呢?那就不会通了,因为通过Trunk发出去以后就会带上Vlan TAG,而两个路由器的Vlan ID不一样,自然是不会通的。假如我再改一下,把两个SW的vlan号改成一样的,试一下,会不会通呢?能通。就是因为vlan id相同了。可以发现Vlan并不能控制外部划分,只能控制内部,一旦数据发出以后,就是通过vlan id来区分。拥有相同的vlan id,就能通信了。这里说一下,dot1q的vlan Tag是打在二层数据帧,目标地址+源地址+type之后的8位。

-----------------------------------------------------------------------------------------------------------------

好了,这里讲了这么这么多,很重要,都是要掌握的,没有只需要了解的,掌握的越深刻越好。下一次,就是STP了,这个也很重要的。。。。。。




这篇关于单臂路由Trunk详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950764

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected