目录

文章目录

  • 目录
  • Linux bridge 的基本操作
    • 创建 Bridge
    • 将 veth pair 连上 Bridge
    • 为 Bridge 配置 IP 地址
    • 将物理网卡接口设备挂靠 Bridge
  • Linux Bridge 与虚拟机
  • Linux Bridge 与容器
  • Linux Bridge 的 MAC 地址行为
  • Linux Bridge 常用指令

Linux bridge 的基本操作

创建 Bridge

$ brctl addbr br0
# or
$ ip link add name br0 type bridge$ ip link set br0 up

刚新建的 bridge 是一个独立的虚拟网络设备,现阶段只有一个端口连着 TCP/IP Stack,此时的 bridge 没有实际功能,网络拓扑如下:

+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|              ↑                                ↑                |
|..............|................................|................|
|              ↓                                ↓                |
|        +----------+                     +------------+         |
|        |   eth0   |                     |     br0    |         |
|        +----------+                     +------------+         |
| 192.168.3.21 ↑                                                 |
|              |                                                 |
|              |                                                 |
+--------------|-------------------------------------------------+↓Physical Network

将 veth pair 连上 Bridge

$ ip link add veth0 type veth peer name veth1$ ip addr add 192.168.3.101/24 dev veth0
$ ip addr add 192.168.3.102/24 dev veth1$ ip link set veth0 up
$ ip link set veth1 up$ brctl addif br0 veth0
# or
$ ip link set dev veth0 master br0$ bridge link
6: veth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 2

此时网络拓扑如下:

+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|            ↑            ↑              |            ↑          |
|............|............|..............|............|..........|
|            ↓            ↓              ↓            ↓          |
|        +------+     +--------+     +-------+    +-------+      |
|        | .3.21|     |        |     | .3.101|    | .3.102|      |
|        +------+     +--------+     +-------+    +-------+      |
|        | eth0 |     |   br0  |<--->| veth0 |    | veth1 |      |
|        +------+     +--------+     +-------+    +-------+      |
|            ↑                           ↑            ↑          |
|            |                           |            |          |
|            |                           +------------+          |
|            |                                                   |
+------------|---------------------------------------------------+↓Physical Network

br0 和 veth0 相连之后,发生了几个变化:

  1. veth0 与 veth1 相连(类似网线的两端)。
  2. veth0 和 veth1 都与网络协议栈相连(具有 IP 地址)。
  3. veth0 与 br0 相连,其一端被插入到 br0 中。两者是双向通道。
  4. TCP/IP Stack 和 veth0 之间变成了单向通道。veth0 能接受 TCP/IP Stack 发来的数据,但 veth0 不会把从外面收到的数据转发给 TCP/IP Stack。
  • br0 的 “隐藏 MAC 地址” 变成了 veth0 的 mac 地址

相当于 bridge 在 veth0 和 TCP/IP Stack 之间插了一脚。veth0 本来要转发给 TCP/IP Stack 的数据被拦截,并全部转发给 bridge 了,即:接入到 bridge 的 veth pair 设备只能将数据包发送给 bridge,同时 bridge 也可以向 veth0 发送数据。

为 Bridge 配置 IP 地址

常见的物理交换机中,有些是支持配置 IP 地址的,管理员可以 SSH 到交换机上进行配置作业;有些事不支持配置 IP 地址的,提供了 COM 口给管理员接入;有些更简单的设备连 COM 口都没有,不支持额外的配置。

正如上文所言,Linux Bridge 具有 “虚拟网卡设备” 和 “虚拟网桥设备” 两重功能,所以 Bridge 属于支持配置 IP 地址的类型,其内含了一张 “隐藏的网卡(MAC 地址)”,通常的,会把挂载到 Bridge 的网络设备(e.g. eth0、veth0 等)的 IP 地址给 Bridge 使用。

该虚拟网卡一端连在 Bridge 上,另一端连在 TCP/IP Stack 上。另外,和物理交换机一样,Bridge 的 “虚拟网桥” 功能不依赖于 “虚拟网卡”。

$ ip addr del 192.168.3.101/24 dev veth0
$ ip addr add 192.168.3.101/24 dev br0

此时网络拓扑如下:

