交换机学习----网桥

2023-05-16

        最近接触到交换机产品,正好借机会学习下二层相关网络技术。之前一直想写点东西,又懒得写。这次乘机会多写点,记录下,也算是对学习的一个交代。另自己是初学者,也希望能和前辈多交流。有写的不对的地方,希望前辈们不吝赐教。

        先用到的是交换机的模拟器,运行在Ubuntu虚拟机上。通过linux网桥实现每个模拟器的接口互联,并根据TOPO配置虚拟网络环境。这里主要介绍下网桥的基本知识,以及linux网桥的相关配置。linux通过brctl创建的网桥(bridge)和传统意义的网桥在理解上存在一定的偏差。

1 网桥的基本知识

1.1 网桥的背景

        以太网的发展历程基本上可以被看做在一种先天缺欠的结构上修修补补的过程。为了缓解前述的冲突问题,提高网络的可扩展性,人们想到将网络分段。这种思想很简单,如果一条总线上有40 台主机,它们冲突的概率是80%,那么我就将其分割成两条总线,这样每条总线将只包含20台主机,冲突概率是40%,依此类推。

        但是简单地将总线分割,会丧失连通性。需要的是在保持网络连通性的同时,将冲突域减小。要达到这个目的就要在网络中引入一种特殊的设备,这种设备有一个形象的名字——网桥(Bridge)。

1.2 网桥的概念

        网桥是根据物理地址过滤和转发数据包的连接设备,它工作于OSI 模型的数据链路层(对应于TCP/IP 网络的网络访问层)。

        网桥监听它所连接的每个网段,建立一个表来反映物理地址位于哪个网段。当数据在网桥会查看数据的目标地址,与路由表进行比较。如果目标地址属于一个网段上传输时,发送数据的网段,网桥就忽略这个数据。如果目标地址在不同的网段,网桥就把数据转发到适当的网段。如果目标地址不在路由表里,网桥就会把数据转发到除源网段之外的全部网段。

         

         通俗点解释,网桥将网络划分为网段A和网段B两个总线型网络。当网段A中的主机A1要向主机A2发送数据时,由于主机A2并不在网段B中,网桥会将这一数据阻断在网段A中,网段B中的主机这时不会发现总线被占用,反之亦然。这就相当于将原先的大冲突域分割成了A、B两个小冲突域,有效地降低了冲突概率。与此同时,如果网段A中的主机A1要向网段B中的主机B1发送数据,由于总线并没有硬性地被剪断,网桥完全可以将数据转发到网段B,主机B1仍然可以收到来自网段A的数据,反之亦然。这就是所谓的“有机”隔离。

        网桥能够做到“有机”隔离的关键在于其使用的“存储/转发(Store andForward)”算法。由于网桥同时处于网段A和网段B,所以网桥可以接收到全网数据。当网桥接收到数据时先将数据存储在内存中进行分析,如果数据的目的地址不在本网段,网桥会将该数据转发到另一网段。网桥存储/转发算法的依据是数据的MAC地址,所以网桥是工作在数据链路层的网络设备。

        网桥的这种工作机制有利于广播数据在全网的扩散。广播数据的目的MAC地址是全F,网桥会无条件转发,广播数据全网扩散。因此,网桥可以有效地隔离冲突域,但无法隔离广播域。

