背景

最近接触docker的网络配置方式,发现其默认会创建一个docker0的Linux Bridge,宿主机上运行的容器可以通过连接该birdge实现与外网的通信,根据bridge这个命名很自然的认为这就是一个传统意义上的硬件网桥的软件实现,然而进一步探究后发现并非如此,Linux Bridge其实并不是一个虚拟网桥,而应该视为一个虚拟交换机更合适。

进一步的探究过程引发了一些缠绕在心中多年不甚清晰的网络交换设备知识问题,这里记录一下自己的思考总结,如有不对欢迎勘正。

网络交换设备之灵魂拷问

  1. 网桥是什么?
  2. 交换机是什么?
  3. 二层交换机、三层交换机有什么区别?
  4. 路由器是什么?
  5. 交换机、路由器有什么区别?

TCP/IP模型 && OSI七层模型

要解决上述问题,不可避免要先了解经典的TCP/IP模型与OSI七层模型这两个概念,如下为两个模型的图解:



左边的TCP/IP分层模型是现代网络协议栈的实际标准,但是讨论网络相关分层时,大家一般都采用右边的OSI参考模型分层,像是集线器、网桥、交换机、路由器都是工作在都是工作在一层(物理层)、二层(数据链路层)、三层(网络层)这下面三层,再比如nginx负责HTTP 协议的反向代理时我们说它是七层(应用层)负载均衡,而其作为TCP/UDP协议的反向代理时则说它是四层(传输层)负载均衡。

网络交换设备演进

这里以从下至上的角度梳理一下基础网络设备的发展与原理。

互联需求产生的集线器

上世纪70年代以太网被发明出来之后,多台计算机如果要互联需要一个统一的黑盒子负责中转互相之间的发送的数据,即所有需要联网的计算机均通过网线与这个黑盒子相连--经典的星型网络结构,这个黑盒子就是集线器,集线器只负责将任意端口收到的物理电信号广播到其他所有端口,完全不关心数据的具体内容与格式。

考虑下如果不采用星型结构,而是任意两台电脑要想通信则用网线将其网络端口直接相连,要实现N台电脑的相互连接需要N*(N-1)/2个连接,也就是说10台电脑要全部45条网线,每台计算需要9个网线接口,这明显是不现实的同时也是绝对不划算的。

而如果采用环型结构,虽然10台计算同样只需要9根网线,每台计算机也只需要一个网线接口,但是其中部分计算机之间的通信需要经过多次不必要的中转,且任意一台计算机故障、关机就会导致网络故障,任意两台故障、关机就会导致网络直接分裂为2个独立网络。

互联+隔离冲突域需求产生的网桥

随着以太网的流行,越来越多办公室开始接入它,网络通信的距离和计算机的数量都急剧增长,距离过长会导致信号衰减,这可以通过给集线器加入中继功能保证信号的可靠,但是每个办公室每台计算机发送的数据如果每个集线器都无脑转发,网络中会充斥大量无用数据。

比如办公室A内部两台计算机只是通过以太网互相传输一个内部文件,集线器却会最终将其广播到全球所有接入以太网的办公室,这明显是不可接受的。

于是网桥出现了,网桥看上去是只有两个端口的智能版集线器,首先其只会将两个端口收到的信息转发到彼此端口,但是在转发时网桥会开始关注数据链路层的MAC地址,其添加了MAC地址学习功能。当网桥收到端口0的数据时,其会检查数据目的MAC地址是否来自端口0连接的网络,如果是则过滤该数据不会转发到端口1,目的MAC明确属于端口1的网络或者没有对应MAC记录时才会转发数据到端口1,这样就可以避免一个办公室内网MAC之间通信的数据被无脑广播到全世界了。

网桥的连接模式图示(红色节点为集线器):

适用小型局域网的二层交换机

早期的二层交换机工作原理与网桥类似,其也是通过识别数据链路层的MAC地址实现源端口到目的端口的数据转发,早期的交换机不严格的说可以视为一个高度集成版的网桥,普通网桥只有两个端口能连接两台计算机,而交换机则有多个端口可以连接多台计算机,并且任意两个端口之间都可以实现数据的转发,N个端口的交换机可以简单视为提供了N*(N-1/)/2的彼此独立的网桥。

