计算机网络:数据链路层 - 扩展的以太网
计算机网络:数据链路层 - 扩展的以太网
- 集线器
- 交换机
- 自学习算法
- 单点故障
集线器

这是以前常见的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细铜轴电缆。
后来,以太网发展出来了一种使用大规模集成电路,可靠性非常高的设备,叫做集线器,并且使用更便宜、更灵活的双绞线作为传输媒体。如图所示:

这是一个使用集线器和互联了四台主机的新型拓普的以太网,主机中的以太网卡以及集线器各接口之间通过双绞线电缆进行连接。
集线器上的各站共享逻辑上的总线资源,由于各个主机发送的信号依然存在碰撞的情况,所以使用的还是 CSMA/CD 协议来避免碰撞。
集线器只工作在物理层,它的每个接口仅简单的转发,不进行碰撞检测。碰撞检测的任务由各站的网卡负责。我们可将集线器简单看作是一条总线,但是相比于总线,集线器一般都有少量的容错能力和网络管理功能,例如若网络中某个网卡出现了故障,不停的发送帧,此时集线器也可以检测到这个问题。在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。-
使用集线器可以对以太网进行扩展。由于集线器只工作在物理层,所以更具体的说法是使用集线器在物理层扩展以太网。我们来举例说明:

这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域或冲突域,就是说这个域内部的主机有可能会发生相互碰撞。
但是这三个系之间,目前是不能进行通信的。
为了使各系的以太网能够相互通信,可再使用一个集线器将它们互联起来:

这样原来三个独立的以太网就互联成为了一个更大的以太网。
但是原来三个独立的碰撞域就合并成了一个更大的碰撞域。例如一系中的某台主机给 二系 中的某台主机发送数据帧。由于总线特性,该数据帧的信号会传输到整个网络中的一系,二系,三系的所有主机。
因此通过集线器来合并以太网的方式并不优秀,其虽然可以扩大以太网的覆盖范围,但是存在以下几个缺点:
- 碰撞域变大后,一个域中主机变多,数据发生碰撞的概率变大了
- 所有主机都共享该网络的带宽,扩展后整个网络的总带宽不变,被更多主机瓜分后,每个主机的带宽都减小了
- 集线器要求每个主机的数据率相同,不能兼容多种数据率的主机
在集线器之后发展出了更先进的网络互联设备,也就是以太网交换机。
交换机

交换机的每一个接口都是一个独立的碰撞域
为什么交换机可以做到隔离碰撞域呢?集线器在逻辑上可以看做一个总线,各个连接在集线器上的主机不受约束的发送消息,通过CSMA/CD协议来保证可靠传输,集线器上的任意两台主机之间都有可能会发生碰撞。
而交换机不一样,当交换机收到消息后,会根据MAC地址进行有针对性的转发,而不是粗暴的向所有端口转发,因此可以避免碰撞。
要注意的是:交换机会隔离碰撞域,但不会隔离广播域。
以太网交换机通常都有多个接口,每个接口都可以通过双绞线电缆与一台主机或另一个以太网交换机相连。一般都工作为全双工,也就是发送帧和接收帧可以同时进行。以太网交换机具有并行性能,同时连通多对接口,使多对主机能同时通信而无碰撞。
以太网交换机的接口一般都支持多种速率,例如 10 兆比特每秒、 100 兆比特每秒、 1G 比特每秒、实际比特每秒等。
以太网交换机工作在数据链路层,当然也包括物理层。收到帧后,在帧交换表中查找帧的目的 MAC 地址所对应的接口号,然后通过该接口转发帧。
那么交换机是如如何进行有针对性的消息转发的?这就涉及到交换机的核心算法:自学习算法。
自学习算法
在交换机中,会维护一张交换表,这个交换表存储了MAC地址与接口的映射关系,这样交换机就知道一个帧要往哪一个接口转发。

另外的,交换机还会额外维护一个有效时间,当交换表的某个条目超过有效时间,就会被从交换表中删除。
当交换机收到一个帧时,其会进行两个过程:自学习与转发。
自学习:
读取帧的
源地址,在交换表中查找该地址
- 如果交换表中原先存在该地址,更新该地址的
接口与有效时间条目- 如果交换表中原先不存在该地址,插入一个新的项目,并填入对应的
地址,接口,有效时间
转发:
读取帧的
目的地址,在交换表中查找该地址
- 如果没有,向除了帧进入的接口以外的所有接口转发该帧
- 如果有,判断该接口与进入的接口是否一致:如果一致,就丢掉这个帧,如果不一致,向该接口转发
接下来我们用一个案例帮助大家理解,现在我们尝试完成以下表格。