1.3 网桥工作原理

        上图中分为3个LAN,每个LAN都有2台设备。网桥的每个端口都对应一个冲突域,可以将LAN1-1、LAN1-2和bridge1连接LAN1的接口视为一个冲突域。

        首先需要了解的是,冲突域内任意一个设备发送消息,其它的设备都可以收到对应的消息帧。

        假设Bridge 1和Bridge 2的转发表都是空的初始化状态,以从设备LAN1-1到LAN3-1为例,理解网桥的“存储/转发”算法。

                1. 当LAN1-1发送消息时,冲突域内都会收到,所以Bridge 1必然会收到H1发送的帧;

                2.Bridge 1查找转发表,发现并没有LAN1-1的表项,记录LAN1-1的MAC表项是从端口一学习到的;

                3.Bridge 1查找转发表,发现并没有LAN3-1的表项,那么将该数据帧发往其它的冲突域;

                4.此时LAN2-1、LAN2-2和Bridge 2的左边端口都会收到该数据帧,LAN2-1和LAN2-2发现这不是给自己的数据,会丢掉;

                5.Bridge 2查找转发表,发现并没有LAN1-1的表项,记录LAN1-1的MAC表项是从左边端口一学习到的;

                6.Bridge 2查找转发表,发现并没有LAN3-1的表项,那么将该数据帧发往其它的冲突域;

                7.此时LAN3-1、LAN3-2收到该数据帧,LAN3-2丢掉数据;LAN3-1发现是发给自己的包,就会处理该数据帧。

        这个过程较好理解,网桥存储/转发的流程都很清晰。

        这里还有一个问题,比如,Bridge 1连接着局域网LAN 1和LAN 2。如果设备LAN1-1与设备LAN2-1通信。LAN1-1发送消息给Bridge 1,Bridge 1发现目标地址和原地址不属于一个局域网(或者没找到目标表项),那么就进行转发功能。如果LAN1-1给LAN1-1发送消息,网桥发现原地址和目的地址属于同一个局域网,这时候网桥怎么处理呢?

        这里涉及到一个非常重要的概念,过滤数据库。网桥把知道的地址信息都存在这个过滤数据库里面,每次接收一个目的地址,就和数据库里面的数据进行比对,如果发现和源地址不在一个LAN就进行转发;如果在一个局域网下面就过滤掉这个信息。

        过滤数据库的转发规则是,网桥从A端口接收到一个帧:

                1.搜索数据库确定MAC地址是不是在一个端口port上面;
                2.如果没有找到这个MAC地址,那么把该帧泛洪flooding到所有端口(A除外);
                3.如果找到了MAC地址对应应该发往B端口,那么检查B,如果B不处于阻塞态,那么就 从B端口发送,如果是阻塞态,那么不发送。
                4.如果MAC地址对应的也是A端口,那么不发送,过滤掉这个信息。

        转发和过滤都是网桥的基本功能。

2 理解和配置Linux网桥

2.1 Linux Bridge基本概念

        网桥是一种在链路层实现中继,对帧进行转发的技术,根据MAC分区块,可隔离碰撞,将网络的多个网段在数据​​链路层​​连接起来的网络设备。

        Linux Bridge是一个​​虚拟网络设备​​​,具有网络设备的特性(可以配置IP、MAC地址等)。

        可以看作是一个​​虚拟交换机,与物理交换机工作原理类似。可以有多个端口​​​,数据可以从任何端口进来,进来之后根据​​mac地址判断从哪个口出去​​。

        bridge是​​建立在从设备上​​(物理设备、虚拟设备、vlan设备等,即attach一个从设备,类似于现实世界中的交换机和一个用户终端之间连接了一根网线),并且可以为bridge配置一个IP(参考LinuxBridge MAC地址行为),这样该主机就可以通过这个bridge设备与网络中的其他主机进行通信了。另外它的从设备被虚拟化为端口port,它们的IP及MAC都不在可用,且它们被设置为接受任何包,最终由bridge设备来决定数据包的去向:接收到本机、转发、丢弃、广播。

        bridge是用于连接两个不同网段的常见手段,不同网络段通过bridge连接后就如同在一个网段一样,工作原理很简单就是L2数据链路层进行数据包的转发。

        通过Linux bridge来实现打通容器网络是一个非常有效的方法,可以连接同宿主机内所有容器的虚拟网络。通过bridge将数据转发到真实的往里网卡eth0中将容器内网与外网打通。

        默认情况下 docker 容器的IP 都是 docker0 这个 bridge 下独立网段的虚拟子网。我们可以通过手工配置 bridge 来实现每一个docker 的IP都和宿主机IP在同一个网段。

2.2 Linux Bridge基本配置

        Linux Bridge配置常用brctl命令,配置参数如下:

root@ubuntu:~# brctl 
Usage: brctl [commands]
commands:
        addbr           <bridge>                add bridge
        delbr           <bridge>                delete bridge
        addif           <bridge> <device>       add interface to bridge
        delif           <bridge> <device>       delete interface from bridge
        hairpin         <bridge> <port> {on|off}        turn hairpin on/off
        setageing       <bridge> <time>         set ageing time
        setbridgeprio   <bridge> <prio>         set bridge priority
        setfd           <bridge> <time>         set bridge forward delay
        sethello        <bridge> <time>         set hello time
        setmaxage       <bridge> <time>         set max message age
        setpathcost     <bridge> <port> <cost>  set path cost
        setportprio     <bridge> <port> <prio>  set port priority
        show            [ <bridge> ]            show a list of bridges
        showmacs        <bridge>                show a list of mac addrs
        showstp         <bridge>                show bridge stp info
        stp             <bridge> {on|off}       turn stp on/off

        比如,添加接口到Bridge。

