单臂路由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

相关文章

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印