+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|            ↑            ↑                           ↑          |
|............|............|...........................|..........|
|            ↓            ↓                           ↓          |
|        +------+     +--------+     +-------+    +-------+      |
|        | .3.21|     | .3.101 |     |       |    | .3.102|      |
|        +------+     +--------+     +-------+    +-------+      |
|        | eth0 |     |   br0  |<--->| veth0 |    | veth1 |      |
|        +------+     +--------+     +-------+    +-------+      |
|            ↑                           ↑            ↑          |
|            |                           |            |          |
|            |                           +------------+          |
|            |                                                   |
+------------|---------------------------------------------------+↓Physical Network

这样的,br0 和 veth1 通过 veth0 连接了起来,此时的 veth pair 就相当于一根网线。

验证:

# 通过 veth0 不能 ping 通 veth1
$ ping -c 1 -I veth0 192.168.3.102# 通过 br0 能 ping 通 veth0
$ ping -c 1 -I br0 192.168.3.102

NOTE:此时 br0 还是 ping 不同网关(.3.1),因为 br0 上只有两个端口,并没有连接网关,所以无法将数据帧转发给网关。

将物理网卡接口设备挂靠 Bridge

$ brctl addif br0 eth0
# or
$ sudo ip link set dev eth0 master br0

NOTE:物理网卡设备接口挂靠到 Bridge 之后,物理网卡设备的 IP 地址就会无效。所以再执行此处操作的时候,要注意 SSH 的网络连通性。

将 eth0 加入 br0 的效果与加入 veth0 是一样的,Bridge 不区分物理或网络设备,物理网卡设备从外部网络接收到的数据包都会直接转发给 br0。

另外,由于 eth0 的 IP 已经无效了,但原先的 Routes 依旧存在,会影响 TCP/IP 的路由选择。通常的,需要手动的进行配置,删除 eth0 的路由规则,增加 bridge 的路由规则。

# 错误的路由规则
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    0      0        0 eth0# 删除旧的默认网关(系统自动为网卡 eth0 生成的,也会自动删除)
$ ip addr del 192.168.3.21/24 dev eth0# 添加新的默认网关(设备缺省为 br0)
$ ip route add default via 192.168.3.1 dev br0# 正确的路由规则
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    0      0        0 br0

此时网络拓扑如下:

+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|                         ↑                           ↑          |
|.........................|...........................|..........|
|                         ↓                           ↓          |
|        +------+     +--------+     +-------+    +-------+      |
|        |      |     | .3.101 |     |       |    | .3.102|      |
|        +------+     +--------+     +-------+    +-------+      |
|        | eth0 |<--->|   br0  |<--->| veth0 |    | veth1 |      |
|        +------+     +--------+     +-------+    +-------+      |
|            ↑                           ↑            ↑          |
|            |                           |            |          |
|            |                           +------------+          |
|            |                                                   |
+------------|---------------------------------------------------+↓Physical Network

真的此时的拓扑,需要注意:

  1. eth0 要启用混杂模式,不根据自身的 MAC 地址过滤数据帧,即:转发所有数据帧。
$ ifconfig eth0 0.0.0.0 promisc
  1. 由于 Linux 下的 ARP 特性,当 TCP/IP Stack 转发外部网络的 ARP request 时,不管路由给 101 还是 102,都会得到两个 ARP reply,分别包含 br0 和 veth1 的 MAC 地址。这是因为 Linux 觉得从外部网络接收到的 101 和 102 数据包无论是从 br0 还是 veth1 进入 TCP/IP Stack 都是一样的。不过,由于回复了两个 arp reply,而外部网络的设备只会随机的用到其中的一个,所以外部网络发送给 102 的数据包可能会从 101 的 br0 上进来,反之亦然。说明数据流在 Bridge 并没有完全的隔离开,br0 和 veth1 会收到对方的 IP 应答包。为了解决上述问题,可以配置 rp_filter、arp_filter、arp_ignore、arp_announce 等参数,但会比较复杂。所以,一般不建议同一个 Bridge 上有多个端口接入到 Linux Kernel TCP/IP Stack,而是应该使用 Network Namespace 进行 TCP/IP Stack 的隔离(veth pair 的两端处于不同的 Namespace)。上述只是用于说明的测试拓扑。

  2. 在无线网络环境中,情况会变得比较复杂,因为无线网络需要登录,登陆后无线路由器只认一个 MAC 地址。所有,从这台机器出去的 MAC 地址都必须是那一个,于是通过无线网卡上网的机器上的所有 VMs 想要上网的话,都必须依赖虚拟机管理软件(e.g. VirtualBox)将每个虚拟机的网卡 MAC 地址转成同一个出口的 MAC 地址(即:无线网卡的 MAC 地址),数据包回来的时候还要转回来。所以,如果一个 IP 有两个 ARP replay 的话,有可能导致 MAC 地址的转换有问题,导致网络不通,或者有时通有时不通。解决办法就是将连接进 br0 的所有设备的 MAC 地址都改成和 eth0 一样的 MAC 地址,因为 eth0 的 MAC 地址会被虚拟机正常的做转换。