如下为交换机连接模式的图示:



早期的二层交换机,纯工作在数据链路层,因此无法隔离广播域--当交换机不知道数据目的MAC属于哪个端口时,会对所有其他端口广播对应数据造成广播风暴。要解决这个问题,也就出现了后面的三层交换机。

适用大型局域网的三层交换机

三层交换机在工作时会同时考虑数据链路层中的MAC地址与网络层中的IP地址,简单来说如果交换机中已经记录了数据的目的MAC对应端口,会直接走二层交换转发数据到对应端口,而如果没有目的MAC信息,不像二层交换机直接广播所有端口,而是通过识别网络层中的IP地址进行路由后选择指定端口转发数据,后面如果收到了目的MAC的回包,三层交换机会更新自己记录的MAC到端口映射表,在后面到目的MAC的数据包转发时就直接走二层的交换即可--即一次路由,多次转发。

三层交换机主要是用于大型局域网内切分多个小局域网的场景,因为对于一个大型局域网将其切分为多个小局域网能使一个大的广播域被分割成多个小的广播域,隔离了广播风暴,同时其一次路由多次转发的工作原理又能保证整个大型局域网内数据的高效交换。

连接局域网与广域网的路由器

路由器与三层交换机一样都会根据网络层中的目的IP地址按照路由策略转发数据,可以隔离所连接网络的广播域,单从这看上去和三层交换机好像没有区别,但是其实两者之间存在很多差异,根据查询资料及自我理解总结如下:

  1. 路由器选择转发端口时仅根据网络层IP路由策略,而三层交换机大部分时候都是走数据链路层转发,
  2. 路由器的IP路由策略比三层交换机复杂得多--可以处理复杂的路由路径和网络连接,具备选择最佳路由、负荷分担、链路备份以及与其他网络进行路由信息的交换等功能,而三层交换机的IP路由策略比较简单,甚至可以直接通过硬件实现
  3. 基于以上两点单就交换数据的性能上三层交换机的转发效率是高于路由器的
  4. 路由器可以连接很多不同类型的网络(如以太网、ATM网、FDDI网、令牌环网等),支持不同的连接介质(如以太网接口、令牌环接口、FDDI接口、E1/T1接口等),而交换机一般只支持以太网
  5. 综上,最最重要的,同样的转发效率下路由器比交换机贵得多_

转载请注明出处,原文地址:https://www.cnblogs.com/AcAc-t/p/hub_bridge_switch_router_summary.html

参考

https://segmentfault.com/a/1190000009491002

https://www.cnblogs.com/AcAc-t/p/hub_bridge_switch_router_summary.html

https://www.cnblogs.com/bakari/p/10529575.html

https://www.cnblogs.com/xiaolincoding/p/12638546.html

https://zhuanlan.zhihu.com/p/158219925

https://zhuanlan.zhihu.com/p/440970417

https://zhuanlan.zhihu.com/p/158219925

https://www.zhihu.com/question/67473683/answer/254496942

https://zhuanlan.zhihu.com/p/110427712

https://sites.google.com/site/emmoblin/linux-network-1/san-ceng-jiao-huan-ji-yu-lu-you-qi-de-qu-bie

https://m.hqew.com/tech/yqj_6414

https://www.51cto.com/article/708872.html

