Linux Bridge(Linux网桥)是 Linux 上用来做 TCP/IP 二层协议交换的网络设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和 Linux 本机上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge 会根据报文中的MAC地址进行广播、转发、丢弃等处理。bridge-utils提供的brctl命令用于设置、维护和检查Linux网桥。本文记录bridge-utils的相关网站信息、编译安装、软件包安装、命令解释等内容,后续文章将对网桥的使用和原理做源码级别的深度分析。
相关网站
编译安装
1 | # 下载源代码包 |
为了查看编译安装,具体安装了哪些文件,我们使用 ./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
30mancode@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 | 启用/禁用STP | sudo brctl stp bridge0 on | |
showstp | 查看网桥STP信息 | brctl show stp bridge0 | |
setfd | 设置网桥转发延迟时间 | ||
setageing | 设置老化时间,即生存周期 | ||
setbridgeprio | 设置网桥优先级 | ||
sethello | 设置hello时间 | ||
setmaxage | 设置消息的最大生命周期 | ||
setpathcost | 设置路径的权值 | ||
setportprio | 设置端口的优先级 | ||
hairpin | turn hairpin on/off |