文章目录

  • 一、概念
  • 二、Linux桥接实现
  • 三、Linux命令
  • 查看网桥
  • 添加网桥
  • 删除网桥
  • 添加端口到网桥
  • 从网桥删除端口


一、概念

        网桥(Bridge) 一种LAN连接设备,具有两个或更多的端口,用于将一个LAN(局域网)段的帧转发到另一段。

        桥接(Bridging) 是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程。 是工作在OSI的第二层的。一般的交换机,网桥就有桥接作用。

        简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。

        交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而互相通信。

        如下图:主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D。

sriov vf 网桥 ghinf网桥_桥接

二、Linux桥接实现

        Linux内核支持网口的桥接(目前只支持以太网接口)。但是与单纯的交换机不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。小型的交换机里面只需要一块交换芯片即可,并不需要CPU。而运行着linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。

        Linux内核是通过一个虚拟的网桥设备来实现桥接的。这个虚拟设备可以绑定若干个以太网接口设备,从而将它们桥接起来。

sriov vf 网桥 ghinf网桥_网络协议栈_02

        网桥设备br0绑定了eth0和eth1。对于网络协议栈的上层来说,只看得到br0,因为桥接是在数据链路层实现的,上层不需要关心桥接的细节。于是协议栈上层需要发送的报文被送到br0,网桥设备的处理代码再来判断报文该被转发到eth0或是eth1,或者两者皆是;反过来,从eth0或从eth1接收到的报文被提交给网桥的处理代码,在这里会判断报文该转发、丢弃、或提交到协议栈上层。

而有时候eth0、eth1也可能会作为报文的源地址或目的地址,直接参与报文的发送与接收(从而绕过网桥)。

三、Linux命令

查看网桥

brctl show [网桥名称],例如:

root@ics-baytrail:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.00e04c6911ed       no              enp2s0
                                                        enp4s0

添加网桥

brctl addbr 网桥名称,例如:

brctl addbr br0

删除网桥

brctl delbr 网桥名称,例如:

brctl delbr br0

添加端口到网桥

brctl addif 网桥名称 端口名称(可多个),例如:

brctl addif br0 eth0 eth1

从网桥删除端口

brctl delif 网桥名称 端口名称(可多个),例如:

brctl delif br0 eth0