zoukankan      html  css  js  c++  java
  • 【华为云技术分享】《跟唐老师学习云网络》

    【摘要】 跟唐老师学习云网络,已经进入到虚拟化的世界啦。Bridge是网络虚拟化中非常重要的一种设备,快来一起学习Linux-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

    额,其实“容器世界”也是这么创建出来的。

    点击这里,了解更多精彩内容

  • 相关阅读:
    【Docker】命令 restart
    【Docker】命令 rename
    小知识点笔记一(原始版)
    Java常用类——匿名对象
    Java常用类——Arrays工具类
    Java常用类——Scanner类
    Python怎么测试异步接口
    接口测试面试题
    Pycharm使用常见问题
    接口测试命令Httpie的使用
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13164735.html
Copyright © 2011-2022 走看看