Linux Bridge 基本原理

发布时间:2023年12月18日

一、LinuxBridge概述

1.1.LinuxBridge介绍

LinuxBridge是一种虚拟的数据链路层设备,具备多个接口可以进行数据的收发。在Linux系统中,LinuxBridge担当交换机的角色,通过veth-pair/tap/tun接口连接其他网络设备。

1.2.Linux Bridge特点

(1)LinuxBridge是二层设备,仅用来处理二层的数据帧。

(2)LinuxBridge使用MAC地址表来决定怎么转发数据帧。

(3)LinuxBridge会从Host之间的通讯数据包中学习MAC地址。

1.3.Linux Bridge工作原理

(1)基于源MAC学习生成MAC地址表。

(2)基于目的MAC转发数据帧。

为了能够正确处理数据,LinuxBridge会记录MAC地址和端口的映射关系,这个映射关系表叫MAC地址表。LinuxBridge采取边学习边转发的工作模式,初始状态的LinuxBridge并不知道哪个设备会连接自己,更不会知道所连设备的MAC地址,所以MAC地址表无内容。

LinuxBridge转发数据的流程如下(以主机1访问主机3为例):1.在未发送数据之前的初始状态,MAC地址表无任何信息,如下图所示:

主机1发送数据地址解析协议(ARP)请求至LinuxBridge,LinuxBridge记录收到用户数据的源MAC地址和对应的接收端口并保存到MAC地址表中,然后通过广播转发该数据如下图所示。

主机3处理完主机1发来的ARP请求后,回发单播帧数据帧给LinuxBridge,LinuxBridge记录源MAC3与接口的对应关系且存入MAC地址表,并根据MAC地址表中的信息转发单播数据至主机1,如下图所示。

二、Linux网络虚拟化模型

2.1.隔离模型

隔离模型实现虚拟机或NS之间互通的网络。该模式无法与宿主机通信,无法与其他网络通信。可理解为多虚拟机或NS连接到一台交换机上。如下图所示,隔离模式下,宿主机创建一个虚拟交换机,NS的veth-pair接口(图中eth0)与LinuxBridge的veth-pair接口(图中vnet0、vnet1)互连,因为vnet0和vnet1在一个虚拟交换机内,所以只要虚拟机内部网卡的IP在一个网段内,就可以互相通信,但不能和宿主机以及外部网络互通。

注解:红色的虚线框为LinuxBridge的区域,绿色框住的是宿主机所在网络区域,网桥也是属于宿主机的管理区域,通过ip a也能查到网桥。

2.2.路由模型

实现虚拟机或NS之间以及虚拟机或NS到宿主机互通的网络。可理解为虚拟机或NS连接到一台路由器上,由路由器(物理网卡)统一转发,转发过程中源地址不会改变。如下图所示,宿主机创建一个LinuxBridge,veth-pair接口vnet0和vnet1接入到该虚拟交换机,除此之外还需要在宿主机上创建一块虚拟网卡brnet,将brnet加入到虚拟网桥中。该模式下,NS的默认网关需设置为brnet的IP地址,然后在宿主机中打开IP地址转发,使得NS网络可以访问宿主机,也可以互相访问。

2.3.桥接模型

实现虚拟机或NS之间、虚拟机或NS到宿主机、虚拟机或NS到外部主机、外部主机到虚拟机或NS互通的网络。该模型中虚拟机或NS和宿主机的地位是一样的。如下图所示,利用物理网卡的桥接功能,在宿主机中创建LinuxBridge,把宿主机的ens33放在桥上,这样NS1上的eth0将报文发给vnet0,再直接发给宿主机上的ens33接口,将源MAC地址改为宿主机上的ens33的地址。

2.4.NAT模型

实现虚拟机或NS之间、虚拟机或NS到宿主机、虚拟机或NS到外部主机互通的网络。本质上是在宿主机上部署了源NAT功能实现的。路由模式中虚拟机或NS能将报文发送给外部主机,但是外部主机不存在通往虚拟机的路由,因而无法回应请求(相当于数据包能出去但是回不来),并且外部主机是可以与宿主机通信的,所以此时只需要在宿主机上添加一个源NAT功能即可。如下图所示,此时NS访问宿主机之外的外部主机时,将虚拟机的IP地址转换为宿主机上的某个地址,从而实现虚拟机到外部主机的通信。

三、Linux Bridge支持的VLAN

3.1.VLAN的概述

虚拟局域网VLAN是将物理的局域网在逻辑上划分为多个广播域的技术,每个VLAN属于一个小的广播域,同一个VLAN内的主机可以直接二层通信,而不同VLAN内的主机二层隔离。

3.2.VlAN实现方式

为了实现虚拟局域网中同VLAN内主机二层互通,不同VLAN内主机二层隔离的功能,要求交换机能够识别接收到的数据帧所属的VLAN。这就需要在报文中添加标识VLAN信息的字段,即VLAN标签。如下图所示:

SW1收到主机发来的数据帧后,在数据帧头部增加编号为20的VLAN标签,根据此标签判断是否属于同一个VLAN,不同VLAN会丢弃数据帧,实现二层的隔离。

3.3.VLAN的数据包格式

(1)TPID:表示数据帧类型,取值为0x8100时表示IEEE802.1Q的VLAN数据帧。

(2)PRI:表示数据帧的优先级,取值范围0-7,用于标识不同优先级的数据帧。

(3)CFI:标准格式指示位,以太网中取值为0。

(4)VLANID:表示该数据帧所属VLAN的编号,取值范围0~4095。由于0和4095为协议保留取值,所以VLANID的有效取值范围是1~4094。

3.4.LinuxBridge中VLAN配置常用命令
bridge vlan {add|del} dev DEV vid VID [pvid][untagged]
# pvid:端口的默认VLAN,所有从该接口进入的以太网帧若没有携带
# VLAN的标签,会被打上该VLAN标签。
# untagged:接口的untagVLAN,当配置此参数,则从接口发出携带该VLAN标签数据时,
# 标签会被剥离;如果不配置,则报文会携带VLAN发出去。
# LinuxBridge默认状况下pvid和untagged是同时应用,且默认VLAN为1。

添加vlan:

bridge vlan add

删除vlan:

bridge vlan del
3.5.Linux Bridge中vlan处理流程

(1)LinuxBridge需要打开 VLAN filter 功能才能实现数据隔离,若没有打开始终允许报文通过。

(2)打开 VLAN filter 功能后,报文在网桥内部转发过程中始终携带VLAN。

(3)如果要转发出端口时,会判断出端口是否允许此VLAN的报文通过。

(4)如果允许报文从此端口发出去,再根据untagged判断是否需要将VLAN去掉。

四、Linux Bridge常用命令

增加网桥

brctl addbr br1

删除网桥

brctl delbr br1

增加网桥接口

brctl addif

删除网桥接口

brctl delif

显示网桥信息

brctl show

显示网桥mac地址

brctl showmacs

文章来源:https://blog.csdn.net/m0_73901077/article/details/134849752
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。