最初整个表是空的。
一开始A给B发送帧,一开始A发送的帧被传送到集线器,集线器收到帧后,只是粗暴的向除A外的所有接口转发,于是交换机1和B都会收到这个帧,B就可以收到A发送的数据了。但是这还没完,因为交换机1还要处理数据:
交换机1收到帧后,先进行自学习:帧的源地址为A的MAC地址,查找转发表后,发现没有A的地址,于是增加条目:
交换机1的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
在此我们假设有效时间默认为10 min,因为这个帧是从接口1传入的,所以转发表中的接口条目填入1。
自学习完成后,就要进行转发:
查找目的地址B的MAC地址,发现转发表中没有该地址,于是向接口1以外的所有接口转发,因为帧是从接口1进来的,所以不会向接口1再发送。
处于接口2的主机C收到帧后,发现帧的目的地址不是自己的,把它丢掉。处于接口3的交换机2收到该帧后,又要进行自学习和转发两个过程:
自学习:帧的源地址为A的MAC地址,查找转发表后,发现没有A的地址,该帧是从交换机2的接口1进入的,于是增加条目。
交换机2的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
随后再进行转发:查找目的地址B的MAC地址,发现转发表中没有该地址,于是向接口1以外的所有接口转发。主机C和D收到该帧后,发现目的地址不是自己,丢弃。

随后B再向A发送数据,由于A和B被连在同一个集线器中,此时A直接就通过集线器收到B的帧了,完成了传输。但是交换机1也会收到这个帧,此时要进行自学习和转发:
交换机1收到帧后,先进行自学习:帧的源地址为B的MAC地址,从接口1进入的交换机1,查找转发表后,发现没有B的地址,于是增加条目。
交换机1的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
| B的MAC地址 | 1 | 10 min |
随后进行转发:
查找目的地址A的MAC地址,发现转发表中有该地址,A处于接口1,而该帧就是从接口1进入的,所以交换机会直接丢弃这个帧,不会再进行转发了。

随后A再向D发送数据,交换机1会收到这个帧,此时要进行自学习和转发:
交换机1收到帧后,先进行自学习:帧的源地址为A的MAC地址,从接口1进入的交换机1,查找转发表后,发现有A的地址,于是进行更新接口和有效时间,以确保数据是最新的。
交换机1的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
| B的MAC地址 | 1 | 10 min |
上表中,A的接口和有效时间都更新了,只是和更新前没有区别而已(假设以上所有的发送过程执行的很快,所以有效时间没有变)。
随后进行转发:
查找目的地址D的MAC地址,发现转发表中没有该地址,于是向接口1以外的所有接口转发。
处于接口2的主机C收到帧后,发现帧的目的地址不是自己的,把它丢掉。处于接口3的交换机2收到该帧后,又要进行自学习和转发两个过程:
自学习:帧的源地址为A的MAC地址,查找转发表后,发现有A的地址,该帧是从交换机2的接口1进入的,于是更新条目。
交换机2的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
随后再进行转发:查找目的地址D的MAC地址,发现转发表中没有该地址,于是向接口1以外的所有接口转发。主机C收到该帧后,发现目的地址不是自己,丢弃。主机D收到该帧后,发现目的地址是自己,于是接收该帧,完成消息传送。

随后D再向A发送数据,交换机2会收到这个帧,此时要进行自学习和转发:
交换机2收到帧后,先进行自学习:帧的源地址为D的MAC地址,从接口3进入的交换机2,查找转发表后,发现没有D的地址,于是增加条目。
交换机2的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
| D的MAC地址 | 3 | 10 min |
随后进行转发:
查找目的地址A的MAC地址,发现转发表中有该地址,于是向接口1转发。
处于接口1的交换机1收到该帧后,又要进行自学习和转发两个过程:
自学习:帧的源地址为D的MAC地址,查找转发表后,发现没有D的地址,该帧是从交换机1的接口3进入的,于是增加条目。
交换机1的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
| B的MAC地址 | 1 | 10 min |
| D的MAC地址 | 3 | 10 min |
随后再进行转发:查找目的地址A的MAC地址,发现转发表中有该地址,于是向接口1转发。主机B收到该帧后,发现目的地址不是自己,丢弃。主机A收到该帧后,发现目的地址是自己,于是接收该帧,完成消息传送。

