文章目录
- 一、概念
- 二、Linux桥接实现
- 三、Linux命令
- 查看网桥
- 添加网桥
- 删除网桥
- 添加端口到网桥
- 从网桥删除端口
一、概念
网桥(Bridge) 一种LAN连接设备,具有两个或更多的端口,用于将一个LAN(局域网)段的帧转发到另一段。
桥接(Bridging) 是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程。 是工作在OSI的第二层的。一般的交换机,网桥就有桥接作用。
简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。
交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而互相通信。
如下图:主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D。
二、Linux桥接实现
Linux内核支持网口的桥接(目前只支持以太网接口)。但是与单纯的交换机不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。小型的交换机里面只需要一块交换芯片即可,并不需要CPU。而运行着linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。
Linux内核是通过一个虚拟的网桥设备来实现桥接的。这个虚拟设备可以绑定若干个以太网接口设备,从而将它们桥接起来。
网桥设备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