$ ip link set dev veth1 down# 08:00:27:3b:0d:b9 是 eth0 的 MAC 地址。
$ ip link set dev veth1 address 08:00:27:3b:0d:b9
$ sudo ip link set dev veth1 up

Linux Bridge 与虚拟机

Linux 上的 KVM 虚拟机通过虚拟网卡设备(e.g. tap、tun)将虚拟机与 Bridge 连接起来,达到与真实交换机一样的网络拓扑模型。虚拟机发出的数据包先到 br0 然后再由 br0 交给 eth0 并发送到外部网络。整个过程数据包都不需要经过宿主机的网络协议栈,效率高。

+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
|                          Host                                  |              VirtualMachine1            |              VirtualMachine2            |
|                                                                |                                         |                                         |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|       |             Newwork Protocol Stack             |       |       |  Newwork Protocol Stack |       |       |  Newwork Protocol Stack |       |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|                          ↑                                     |                   ↑                     |                    ↑                    |
|..........................|.....................................|...................|.....................|....................|....................|
|                          ↓                                     |                   ↓                     |                    ↓                    |
|                     +--------+                                 |               +-------+                 |                +-------+                |
|                     | .3.101 |                                 |               | .3.102|                 |                | .3.103|                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|        | eth0 |<--->|   br0  |<--->|tun/tap|                   |               | eth0  |                 |                | eth0  |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|            ↑             ↑             ↑                       |                   ↑                     |                    ↑                    |
|            |             |             +-------------------------------------------+                     |                    |                    |
|            |             ↓                                     |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |         |tun/tap|                                 |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |             ↑                                     |                                         |                    |                    |
|            |             +-------------------------------------------------------------------------------|--------------------+                    |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+↓Physical Network  (192.168.3.0/24)

Linux Bridge 与容器

容器运行在自己单独的 network namespace 里,有着自己单独的协议栈,整体上的网络拓扑与虚拟机的情况差不多,但容器采用了另一种方式来和外界通信。

容器中配置网关为 .9.1,发送的数据包先到达 br0 然后再交给宿主机的协议栈,由于目的 IP 是外网 IP,且宿主机开启了 IP forward(路由转发)功能,于是数据包就会通过 eth0 发送出去。由于 .9.1 是内网 IP,所以一般发出去之前会先做 NAT(网络地址转换)。显然 “容器+Bridge” 的性能没有 “虚拟机+Bridge” 的好,不过优点是容器处于内网中,安全性相对要高点。(由于数据包统一由 IP 层从 eth0 转发出去,所以不存在上文提到的多个 MAC 地址应答的问题)

+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
|                          Host                                  |              Container 1                |              Container 2                |
|                                                                |                                         |                                         |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|       |             Newwork Protocol Stack             |       |       |  Newwork Protocol Stack |       |       |  Newwork Protocol Stack |       |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|            ↑             ↑                                     |                   ↑                     |                    ↑                    |
|............|.............|.....................................|...................|.....................|....................|....................|
|            ↓             ↓                                     |                   ↓                     |                    ↓                    |
|        +------+     +--------+                                 |               +-------+                 |                +-------+                |
|        |.3.101|     |  .9.1  |                                 |               |  .9.2 |                 |                |  .9.3 |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|        | eth0 |     |   br0  |<--->|  veth |                   |               | eth0  |                 |                | eth0  |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|            ↑             ↑             ↑                       |                   ↑                     |                    ↑                    |
|            |             |             +-------------------------------------------+                     |                    |                    |
|            |             ↓                                     |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |         |  veth |                                 |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |             ↑                                     |                                         |                    |                    |
|            |             +-------------------------------------------------------------------------------|--------------------+                    |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+↓Physical Network  (192.168.3.0/24)

Linux Bridge 的 MAC 地址行为