root@ubuntu:~# brctl show
bridge name     bridge id               STP enabled     interfaces
lxcbr0          8000.00163e000000       no
root@ubuntu:~# brctl addif lxcbr0 vsbr0
root@ubuntu:~# brctl show
bridge name     bridge id               STP enabled     interfaces
lxcbr0          8000.00163e000000       no              vsbr0

        1、bridge不区分接入进来的是物理设备还是虚拟设备,对于bridge来说都是一样都是网络设备,所以当eth0加入bridge之后,它就和其他veth一样了,从外面网络到eth0收到的数据包将无条件的转发给br0,eth0自己变成一根网线的角色。这时通过eth0 ping网关则失败,由于bridge通过eth0这根网线连接上了外面的物理机,所以只有连接到bridge上的设备才可以ping通网关。br0可以理解为自己有一块自带的网卡。

        2、由于eth0已经变成了和网线差不多的功能,所以在eth0上配置IP已经没有什么意义了,并且还会影响协议栈的路由选择,比如如果上面ping的时候不指定网卡的话,协议栈有可能优先选择eth0,导致ping不通,所以最好将eth0上的IP配置去掉。

        3、当一个设备attach到bridge上时,该设备上原来配置的IP则变为无效,Linux不再使用原来那个IP在三层接受数据。此时应该把原来的IP赋值给bridge设备。

2.3 常用虚拟机网桥配置