随后C再向B发送数据,交换机1会收到这个帧,此时要进行自学习和转发:
交换机1收到帧后,先进行自学习:帧的源地址为C的MAC地址,从接口2进入的交换机1,查找转发表后,发现没有C的地址,于是增加条目。
交换机1的转发表如下:
| MAC地址 | 接口 | 有效时间 |
|---|---|---|
| A的MAC地址 | 1 | 10 min |
| B的MAC地址 | 1 | 10 min |
| D的MAC地址 | 3 | 10 min |
| C的MAC地址 | 2 | 10 min |
随后进行转发:
查找目的地址B的MAC地址,发现转发表中有该地址,于是向接口1转发。主机A收到该帧后,发现目的地址不是自己,丢弃。主机B收到该帧后,发现目的地址是自己,于是接收该帧,完成消息传送。

当D关机离线,等到交换机1和交换机2中的有效时间到了后,就会把D对于的条目给删掉:

这个过程中,你会发现越到后面,交换机就会进行更加针对性的转发,以保证最高的效率。因为自学习算法相当于在累计前面转发的经验,让交换机知道当前链路更加详细的消息。
单点故障
现有如下拓扑结构:

交换机1通过接口3来向B和D发送消息,而交换机2通过接口1向A和C发送消息。
假如现在3 - 1这段线路发生了错误,那么交换机1上面的主机和交换机2上面的主机就无法通信了,这就是单点故障问题。
为了避免单点故障,以太网中会增加一些冗余的链路

这样就算某一条链路发生单点故障,也有另外一条链路可以保证连接。但是这也带来了另外的问题,那就是网络环路问题,如下:

现在A要给D发送消息:
交换机1检测后,发现D在接口3,于是通过接口3转发该帧交换机2收到后,经过检测,发现没有D的消息,于是向2 3 4三个接口转发- 通过
接口2进入交换机1,此时交换机1检测后,发现D在接口3,于是通过接口3转发该帧
此时就已经进入了一个死循环,帧会在这个循环中不断转发,D会不断收到同一条消息。
对于这个问题,IE 的 802.1D 标准制定了一个生成树协议 STP(SpanningEE Tree Protocol)。STP 不改变网络的实际拓扑结构,但在逻辑上则切断某些链路以消除网络中的环路,使网络在逻辑上变成树状拓扑。
关于STP,本博客不做详解。
相关文章:
计算机网络:数据链路层 - 扩展的以太网
计算机网络:数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细铜轴电缆。 后来,以太网发展出来了一种使用大规模…...
视频修复工具,模糊视频变清晰!
老旧视频画面效果差,视频效果模糊。我们经常找不到一个好的工具来让视频更清晰,并把它变成高清画质。相信很多网友都会有这个需求,尤其是视频剪辑行业的网友,经常会遇到这个问题。今天给大家分享一个可以把模糊视频修复清晰的工具…...
协程库——面试问题
1 同步、异步 1.1 同步 代码顺序执行,完全由用户控制. 同步阻塞 等待可读、可写的时候阻塞,不让出cpu。读、写之后,下面的代码才能执行、 同步非阻塞 等待可读、可写时,不会阻塞cpu,返回失败,设置错误码为…...
数据结构与算法题目集(中文)6-2顺序表操作集
题目地址 https://pintia.cn/problem-sets/15/exam/problems/type/6?problemSetProblemId725&page0 注意审题,返回false的时候不要返回ERROR,否则答案错误,机器规则是死的。 位置一般指数组下标,位序一般指数组下标1。但是思…...
8086 汇编笔记(十二):int 指令 端口 直接定址表
一、int 指令 int 指令的格式为:int n,n 为中断类型码,它的功能是引发中断过程 CPU 执行 intn 指令,相当于引发一个n号中断的中断过程,执行过程如下: (1) 取中断类型码 n; (2) 标志寄存器入栈,IF0&…...
揭开FFT时域加窗的奥秘
FFT – Spectral Leakage 假设用于ADC输出数据分析的采样点数为N,而采样率为Fs,那我们就知道,这种情况下的FFT频谱分辨率为δf,那么δfFs/N。如果此时我们给ADC输入一个待测量的单频Fin,如果此时Fin除以δf不是整数&a…...
【AI基础】第二步:安装AI运行环境
开局一张图: 接下来按照从下往上的顺序来安装部署。 规则1 注意每个层级的安装版本,上层的版本由下层版本决定 比如CUDA的版本,需要看显卡安装了什么版本的驱动,然后CUDA的版本不能高于这个驱动的版本。 这个比较好理解&…...
【MySQL】聊聊唯一索引是如何加锁的
首先我们要明确,加锁的对象是索引,加锁的基本单位是next-key lock,由记录锁和间隙锁组成。next-key是前开后闭区间,间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…...
k8s-CCE使用node节点使用VIP--hostNetworkhostPort
CCE使用node节点使用VIP 背景:想在节点上使用VIP,将nodeport服务做到高可用。启动VIP后发现访问失败 部署 ! Configuration File for keepalived global_defs { router_id master-node }vrrp_instance VI_1 {state BACKUPinterface eth0mcast_src_ip 10.1.0.60virtual_rou…...
18、关于优化中央企业资产评估管理有关事项的通知
一、加强重大资产评估项目管理 (一)中央企业应当对资产评估项目实施分类管理,综合考虑评估目的、评估标的资产规模、评估标的特点等因素,合理确定本集团重大资产评估项目划分标准,原则上,企业对外并购股权项目应纳入重大资产评估项目。中央企业应当研究制定重大资产评估…...
AI大模型日报#0610:港大等1bit大模型“解决AI能源需求”、谷歌开源TimesFM时序预测模型
导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-Large)生成了今日要点以及每条资讯的摘要。欢迎阅读…...
速盾:图片cdn加速 免费
随着互联网的快速发展,图片在网页设计和内容传播中起着重要的作用。然而,随着网站访问量的增加和图片文件大小的增加,图片加载速度可能会成为一个问题。为了解决这个问题,许多网站使用图片CDN加速服务。 CDN(Content …...
贪心算法例子
贪心算法概述 贪心算法是一种在每一步选择中都做出局部最优选择的算法,以期望通过一系列局部最优选择达到全局最优。贪心算法在许多优化问题中表现良好,特别是在某些特定类型的问题中能够保证找到最优解。 活动选择问题(Activity Selection Problem)背包问题(贪心解法)霍…...
vivado HW_ILA_DATA、HW_PROBE
HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心,hw_ila,在物理FPGA上,hw_device。 read_hw_ila_data命令还…...
refault distance算法的一点理解
这个算法看了好几次了,都没太理解,今天记录一下,加深一下印象。 引用某个博客对这个算法的介绍 一次访问page cache称为fault,第二次访问该页面称为refault。page cache页面第一次被踢出LRU链表并回收(eviction)的时刻称为E&#…...
软件安全技术【太原理工大学】
没有划重点,只说了一句课后题和实验中的内容都可能会出。 2022考试题型:选择20个20分,填空10个10分,名词解释4个20分,简答6个30分,分析与论述2个20分,没找到历年题。 如此看来,这门考…...
异常(Exception)
异常是什么 异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。 在java中异常由类来表示。 异常的分类 异常…...
一文者懂LLaMA 2(原理、模型、训练)
引言 LLaMA(Large Language Model Meta AI)是Meta(前身为Facebook)开发的自然语言处理模型家族之一,LLaMA 2作为其最新版本,展示了在语言理解和生成方面的显著进步。本文将详细解读LLaMA 2的基本原理、模型…...
MySQL 存储函数及调用
1.mysql 存储函数及调用 在MySQL中,存储函数(Stored Function)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑,使得在应用程序中调用时更加简单…...
设计模式七大原则-单一职责原则SingleResponsibility
七大原则是在设计“设计模式”的时候需要用到的原则,它们的存在是为了保证设计模式达到以下几种目的: 1.代码重用性 2.可读性 3.可拓展性 4.可靠性(增加新的功能后,对原来的功能没有影响) 5.使程序呈现高内聚、低耦合的…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