# 创建 bridge,查看默认 MAC
$ ip link add br-mac type bridge
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether f6:b0:c9:7c:04:1d brd ff:ff:ff:ff:ff:ff# 创建 veth pair 设备
$ ip link add mac-veth01 type veth peer name mac-veth02
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether f6:b0:c9:7c:04:1d brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# attach mac-veth01(大 MAC)
$ ip link set dev mac-veth01 master br-mac
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50(自动变为mac-veth01的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# attach mac-veth02(小 MAC)
$ ip link set dev mac-veth02 master br-mac
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether 92:a2:23:d5:88:56(变化为小mac,mac-veth02的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# 增加 mac-veth02 的 MAC
$ ifconfig mac-veth02 hw ether de:ee:ff:8d:0c:51
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50(变化为小mac,mac-veth01的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# 更改 br-mac 的 MAC(大 MAC)
$ ifconfig br-mac hw ether de:ee:ff:8d:0c:52
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:52(变化为指定的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# 设置 br-mac same as mac-veth01,mac-veth02 MAC 减小
$ ifconfig br-mac hw ether de:ee:ff:8d:0c:50
$ ifconfig mac-veth02 hw ether de:ee:ff:8d:0c:49
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50(和设置的 mac 一样,不变) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff# 增加 mac-veth01 的 mac
$ ifconfig mac-veth01 hw ether de:ee:ff:8d:0c:51
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50(mac 不变) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff# 增加新的设备
$ ip link add mac-veth03 type veth peer name mac-veth04
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
23: mac-veth04: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 46:62:dd:cd:4f:41 brd ff:ff:ff:ff:ff:ff
24: mac-veth03: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether c6:3f:65:95:e0:93 brd ff:ff:ff:ff:ff:ff# attach mac-veth04(小 mac)
$ brctl addif br-mac mac-veth04
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default link/ether de:ee:ff:8d:0c:50(不变) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
23: mac-veth04: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000link/ether 46:62:dd:cd:4f:41 brd ff:ff:ff:ff:ff:ff
24: mac-veth03: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether c6:3f:65:95:e0:93 brd ff:ff:ff:ff:ff:ff

结论:br0 如果没有指定 hw MAC,br0 的 MAC 地址会根据 bridge 中 port 的变化,自动选择 port 中最小的一个 MAC 地址作为 br0 的 MAC 地址。br0 只能指定 port 中有的 interface 的 MAC 作为 br0 的 MAC 地址。

Linux Bridge 常用指令

help:

$ brctl
Usage: brctl [commands]
commands:addbr       <bridge>        add bridgedelbr       <bridge>        delete bridgeaddif       <bridge> <device>   add interface to bridgedelif       <bridge> <device>   delete interface from bridgehairpin     <bridge> <port> {on|off}    turn hairpin on/offsetageing   <bridge> <time>     set ageing timesetbridgeprio   <bridge> <prio>     set bridge prioritysetfd       <bridge> <time>     set bridge forward delaysethello    <bridge> <time>     set hello timesetmaxage   <bridge> <time>     set max message agesetpathcost <bridge> <port> <cost>  set path costsetportprio <bridge> <port> <prio>  set port priorityshow        [ <bridge> ]        show a list of bridgesshowmacs    <bridge>        show a list of mac addrsshowstp     <bridge>        show bridge stp infostp         <bridge> {on|off}   turn stp on/off

常用指令:

# 创建网桥
brctl addbr br-test
# 为网桥添加物理接口
brctl addif br-test enp4s0
# 删除网桥
brctl delbr br-test
# 删除网桥接口
brctl delif br-test enp4s0
# 显示网桥列表信息
brctl show
# 显示网桥br-test的信息
brctl show br-test
# 显示网桥的MAC地址信息
brctl showmacs br-test
# 显示网桥的stp信息
brctl showstp br-test
# 开|关 STP 生成树,关闭可以减少数据包污染
brctl stp br-test on|off
# 为网络设备开启混杂模式
ifconfig eth0 0.0.0.0 promisc

Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)的基本操作相关推荐

  1. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)

    目录 文章目录 目录 Linux bridge Linux bridge 的实现方式 Linux bridge 的代码逻辑 Linux bridge 在 Linux 的语境中,Bridge(网桥)和 ...

  2. Linux Kernel TCP/IP Stack — L2 Layer — Linux VLAN device for 802.1.q(虚拟局域网)

    目录 文章目录 目录 虚拟局域网(Linux VLAN device for 802.1.q) 虚拟局域网(Linux VLAN device for 802.1.q) VLAN 的种类很多,按照协议 ...

  3. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)的实现原理

    目录 文章目录 目录 基本概念 QoS.Bandwidth 和 Traffic Control 队列 FIFO 队列 pfifo_fast 队列 SFQ 队列 令牌桶队列 数据流(Data Flow) ...

  4. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)

    目录 文章目录 目录 tc CLI - Linux 流量控制工具 TC 的基本原理 TC 的组件 Qdisc 无类别队列规定(Classless Qdiscs) 分类队列规定(Classful Qdi ...

  5. Linux Kernel TCP/IP Stack — L2 Layer

    目录 文章目录 目录 L2 Layer IEEE 802 协议族 L2 Layer IEEE 802 协议族 802.1 VLAN 802.3 CSMA/CD 802.5 Token Ring(令牌环 ...

  6. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)的基本操作

    目录 文章目录 目录 使用 TC 进行流量控制 创建队列 创建分类 设置过滤器 上行带宽限制 下行带宽限制 对 SrcIP 进行限速 使用 TC 进行流量控制 综上,Linux 要对网卡进行流量控制, ...

  7. Linux Kernel TCP/IP Stack — L2 Layer — switchdev L2 Offload

    目录 文章目录 目录 switchdev 框架(二层交换 Offload 实现) switchdev 框架(二层交换 Offload 实现) Linux 4.0 引入了 switchdev 框架,它代 ...

  8. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架

    目录 文章目录 目录 netfilter 框架 netfilter 的组成模块 netfilter 的 Hook 机制实现 netfilter 的工作原理 规则(Rules) 链(Chains) 表( ...

  9. Linux Kernel TCP/IP Stack — L7 Layer — Application Socket I/O 接口类型

    目录 文章目录 目录 基本概念 同步与异步 阻塞与非阻塞 I/O 操作的执行流程 Socket I/O 接口类型 阻塞 IO 缺点 非阻塞 IO 缺点 阻塞 IO 与非阻塞 IO 的区别 IO 多路复 ...

最新文章

  1. 【经典书籍】深度强化学习实战(附最新PDF和源代码下载)
  2. Shell主要逻辑源码级分析(1)——SHELL运行流程
  3. Windows 系统电脑开机速度加快
  4. 裁员纪实——联想不是我的家(转帖)
  5. Simulink中的某一个模块用了我自己定义的MATLAB function模块,但是出现的结果是:The block ‘**/matlab function/sfunction‘ is in an
  6. python lambda 判断_在Python的Filter中使用lambda函数时,为何达不到预期效果?
  7. MFC开发 常见控件库
  8. linux下安装杰奇2.4,实现关关采集器远程采集详细教程
  9. 电脑截图怎么转换成文字?学会这个方法,轻松实现
  10. H3C VRRP实验
  11. 用计算机弹EXO简谱,Power钢琴简谱-数字双手-EXO
  12. java 仿易企秀_鲁班H5(开源可视化搭建系统, 可以理解为开源版本易企秀)核心实现原理解析...
  13. 记录一下,为什么QQ复制整个文件夹后,仍然没有聊天记录
  14. 耳机不分主从是什么意思_“小雪不分股,大雪不出土”指什么意思?立冬过后还能种小麦吗?...
  15. 项目管理:KANO模型
  16. 程序员中年危机:半路出家Java程序员看我轻松逆袭
  17. CISCO ASAv 9.15 - 体验思科上一代防火墙
  18. 论文写作课程总结及论文写作计划
  19. 无人机光流模块的选择
  20. 混淆电路简介(GC)

热门文章

  1. android 保存崩溃信息,Android保存每次运行崩溃报告的日志
  2. 一级二级标题_考二级造价师有啥要求?
  3. java多线程发牌 一个发牌 三个玩家_JAVA代码之斗地主发牌
  4. 交换机模拟配置软件_网络设备模拟器Packet Tracer实验
  5. 脑电分析系列[MNE-Python-8]| 参考电极简介
  6. 把RNN植入体内,仅凭一张“薄片”,就能直接检测你有无心律异常 | Science子刊...
  7. 张艺谋镜头里的科技力量:为世界注入5G之心
  8. 马斯克欢庆特斯拉年交付50万辆!国产三雄创新高,逼近其1/5
  9. 波士顿动力机器狗半夜遛弯儿惊呆路人,还配合拍照,网友:想到了《黑镜》...
  10. 揭秘罗永浩直播带货幕后之师