2.3.1 单网桥配置模式

        通过lxc容器运行sim1和sim2,分别存在虚拟口mgt-eth。通过tun/tap技术,将mgt-eth接口引入Ubuntu栈。将虚拟出来的接口都添加到同一个网桥lxcbr_mgt,同时将Ubuntu ens33也添加到该网桥。那么对于sim1和sim2的mgt-eth,与Ubuntu ens33相当于同时接入了一个虚拟的交换机lxcbr_mgt。

        这样的好处包括

                1.配置简单,VMNet、lxcbr_mgt、mgt-eth可以配置在同一网段;

                2.效率快,比如,从mgt-eth发出去的包,可以不通过Ubuntu的栈,直接通过网桥发出去。

        但是也存在缺陷,外网直接接入网桥,会导致网桥流量骤增。当BUM流量过多时,可能导致流量拥塞。

 2.2 多网桥配置模式

        多网桥配置与单网桥类似,仅在Ubuntu ens33是加入单独的网桥br_out,还是与虚拟机接口加入相同的网桥lxcbr_mgt。

        多网桥的配置相对复杂一些,因为当mgt-eth要与VMNe通信时,实际是通过Ubuntu的Linux Protocol Stack中转的。

        由于br_out和lxcbr_mgt属于一个栈,那么不能配置相同的网段。如果相同会导致该网段包找不到出接口而转发失败。

        那么如果需要mgt-eth和VMNet之间三层可达,就需要在Ubuntu配置IP转发功能(默认是有的),同时需要在sim1和VMNet上配置路由。

        当然这样的配置同样存在好处,首先是容器在内网中,安全性能更好。而且数据包统一从ens33转发出去,就不存在MAC地址冲突问题,在WIFI环境也能工作。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交换机学习----网桥 的相关文章

  • XML文件解析

    void DomXml parseXml QDomDocument document 声明QDomDocument document setContent amp xml 初始化QDomDocument 文档结构 QDomElement r
  • ROS安装指令集合(快速安装+简易原理教程)

    很多刚装了Ubuntu的工控机上ROS官网很慢 xff0c 而且mirror不好找 xff0c 所以我把安装ROS的指令都放了进来 xff0c 一条一条复制即可 加载中科大镜像 xff1a sudo sh c 39 etc lsb rele
  • 蓝桥杯 嵌入式设计与开发项目 历届 客观题

    蓝桥杯嵌入式各届客观题 xff0c 包含省赛第八至十三届 xff0c 决赛第十 十一届 第十三届 部分题目为本人自己做的 xff0c 非标准答案 xff0c 仅供参考 注 xff1a 大学组客观题为10道 xff0c 研究生组客观题为15道
  • 输入rostopic echo /scan 报错:Segmentation fault (core dumped)[gazebo-2] process has died

    问题背景 xff1a 在gazebo中用rplidar实现gampping算法时 xff0c 一旦输入rostopic echo scan xff0c 就会报错 xff0c 错误 xff1a Segmentation fault core
  • C# 注释详解

    一 二 三 是智能注释也称xml注释 xff0c 会在被编译 xff0c 并生成xml文件在可执行文件中 会影响编译速度 xff0c 但不会影响代码执行速度 一级注释 xff1a 1 lt remarks gt 对类型进行描述 xff0c
  • STM32控制HC-05蓝牙模块进行通信

    一 HC 05蓝牙模块 1 简介 HC 05主从一体蓝牙串口模块采用英国CSR公司BlueCore4系列的芯片 xff0c 符合符合蓝牙2 0 43 EDR规范 xff0c 可以同带同种蓝牙功能的电脑 蓝牙主机和手机等智能终端配对 2 主要
  • 51单片机PWM的控制(呼吸灯)

    一 PWM Pulse Width Modulation脉冲宽度调制 xff0c 简称PWM PWM 脉冲宽度调制 对模拟信号电平进行数字编码的方法 xff0c 计算机只能输出0或5V的数字电压值而不能输出模拟电压 xff0c 而我们如果想
  • STM32用SPI方式控制OLED模块

    一 OLED 1 OLED模块的外观 2 OLED模块的电路图 3 OLED模块参数 项目说明接口特性3 3V 串电阻后 xff0c 可与 5V 系统连接 通信接口4 线 SPI屏幕分辨率128 64屏幕尺寸0 96 寸工作温度 40 70
  • STM32上使用UCOSII--消息队列和信号量集

    有关UCOS任务的介绍 xff1a STM32上使用UCOSII 任务 有关UCOS信号量和邮箱的介绍 xff1a STM32上使用UCOSII 信号量和邮箱 一 消息队列 使用消息队列可以在任务之间传递多条消息 消息队列由三个部分组成 x
  • PID控制算法+倒立摆控制应用

    一 位式控制算法 传统的控制算法采用位式控制算法 特点 位式控制算法输出信号只有H L两种状态算法输出信号OUT的依据 xff1a span class hljs comment 二位式 span span class hljs comme
  • 调整 mysql policy requirements

    Error xff1a mysql gt CREATE USER 39 tester 39 64 39 39 IDENTIFIED BY 39 password 39 ERROR 1819 HY000 Your password does
  • FreeRTOS简介与源码下载

    RTOS系统 实时操作系统 RTOS全称 Real Time OS 实时操作系统 xff0c 强调实时性 实时操作系统分为硬实时和软实时 硬实时要求在规定的时间内必须完成操作 xff0c 不允许超时 xff1b 软实时则没有那么严格 xff
  • FreeRTOS在STM32F4上移植

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第二章学习笔记 第一章笔记 FreeRTOS简介与源码下载 一 移植 1 准备工程文件 MCU用的是STM32F429的CORE xff0c 用keli创建一个基础工
  • FreeRTOS系统配置

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第三章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 FreeRTOSConfig h FreeRTOS的配
  • FreeRTOS中断分析

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第四章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 一 Cortex
  • FreeRTOS临界段代码

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第四章学习笔记的补充 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记
  • FreeRTOS任务基础

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第五章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记 Fr
  • FreeRTOS任务API函数的使用

    这篇文章最后的demo工程可以在网盘中自行下载 xff1a 链接 xff1a https pan baidu com s 1o1U niMKu0RuDAFio1nKMA 密码 xff1a ysev 本文是 ALIENTEK STM32F42
  • FreeRTOS列表和列表项

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第七章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记 Fr

