linux 网桥学习

前言: 本文来学习一下linux网桥概念和网桥配置

1. linux网桥概念

网桥,类似于中继器,连接局域网中两个或者多个网段。它与中继器的不同之处就在于它能够解析它收发的数据,读取目标地址信息(MAC),并决定是否向所连接的其他网段转发数据包。为了能够决策向那个网段发送数据包,网桥学习接收到数据包的源MAC地址,在本地建立一个以MAC和端口为记录项的信息数据库。

有时, 会有需要将一个物理网络分成两个独立的网段, 而不是创建新的 IP 子网然后将其通过路由器相连。 以这种方式连接两个网络的设备称为 "网桥 (bridge)"。网桥通过学习每个网络接口上的 MAC 层地址 (以太网地址) 工作。 只当数据包的源地址和目标地址处于不同的网络时, 网桥才进行转发。在很多方面,网桥就像一个带有很少端口的以太网交换机。

2. 网桥和交换机的区别

提到网桥就不得不提起集线器,集线器(HUB)的功能就是将多台主机互联起来,但是多台主机在一个广播域里面就会造成广播风暴。

网桥的作用就是为了将广播域分割,将一个广播域,分割为两个广播域,具体实现就是将网桥两端各连接一个集线器,在由集线器去连接主机。

如下图所示:

工作原理:

主机A想跟主机B通信时会发送ARP广播,这个时候网桥MAC-PORTNUM表还是空的,网桥会转发数据到DEF主机的网路中,并在表中添加一条A主机MAC地址对应网桥的端口,等下次A主机再次和B主机通信时,网桥会丢弃ARP此数据包,将广播范围缩少了。

当主机A想和D主机所处的网络通讯时,主机A发送ARP广播,由于网桥的mac-portnum表中没有主机D对应的MAC地址,所以数据包将被转发到D主机所有在网络中进行广播,找到D对应的MAC地址并将MAC地址和对应的端口号写入到 mac-portnum表中。

总结:

网桥的两个端口分为连接两个局域网,网桥的mac-portnum表中记录着, 连接ABC主机MAC地址对应的端口,连接DCE主机MAC地址对应的端口,网桥属于1个端口对应多个NAC地址。

交换机是改良的网桥,交换机的工作模式如下;

所有的主机都连接到交换机上,主机通讯时会发送一次ARP广播请求MAC,交换机会记录MAC对应的端口号,属于一对一的方式,后续通讯时直接转发到目的主机,一个端口就是一个广播域。

网桥和交换机的工作模式对比:

网桥属于1个端口对应多个MAC地址

交换机属于一个端口对应一个MAC地址

3. 如何配置网桥

3.1. 使用命令行方式配置

配置网桥可以使用ip或者brctl命令,一般使用brctl命令,不过需要安装工具包: bridge-utils

brctl常用命令:

brctl show 查看所有网桥
brctl addbr <网桥名称> 添加网桥
brctl delbr <网桥名称> 删除网桥
brctl addif <网桥名称> <网络设备名称> 将网卡设备添加到网桥,作为网桥端口
brctl delif <网桥名称> <网络设备名称> 将网卡设备从网桥里删除

使用命令行创建的网桥会在重启后失效

powershell 复制代码
# 创建网桥
[root@localhost ~]# brctl addbr br0
[root@localhost ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000000000000	no	
powershell 复制代码
# 将网卡设备加入到网桥作为网桥的端口,此时IP不生效
[root@localhost ~]# brctl addif br0 ens33 ens36
ridge name	bridge id		STP enabled	interfaces
br0		8000.000000000000	no	ens33
								ens36

使用ifconfig 命令需要下载net-tools包

powershell 复制代码
# 清空网桥端口IP
[root@localhost ~]# ifconfig ens33 0.0.0.0 
[root@localhost ~]# ifconfig ens36 0.0.0.0
# 为网桥设置IP
[root@localhost ~]# ip add dev br0 192.168.92.100/24
# 启动网卡设备
[root@localhost ~]# ip link set br0 up
# 设置默认网关(根据实际情况配置)
[root@localhost ~]#  ip route add default via 192.168.92.2

notice: 命令行方式创建的网桥和一系列配置都将在重启系统后失效。

3.2. 使用配置文件的方式创建网桥

使用配置文件的方式创建网桥和配置信息永久生效

3.2.1. 创建网桥

powershell 复制代码
# 进入到网卡配置目录,创建网桥配置文件,并配置ip地址和网关
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vi ifcfg-br0
NAME=br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
IPADDR=192.168.92.100
NETMASK=255.255.255.0
GATEWAY=192.168.92.2
# 重启网络使配置生效
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000000000000	no

3.2.2. 将网卡添加到网桥并配置地址

a. 修改网卡配置文件,将网卡设备桥接到br0网桥,不设置IP地址
网卡为ens33,ens36

Ps:修改网卡配置文件需要注意的地方是:

  1. 设置静态获取地址,不用配置IP
  2. BRIDGE=br0 配置为网桥名称,桥接到网桥上
powershell 复制代码
[root@localhost network-scripts]# vi  ifcfg-ens33
TYPE="Ethernet"
DEVICE="ens33"
BOOTPROTO="none"
ONBOOT="yes"
BRIDGE=br0
powershell 复制代码
[root@localhost network-scripts]# vi  ifcfg-ens36
TYPE="Ethernet"
DEVICE="ens36"
BOOTPROTO="none"
ONBOOT="yes"
BRIDGE=br0

b. 重启网络查看网卡设备是否被添加到网桥

powershell 复制代码
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c2957ffc5	no			ens33
										ens36

3.2.3. 将网卡配置为支持VLAN

需要修改ens33和ens36网卡配置文件

Ps: 需要注意要修改的配置为:

  1. TYPE=Vlan 用于指示该网卡的类型为 VLAN 接口。
  2. VLAN=yes 表示启用了该网卡的 VLAN 功能,允许在该网卡上配置和使用虚拟局域网。

a. 修改配置文件

powershell 复制代码
[root@localhost network-scripts]# vi ifcfg-ens33
TYPE="Vlan"
VLAN=yes
DEVICE="ens33"
BOOTPROTO="none"
ONBOOT="yes"
BRIDGE=br0
powershell 复制代码
[root@localhost network-scripts]# vi ifcfg-ens36
TYPE="Vlan"
VLAN=yes
DEVICE="ens36"
BOOTPROTO="none"
ONBOOT="yes"
BRIDGE=br0

b. 重启网络

powershell 复制代码
[root@localhost network-scripts]# systemctl restart network
相关推荐
aixingkong92141 分钟前
Nvidia为例 XPU的Multi-Host、Socket Direct 、GPUDirect、RDMA 技术点分析
服务器·网络·硬件架构·硬件工程
雯宝3 小时前
mnt_init 函数
linux
UIU1144 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
律宏阔9 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔9 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴9 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千9 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei379 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei379 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei379 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化