0%
网桥#01#bridge-utils分析之基础知识

Linux Bridge(Linux网桥)是 Linux 上用来做 TCP/IP 二层协议交换的网络设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和 Linux 本机上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge 会根据报文中的MAC地址进行广播、转发、丢弃等处理。bridge-utils提供的brctl命令用于设置、维护和检查Linux网桥。本文记录bridge-utils的相关网站信息、编译安装、软件包安装、命令解释等内容,后续文章将对网桥的使用和原理做源码级别的深度分析。

相关网站

编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载源代码包
$ wget https://mirrors.edge.kernel.org/pub/linux/utils/net/bridge-utils/bridge-utils-1.7.1.tar.gz

# 解压源代码包
$ tar -zxvf bridge-utils-1.7.1.tar.gz
$ cd bridge-utils-1.7.1

# 生成configure配置文件
$ autoconf

# 配置编译信息,生成Makefile文件
$ ./configure

# 编译源代码
$ make

# 安装
$ make install

为了查看编译安装,具体安装了哪些文件,我们使用 ./configure --prefix=/home/mancode/apps/br 使其安装到特定的目录,然后看下安装后的文件目录结构:

软件包安装

Ubuntu系统上,我们使用如下命令安装bridge-utils:

1
$ sudo apt install bridge-utils

安装过程如下:

安装完毕之后,我们再看下软件包安装方式,具体安装了哪些文件,我们使用如下命令查看:

1
$ dpkg -L bridge-utils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mancode@manos:~$ dpkg -L bridge-utils
/etc/default/bridge-utils
/etc/network/if-down.d/bridge
/etc/network/if-post-down.d/bridge
/etc/network/if-pre-up.d/bridge
/lib/bridge-utils/bridge-utils.sh
/lib/bridge-utils/ifupdown.sh
/lib/udev/bridge-network-interface
/lib/udev/rules.d/60-bridge-network-interface.rules
/sbin/brctl
/usr/share/doc/bridge-utils/FAQ
/usr/share/doc/bridge-utils/FIREWALL
/usr/share/doc/bridge-utils/HOWTO
/usr/share/doc/bridge-utils/NEWS.Debian.gz
/usr/share/doc/bridge-utils/PROJECTS
/usr/share/doc/bridge-utils/README
/usr/share/doc/bridge-utils/README.Debian
/usr/share/doc/bridge-utils/THANKS
/usr/share/doc/bridge-utils/WISHLIST
/usr/share/doc/bridge-utils/changelog.Debian.gz
/usr/share/doc/bridge-utils/copyright
/usr/share/doc/bridge-utils/examples
/usr/share/doc/bridge-utils/examples/bridge.service
/usr/share/doc/bridge-utils/examples/hibernate
/usr/share/doc/bridge-utils/examples/interfaces.hotplug.wifi
/usr/share/doc/bridge-utils/examples/interfaces.networkmanager
/usr/share/doc/bridge-utils/examples/pm-utils
/usr/share/man/man5/bridge-utils-interfaces.5.gz
/usr/share/man/man8/brctl.8.gz
mancode@manos:~$

文件/sbin/brctl以及/usr/share/doc/bridge-utils/*、/usr/share/man/man5/*和/usr/share/man/man8/*下的文件,都好理解,就是可执行程序和帮助文档等。我们主要看下etc和lib目录下的文件是做什么用的。

文件类型说明
/etc/default/bridge-utils文本文件
/etc/network/if-down.d/bridge软链接指向:/lib/bridge-utils/ifupdown.sh
/etc/network/if-post-down.d/bridge软链接指向:/lib/bridge-utils/ifupdown.sh
/etc/network/if-pre-up.d/bridge软链接指向:/lib/bridge-utils/ifupdown.sh
/lib/bridge-utils/bridge-utils.sh脚本文件
/lib/bridge-utils/ifupdown.sh脚本文件
/lib/udev/bridge-network-interface脚本文件
/lib/udev/rules.d/60-bridge-network-interface.rules文本文件

brctl命令解析

命令解释示例
addbr创建网桥sudo brctl addbr bridge0
delbr删除网桥sudo brctl delbr bridge0
addif将网卡接口加入到网桥sudo brctl addif bridge0 ens33
delif将网卡接口从网桥删除sudo brctl delif bridge0 ens33
 
show查看网桥brctl show查看所有网桥
brctl show bridge0 查看名为brdige0的网桥
brctl show bridge0 bridge1 查看名为brdige0、bridge1等多个网桥
showmacs查看网桥MAC地址转发表brctl showmacs bridge0
 
stp启用/禁用STPsudo brctl stp bridge0 on
showstp查看网桥STP信息 brctl show stp bridge0
 
setfd设置网桥转发延迟时间
setageing设置老化时间,即生存周期
setbridgeprio设置网桥优先级
sethello设置hello时间
setmaxage设置消息的最大生命周期
setpathcost设置路径的权值
setportprio设置端口的优先级
 
hairpinturn hairpin on/off

参考资料