从Linux Bridge引发的网桥、交换机与路由器区别探究的更多相关文章

  1. TCP/IP协议原理与应用笔记16:交换机和路由器区别

    1.交换机和路由器区别 (1)交换机:     交换机是一种基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备.交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的 ...

  2. 4..部署场景2:带有遗留的Linux Bridge

    此场景描述了使用Linux bridge的ML2插件实现OpenStack网络服务的遗留(基本)实现. 遗留实现通过为常规(非特权)用户提供一种方法来管理一个项目中的虚拟网络,并包含以下组件:提供了自 ...

  3. 理解 neutron(15):Neutron linux-bridge-agent 创建 linux bridge 的简要过程

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. ebtables和iptables与linux bridge的交互

    本文为翻译文,不一定是逐字逐句的翻译,而且中间会加上自己的一点见解,如有理解错误的地方,还请大家指出,我定虚心学习.原文见链接 其中斜体字是自己的理解,建议和ebtables手册和iptables手册 ...

  5. 理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虚拟网络

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  6. linux下brctl配置网桥

    原文:http://zhumeng8337797.blog.163.com/blog/static/1007689142011643834429/ 先装好网卡,连上网线,这是废话,不用说了. 然后开始 ...

  7. Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  8. 一个关于Linux Bridge配置的吐嘈

    话说有些事情十分适合在放假前的一天折腾一天,但绝对不适合在你准备去吃饭前多看一眼...我上周就碰到了这么一件揪心的事,终于以低血糖收场.十分狼狈地四处觅食,却觅到了一包超级辣的鸡爪.吃完后感觉症状加重 ...

  9. Linux网卡设置为网桥模式

    Linux网卡设置为网桥模式 1.    添加网卡,并修改相关配置文件 1.1虚拟机添加网卡,并配置相关文件 如:eth2为新添加网卡 cd /etc/sysconfig/network-script ...

  10. 基于 Linux Bridge 的 Neutron 多平面网络实现原理

    目录 文章目录 目录 前言 前文列表 多平面网络 Local(本地网络) Flat(扁平网络) 配置 Flat 网络 VLAN 配置 VLAN 网络 VxLAN 配置 VxLAN 网络 GRE 前言 ...

随机推荐

  1. 使用.NET开发搭建OpenAI模型的中间服务端

    前言:前不久微信上大家玩ChatGPT聊天机器人玩的不亦乐乎:不过随着ChatGPT被封杀,所以用微信聊天机器人有可能导致封号的风险.那如果自己不想每次都去OpenAI官网上进行对话[PS:官网上面聊 ...

  2. 【机器学习】李宏毅——AE自编码器(Auto-encoder)

    1.What 在自编码器中,有两个神经网络,分别为Encoder和Decoder,其任务分别是: Encoder:将读入的原始数据(图像.文字等)转换为一个向量 Decoder:将上述的向量还原成原始 ...

  3. Jmeter 之 If 逻辑控制器

    在Jmeter 中如要在某种场景中才执行特殊请求,此时可用If 逻辑控制器来实现. If 逻辑控制器顾名思义当符合某个条件时则执行,添加路径:测试计划->线程组->逻辑控制器->if ...

  4. HBase详解(05) - HBase优化 整合Phoenix 集成Hive

    HBase详解(05) - HBase优化 整合Phoenix 集成Hive HBase优化 预分区 每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维 ...

  5. 如何使用Redis和RabbitMQ实现一个学生抢课系统(可类比商品秒杀系统)

    1.如何使用Redis和RabbitMQ实现一个学生抢课系统(可类比商品秒杀系统) 电商项目中的秒杀场景我们都很常见,不只是京东和淘宝现在很多的小程序公众号也有做现时限购的秒杀场景,那么如何做一个秒杀 ...

  6. 突如其来的"中断异常",我(Java)该如何处理?

    # **一.何为异常?** ## 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导 ...

  7. Node.js学习笔记----day01

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.Node.js的简介 Node.js是什么 (1)Node.js不是一门语言 (2) Node.js也不是库,也不是框架 (3)Node. ...

  8. Nacos注册中心 (介绍与配置)

    Nacos注册中心 和Euraka一样都是注册中心,但Nacos不需要注册Nacos,因为阿里巴巴已经注册在好了.只需要下载安装后打开即可 Windows安装 开发阶段采用单机安装即可 1.1.下载安 ...

  9. linux-各个目录下重要文件、用户、用户组

    1.⽹络不通排查流程 1. 确认⽹关地址是否通畅 2. 确认⽹卡配置是否正确 3. 确认⽹络管理服务是否关闭 systemctl stop NetworkManager systemctl disab ...

  10. Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

    前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置 概述 在分析 K8S 集 ...