《跟唐老师学习云网络》 - Bridge网桥
1 什么是Linux-Bridge
咱们直接说人话:跟tap/tun、veth-pair是模拟网线的类似,Bridge也是照着物理设备的样子,在Linux系统里面虚拟出来的一种网络设备。
因为它也是网络设备,所以可以配置 IP、MAC 等。然后它模拟的物理设备叫Hub(集线器)。
1.1 物理集线器Hub
很多小伙可能没有见过,咱们直接上图:
上面这个东西没见过,可以参考下面这个,原理是一样一样的。
Hub的效果类似于把所有网线都焊在一起的感觉:
也就是不管信号从哪个口子进来,其他口子都能收到。“大喇叭”,“广播桶”,可以这么理解Hub。
我们以前寝室里面打小组游戏,就是大家把网线往集线器一插,然后就是一个mini小局域网了。
1.2 虚拟集线器Bridge
所以呢,Linux里面虚拟出来的这个Bridge也是这个效果。用户可以把很多网卡,插到这个Bridge上面,然后互相之间就能连通了,于是往Bridge发报文,所有插在上面的网卡全都收到这个报文。(目的比较单纯,就是把大家连在一起)
一般用来把 tap/tun、veth-pair网线连到Bridge上面,这样可以把一组容器,或者一组虚机连在一起。比如著名的Docker就是用Bridge把Host里面的容器都连在一起,使得这些容器可以互相访问。也可以把Host上面的物理网卡也加入到Bridge,这样主机的VM就可以和外界通信了。
2 容器使用Bridge
按照Docker容器举例,这里会把多个容器的veth网线的一头,插入到Bridge,使得所有容器相当于焊在一起。同时在主机上,我们可以看到的网卡会多1个叫docker0的网卡(docker0就是Bridge网桥):
Ps:这里有个有意思的地方是,没有把主机上原有的那个eth0也加入到Bridge。而虚机使用Bridge,一般会把原来Host上面的网卡加入到Bridge。(容器不加入,一是因为大量容器的IP,可能会和Host所在网络上,它那些兄弟VM们的IP冲突。二还有容器网络模式可以多种模式选择,保留灵活性。)。
至于容器怎么通过Bridge和外面的世界进行通信,这个咱们在后续的《Docker网络实战》里面详解。
3 虚机使用Bridge
虚机这里不一样的是,一般会把Host自己原来的eth0网卡,也一块加入到Bridge(如果虚机想要联网的话)。相当于上面4个“人”都是兄弟了,大家在一个局域网。
通过Bridge,可以把所有的虚拟机网络连在一起。
上面这些VM以为自己的世界:
后面你可以回到原来物理网络的视角去理解更高级的怎么给VM分组问题(不明白的可以回顾早期课程)。要给VM分帮派,或者说给这些VM们分不同的子网,就需要能给这些VM打VLAN的tag的功能,这个功能Bridge(集线器)就搞不定了,需要引入更高级的“路由器”。
Ps:物理世界也差不多,集线器的价格很便宜,和路由器的价格不是一个档次的。路由器可以设置每个端口的VLAN标记等高级功能。也就是咱们下一期的OVS(Open vSwitch)课程了。
4 怎么查看Bridge信息
一般我都用 brctl 这个命令行(ip命令也可以用,但是我感觉brctl更直接),比较方便:
4.1 查询Bridge信息
用的最多的就是,查询一个Bridge上面插了哪些网卡:也就是show这个子命令
上面这个可以看到,有四个veth网卡插在名字为docker0的Bridge网桥上面(其实就是有4个容器连在一起)。
4.2 网卡插入Bridge
用的第二多的就是 把一个网卡插入一个Bridge里面。即:addif 子命令
我们可以试一下,先创建一根“网线”
ip link add tsj-0 type veth peer name tsj-1
然后创建一个Bridge
brctl addbr tsj-br
然后把网线一头插入这个Bridge。
brctl addif tsj-br tsj-0
查询结果:
brctl show tsj-br
额,其实“容器世界”也是这么创建出来的。
- 点赞
- 收藏
- 关注作者
评论(0)