版权声明: https://blog.csdn.net/xinyuan510214/article/details/52020987

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net

l  Vlan原理

Ø  Vlan介绍

Ø  汇聚链接

Ø  802.1Q协议

Ø  QinQ

l  交换机实现

Ø  交换机要做什么

Ø  Ingress vlan处理

Ø  Egress vlan处理

Vlan介绍--概念

n  VLAN(Virtual Local Area Network)的中文名为“虚拟局域网”,遵循IEEE802.1Q协议。

n  VLAN是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的数据交换技术。

n  Vlan的优点

广播风暴防范

网络安全

成本降低:

普通的交换机如下图所示:

所有的端口都在同一个广播域,任何一个端口发送的广播报文都会被发送到所有端口。这样显然不利于网络的隔离,还有可能会出现网络风暴(如arp等报文)。为了避免这些问题,通常的办法是把不同的组放到不同的交换机上,如每个办公室属于一个交换机。交换机之间通过路由器连接。这样可以在一定程度上避免广播风暴。但假如我们使用20口的交换机,而每个房间只有四、五个用户,显然每个房间使用一个交换机有些浪费了。如果能在同一个交换机上实现端口的分组,那就太好了。

如下图所示,我们把交换机划分为两个区域。

这样做的效果与使用两个小一些的交换机是一样的,但组网形式就灵活多了。假如某天需要调整端口的分配,不需要重新购买新的设备,只需要在交换机上配一下。

上面所说的就是vlan 的概念,每个vlan代表一个组。

再考虑另一个问题,交换机互联。

如果我们30台电脑,这就需要两个20口的交换机级联起来。假如此时需要vlan,而每个vlan的电脑都分布在两个交换机上,该如何组网?

可以想见,我们需要通过下面的形式组网。这样如果A需要发送报文到C,则可以通过互联的蓝色端口把报文从交换机1转发到交换机2。这显然有个问题存在,每个vlan都需要一个单独的端口用户交换机级联,显然有些浪费。如果能通过一个口把所有数据都通过一个口发送就好了。

如下图所示,这可行吗?只有一个障碍,交换机如何知道其他交换机转发来的报文是属于哪个vlan的?

办法很简单,在报文中增加一个字段用户区分,在vlan中称为tag。这就是vlan协议的由来。而由此也产生了两种端口:trunk与access。access口用于连接pc机,这个口显然只能属于一个vlan,而且入口与出口都不需要附加tag。trunk口用户交换机互联,这个口可能会属于多个vlan,而且报文进出都需要带tag。

vlan的实现是802.1Q协议,它完成下面的几项工作:

1. 通过在报文中添加字段,支持多个交换机之间的组网

2. 该字段需要有独特的标识

3. 该字段中应该有vlan ID

QinQ技术:

n  QinQ技术(也成stacked vlan 或 double lan)。 标准出自IEEE802.1ad。其实现将用户私网Vlan Tag封装在公网Vlan Tag中,是报文带着两层Vlan Tag穿越运营商的骨干网络(公网)

n  优点: 缓解日益紧缺的公网VLAN ID资源问题,用户可以规划自己的私网VLAN ID,不会导致和公网VLAN ID冲突

其组网形式如下图所示:

根据上述内容,显然所有功能都需要依靠vlan的tag来实现,而tag不是生来就有的。要实现tag的添加,交换机(switch)显然有些工作是必须要做的:

n  为进入switch的untagged报文增加tag

n  为进入switch的为Ctag的报文增加Stag

n  删除从switch出去的Stag报文的Stag

n  删除从switch出去的Double tag报文的Stag

n  保证带某个Vlan ID的报文只在属于该vlan的ports中发送

根据这些功能的要求,可以画出入口与出口的功能能框图:

根据原始的vlan需求,显然tag是通过端口号添加的,但随着发展,vlan tag的添加也丰富了起来。到目前为止,常见的tag添加方法有根据mac添加、根据protocol添加、根据port添加三种。同时增加的还有vlan翻译功能,也就是说可以对用户所带的tag进行改变。

报文进入switch时,首先会判断是否带有tag,如果有则直接进入下面的L2转发流程。如果没有tag,会查找mac vlan翻译表,根据报文的源mac地址查找是否在mac vlan表中有记录,如果有则进入L2转发流程,否则继续检测protocol。在proctocol vlan中查找后,如果还是没有,则会根据端口号打上一个tag,然后进入L2转发流程。

综上,进入L2转发的报文是一定带tag的。

VLAN入门知识的更多相关文章

  1. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  2. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  3. H5移动端开发入门知识以及CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  4. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  5. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  6. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  7. React的入门知识与概念【1】

    回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...

  8. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  9. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

随机推荐

  1. 一起学习Boost标准库--Boost.StringAlgorithms库

    概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...

  2. jQuery插件实例五:手风琴效果[动画效果可配置版]

    昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果.对于一些数据做了动态的计算,以实现自适应. 欢迎大家入群相互交流,学习,新群初建,欢迎各 ...

  3. 卷积神经网络入门:LeNet5(手写体数字识别)详解

    第一张图包括8层LeNet5卷积神经网络的结构图,以及其中最复杂的一层S2到C3的结构处理示意图. 第二张图及第三张图是用tensorflow重写LeNet5网络及其注释. 这是原始的LeNet5网络 ...

  4. nginx之location.md

    安装echo模块 下载模块 # pwd /root # git clone https://github.com/openresty/echo-nginx-module 重新编译 先查看版本,然后根据 ...

  5. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析

    我们现在仍以 xml 中配置 bean 的方式来 使用 Spring ,不考虑注解和扫包 配置相同id 的bean 定义一个 bean 类 TransactionManager /** * @auth ...

  6. JS播放声音

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JS播放声音</tit ...

  7. linux 的常用命令---------第二阶段

    vim编辑器 vim 文件名(首先进入命令模式) :(进行编辑文件内容)  → 按 i 键进入插入模式,可以写内容啦. ↓ 按 Esc 键,进入命令模式 ↓ 按 shift + : 键,进入末行模式  ...

  8. Redux入门学习

    一.Redux三大原则 1. 单一数据源 应用中所有的state都以一个对象树的形式储存在一个单一的store中. 2. state只读 唯一改变state的办法是触发action.action是一个 ...

  9. Python之字典的应用

    # 转化为字符串 d = {'key1' : 'value1', 'key2 ': 'value2','key3' : 'value3'} s = str(d) print(s) #python3 结 ...

  10. jqgrid 获取所有行数据

    如何获取jqgrid所有数据? 通过 getRowData() 方法获得当前行数据 //获取所有行数据,是一个json对象集合 var rowArr= $("#jqGrid").g ...