随机推荐

  • FreeRTOS任务创建

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第八章学习笔记 1 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记
  • FreeRTOS任务调度器开启

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第八章学习笔记 2 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记
  • css样式缓存

    1 问题 css样式变更之后 xff0c 必须手动清缓存才能生效 2 百度 在实际项目开发过过程中 xff0c 页面是上传到服务器上的 而为了减少服务器的压力 xff0c 让用户少加载 xff0c 浏览器会将图片 css js缓存到本地中
  • 使用Verilog HDL语言实现4位超前进位加法器

    一 1位半加器的实现 1 1 原理 半加器由两个一位输入相加 xff0c 输出一个结果位和进位 xff0c 没有进位输入的加法器电路 1 2 真值表 1 3 逻辑表达式 S 61 A B C 61 A amp B 1 4 Verilog 实
  • FreeRTOS任务切换

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第九章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记 Fr
  • 蓝桥杯嵌入式备赛手册

    本文是我参加蓝桥杯嵌入式比赛后的一些心得体会和一些自己总结的驱动代码 xff0c 希望能给以后参加蓝桥杯嵌入式的同学带来一些帮助 本文没有经过校对 xff0c 如有错误还请包涵 xff0c 欢迎大家交流和指正 xff0c 转载请注明出处 一
  • U-Boot详细分析(2)——Exynos4412启动过程

    一 iROM 首先arm的pc指针从0x0地址开始执行 xff0c 打开4412手册可以看到0x0000 0000地址存放着iROM xff1a 所以4412上电后会到iROM中去执行 xff0c iROM是4412出厂时就固化的一段程序
  • U-Boot详细分析(3)——系统时钟操作

    一 引子 在上一篇文章 U Boot详细分析 2 Exynos4412启动过程中可以看到 xff0c BL2程序流程图中有SET CLOCK s这一步骤 xff0c 并且在U Boot源码的 board samsung smdkc210 l
  • 字符串中的第一个唯一字符

    leetcode 的easy题 xff1a 给定一个字符串 xff0c 找到它的第一个不重复的字符 xff0c 并返回它的索引 如果不存在 xff0c 则返回 1 案例 s 61 34 leetcode 34 返回 0 s 61 34 lo
  • WOC广域网加速

    WOC广域网加速 1 广域网存在的问题 xff1a 大量的路由 网关 跨区域和跨运营商的情况比较常见 丢包和延长使用传输效率降低 交互过多导致传输效率差 2 解读方案 xff1a 应用流量可视化 链路优化 数据优化 流量管理 智能报表 3
  • ros发布gps定位信息

    1 可行的主题 Robot Pose EKF节点订阅下面的主题 xff1a odom 2D消息 lt nav msgs Odometry gt imu data 3D消息 lt sensor msgs Imu gt vo 3D消息 lt n
  • tx2备份与恢复

    NVIDIA Jetson是通过Micro USB USB TYPE C接口升级系统 xff08 具体参考不同载板说明 xff09 xff0c 更新前需让Jetson进入Recovery 模式 Recovery 模式下可以进行文件系统更新包
  • debian 163各版本源

    debian8 stable deb http mirrors 163 com debian jessie main non free contrib deb http mirrors 163 com debian jessie updat
  • svn st 状态标识

    svn status 简写 xff1a stat st 显示工作副本中目录与文件的状态 用法 status PATH 未指定参数时 xff0c 只显示本地修改的条目 没有网络访问 常用可选项 xff1a q 只显示本地修改条目的摘要信息 u
  • 单片机蜂鸣器控制程序和驱动电路

    蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器 压电式为压电陶瓷片发音 xff0c 电流比较小一些 xff0c 电磁式蜂鸣器为线圈通电震动发音 xff0c 体积比较小 按照驱动方式分为有源蜂鸣器和无源蜂鸣器 这里的有源和无源不是指电源 xf
  • Linux 下的信号量

    linux下的posix有名信号量的几个要点 博客园 最全面的linux信号量解析 csdn blog Semaphore信号量总结 博客园 sem timedwait csdn blog 一 信号量的概念 信号量的使用主要是用来保护共享资
  • x86-从实模式到保护模式

    十进制到二进制的转换 十进制转换为十六进制 十六进制表示法 在很多高级语言中 xff0c 通常不采用在后面加h的做法来表示十六进制 xff0c 而是为他添加一个0x前缀 如 xff1a 0x3f
  • MG-SOFT 导入MIB文件

    之前SNMP测试一直用的是IReasoning MIB browser xff0c 最近测试snmp V3 xff0c 需要使用MG SOFT MIB Browser 在导入之前使用的MIB文件时 xff0c 发现跟IReasoning M
  • Ubuntu更新源 Failed to fetch http://xxxxxxx Temporary failure resolving ‘mirrors.aliyun.com‘

    之前公司产品一直使用32位环境 xff0c 最近需要使用64位环境 需要更新软件库 xff0c 就换了个64位ubuntu虚拟机 xff0c 重新编译所需的库 xff08 包括pcap grpc等 xff09 更新库的时候 xff0c 想着
  • 交换机学习----网桥

    最近接触到交换机产品 xff0c 正好借机会学习下二层相关网络技术 之前一直想写点东西 xff0c 又懒得写 这次乘机会多写点 xff0c 记录下 xff0c 也算是对学习的一个交代 另自己是初学者 xff0c 也希望能和前辈多交流 有写的