中继器、集线器、网桥、交换机、路由器和网关
目录
- 前言
- 一、中继器、集线器
- 1.1 中继器
- 1.2 集线器
- 二、网桥、交换机
- 2.1 网桥
- 2.1.1 认识网桥
- 2.1.2 网桥的工作原理
- 2.1.3 生成树网桥
- 2.2 交换机
- 2.2.1 交换机的特征
- 2.2.2 交换机的交换模式
- 2.2.3 交换机的功能
- 三、路由器、网关
- 3.1 路由器的介绍
- 3.2 路由器的工作过程
- 3.2.1 前置知识
- 3.2.2 路由器的工作过程
- 总结
前言
理解这些设备的关键是他们运行在不同的层次上。之所以存在不同层的问题,是因为不同的设备使用不同的信息来决定如何交换。在典型的场景中,用户生成某些数据,然后将这些数据发送给一台远程的机器。这些数据先被传输给传输层,传输层会加上一个头(比如TCP)头,然后将结果单元往下传递给网络层。网络层也会加上一个头,形成网络层数据包(比如,形成一个IP包)。然后,该分组再往下到达数据链路层,数据链路层加上它自己的头和校验和(CRC)并将结果帧交给物理层传送出去。
一、中继器、集线器
1.1 中继器
中继器是模拟设备,主要用来处理自己所连线缆上的信号。在一个线缆上的信号被清理、放大,然后在被放到另一个线缆上。中继器并不理解帧、数据包和帧头,它们只知道把比特编码成电压的符号。例如,在经典以太网中,为了将电缆的最大长度从500米扩展到2500米,以太网允许最多使用4个中继器来增强信号。
1.2 集线器
集线器有许多条输入线路,它将这些输入线路连接在一起。从任何一条线路上到达的帧都被发送到所有其他的线路上。如果两帧同时到达,它们将会冲突,就好像它们在同一根同轴电缆上遇到后发生碰撞一样。连接到同一个集线器上的所有线路必须以同样的速度运行。集线器与中继器不同,它们(通常)不会放大入境信号,并且可以有多个输入线路。但是,集线器与中继器一样,都属于物理层设备,因而不会检查链路层地址,也不任何方式使用该地址。
二、网桥、交换机
2.1 网桥
2.1.1 认识网桥
网桥是一种工作在数据链路层的网络设备,通过检查数据链路层地址来转发帧。
网桥连接两个或多个局域网。与集线器一样,一个现代网桥有多个端口,通常具有4~48条某个类型的输入线。与集线器不同的是,网桥的每个端口被隔离成它自己一个冲突域;如果端口是全双工的点到点线路,则需要用到CSMA/CD算法。
网桥比集线器提供了更好的性能,隔离网桥端口还意味着输入线路可以不同的速度运行,甚至可以是不同的网络类型。网桥具有连接到10、100、1000Mbps以太网的端口。从一个端口接受帧并从另一个端口发送出去,需要网桥内部进行缓冲。如果帧的速度大于网桥的重发速度,网桥就可能耗完缓冲空间而不得不丢弃帧。
例如,一个千兆以太网以最快的速度向一个10Mbps以太网倾斜比特流,网桥将不得不缓冲这些比特流,接受端的网桥将可能耗完缓冲空间。即使所有的端口都以相同的速度运行,这个问题还是会存在,因为有可能多个端口往相同的端口发送帧。
网桥最初被用来连接不同种类的局域网,但由于不同局域网之间的差异,比如802.11对服务质量和安全性的要求,而以太网却没有这些概念,网桥处理这些问题的能力不够好。
因此,现代网桥(交换机)通常工作在一种网络类型,用于连接同一种网络的不同设备,然后用路由器连接不同类型的网络。
两个局域网桥接在一起的拓扑情况分两种情况:
- 连接两个多点LAN的网桥
- 连接7个点到点站点的网桥(包括集线器)
2.1.2 网桥的工作原理
每个网桥工作在混杂模式下,它接受隶属于每个端口的站发送的帧。网桥必须决定是否转发或丢弃收到的每一帧。
对于一个入境帧,它在网桥中的路由过程取决于这个入境帧从哪个端口来(源端口),以及它要往哪个目标地址去(目标端口)。整个转发过程如下:
- 如果去往目标地址的端口与源端口相同,则丢弃该帧
例如,
在图一的拓扑结构中,站A往站B发送一个帧,网桥B1查询哈希表得知,该帧的去往目标地址的端口与源端口相同,则丢弃该帧。
在图二的拓扑结构中,在点对点的链接中,用集线器把一组计算机连接到网桥,站E和站F都连接到集线器H1,进而在连接到网桥B2。如果站E发送一个帧给站F,根据集线器的工作方式,集线器会将收到的每一帧往其每一个端口发送帧,即集线器将中继该帧到B2以及F。该帧最终会从端口2到达网桥B2,网桥查询哈希表得知,发现该帧的目标地址的端口和源端口相同,网桥B2只需丢弃该帧。 - 如果去往目标地址的端口与源端口不同,则转发该帧到目标端口
- 如果目标端口未知,则使用泛洪法,将帧转发到所有的端口,除了入境帧的端口
那么,问题来了,网桥是如何找到目标地址和端口的对应关系呢?
执行这项工作的一个简单方法是为每个网桥配备一个大的哈希表。该表列出每个可能的目的地以及对应的输出端口。
当网桥第一接入网络时,哈希表为空。此时,网桥会采用一种泛洪算法(flooding algorithm):对于每个发送未知目的地址的入境帧,网桥会将该帧输出到所有的端口,该帧的输入端口除外。随着时间的推移,网桥将会学习到每个目标地址在哪里。一旦知道了一个目标地址,以后发给该地址的帧会被放到正确的端口,而不再使用泛洪。
网桥所用的算法是后向学习法(backward learning)。网桥工作在混杂模式下,它可以看到每个端口上发送的所有帧。通过检查这些帧的源地址,网桥就可获得通过那个端口能访问到哪些机器。
其工作流程如下:
当打开、关闭或者移动机器和网桥时,网络的拓扑结构会发生变化。为了处理这种动态的拓扑结构,一旦构造出了哈希表项后,帧的到达时间也被记录在相应的表项中。当一帧到达时,如果源地址已在表中,那么对应表项中的时间被更新为当前时间。因此,与每个表项相关联的时间值反映了网桥最后看到该机器发出一帧的时间。
在网桥中,有一个进程定期扫描哈希表,并且将时间值在几分钟以前的表项都清除。
2.1.3 生成树网桥
为了提高可靠性,网桥之间可使用冗余链路。比如可以在一对网桥之间并行设置两条链路。这种设计课确保一条链路宕掉后,网络不会被分成两组计算机,使得他们无法通信。拓扑结构如下图所示:
但是,这种冗余造成了拓扑环路。以图2.1.3举个例子。
假设站A给以前没有观察到的某个站发送帧,即网桥B1的哈希表上没有记录该帧的目标地址对应的端口。每个网桥遵循着常规的处理规则:对于未知目的地的帧,泛洪该帧到网桥所有的其他端口。把从站A到达网桥B1的帧称为F0。网桥B1把F0的副本F1和F2分别通过端口2和端口3发出。
当网桥B2收到帧F1和F2时,网桥B2不知道(也无法知道)这些帧是同一个帧的副本,则网桥B2把这两个帧当做不同的帧处理。因此网桥B2将F1副本发送到其他端口,同样把副本F2发往其他端口。则F1的副本F4被网桥B2通过端口2发出,F2的副本F3被网桥通过端口1发出。然后网桥B1又收到了两个未知目的地的帧,同样复制泛洪。
上面的结果造成了同一个帧被无限循环,导致链路拥塞。
解决方法:让网桥相互之间通信,然后用一颗可以到达每个网桥的生成树覆盖实际的拓扑结构。
为了建立生成树,网桥运行一个分布式算法。每个网桥周期性地从它的所有端口广播一个配置信息给邻居,同时处理来自其他网桥的消息,这些消息不被转发,因为它们的用途是构建树,这棵树被用于随后帧的转发。过程如下:
- 全体网桥必须首先选择一个网桥作为生成树的根。
每个网桥在自己的配置信息中包含一个标识符并作为根网桥选择的标识符。网桥标识符基于mac地址,MAC地址有网卡制造商预先设置好,确保唯一性。全体网桥选择具有最低标识符的网桥作为生成树的根。经过足够的消息交换和扩散,最终所以网桥都同意这个根。 - 构造从根到每个网桥的最短路径树。
为了找到从根到每个网桥的最短路径,网桥在它们的配置消息中包含于根的距离。每个网桥记住它找到的到根的最短路径。然后关闭那些不属于最短路径一部分的端口。 - 根据最短路径树转发每个帧,并自动检测拓扑结构的变化,从而更新生成树。
2.2 交换机
交换机是现代网桥的另一个称呼。它们的差异更多的体现在市场上而不是技术方面。
开发网桥时正是经典以太网被广泛使用之际,网桥倾向于连接相对数目较少的局域网,因而端口数也相对较少。现代交换机的安装都使用了点对点连接(例如双绞线),单个计算机通过双绞线直接插入到交换机端口,因此交换机的端口数往往比较多。
“交换机”也可作为一般术语使用。使用网桥,功能是明确的。另一方面,交换机可以指以太网交换机,也可以指一个完全不同的转发决策设备,例如电话交换机。
现在,交换机用来连接同一个网络的不同机器。
2.2.1 交换机的特征
- 用于连接同一个网络的不同设备
- 全双工,一个端口可以同时输入帧,也可以发送帧
- 连接到每个端口的带宽可以不同,自适应。
2.2.2 交换机的交换模式
- 直通式交换
- 交换机只要看到MAC地址就可决定如何转发帧,有可能一旦从入境线路输入帧的目的地址字段马上就可以转发,此时帧的其余部分可能还在输入。
- 优点是延迟较小
- 缺点是小于64字节的帧以及坏帧也一块转发,可能浪费带宽。
- 存储转发
- 转发之前要收到完整的帧并进行CRC校验,确定目的地址
- 交换机将整个帧存储在内存缓冲区中,直到获得有效资源才将其发往目的地
- 好处是能够抛弃小于64字节的帧以及其他受损的帧,节约宽度
- 缺点是延迟较大且不固定,因为在转发之前要收到并处理完整的帧
- 碎片隔离
- 收到帧的前64个字节后立即进行转发
- 当帧的大小小于64字节,则丢弃该帧,如果某个帧大于64字节,则不会进行校验,收到前64个字节后直接转发,即使这个帧是一个受损的帧
2.2.3 交换机的功能
- 地址学习
- 帧的转发和过滤
- 环路防止(生成树)
三、路由器、网关
3.1 路由器的介绍
路由器工作在网络层,用来跨网段通信,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备,因此路由器是互联网中必不可少的网络设备之一,主要分为本地路由器和远程路由器。
常见的家庭路由器包含LAN口和WAN口。LAN口用于连接家庭设备,WAN口用于接入运营商网络,以连接互联网。
3.2 路由器的工作过程
3.2.1 前置知识
当忽略路由器的WAN口,路由器就是一台交换机。当对WAN口进行讨论时,那么就涉及到两个不同网络的互联,两个互联的网络进行数据的交换需要通过网关才可以就行。此时,路由器就担任网关的角色。
那么网关到底是什么呢?在回答这个问题之前,先介绍如何判断一个IP属于哪个网段。
32位的IP地址由高位的可变长网络和低位的主机两部分数据组成。
把可变长网络全部设置为1,主机全置为0,则得到子网掩码。
IP地址&子网掩码 = 网络部分
根据网络部分判断两个IP地址是否属于同一子网。
3.2.2 路由器的工作过程
下面通过一个例子说明路由器的工作过程,并说明网关到底是什么,发挥怎样的作用。
先画出一个网络的拓扑结构。
当在PC0执行命令ping 192.168.2.10,执行过程如下:
- PC0通过比对网络位,判断PC5是否与其属于在同一个网段
PC0的IP地址为192.168.1.10,子网掩码255.255.255.0,则PC0的子网:192.168.1.0
PC5的IP地址为192.168.2.10,PC0用自己的子网掩码&PC5的IP地址,PC0发现自己和PC5不在同一个子网。 - PC0发现自己和PC5不在同一个子网,那么PC0会把数据包先发给网关2,即192.168.1.1/24
PC0如何知道网关2呢?
答案是,在配置PC0的IP地址时,会为PC0配置网关IP,这样当PC0发送的数据包的目标主机和自己不在同一个子网,那么就把数据包发给自己的网关。 - PC0通过使用ARP协议解析出网关2的MAC地址。PC0把数据包的目标MAC地址改为网关2的MAC地址,PC0的数据包就发送给网关。
- 网关收到数据包后,查看目标IP,根据目标IP查询路由表。路由表记录去往每个子网对应的端口,网关将数据包的MAC地址改为PC5的MAC地址。然后通过端口fa0/0发出。
通过上面的过程可以发现,网关是一个运行在路由器的一个转发进程,路由器担任网关这个角色,路由器从而把两个不同的网络互联起来。
总结
中继器和集线器属于物理层设备
网桥属于数据链路层设备,主要作用是实现数据帧的转发和过滤;现代网桥称作交换机。交换机在现代用于连接同一网络的不同设备。
路由器用于连接两个不同的网络,网关是一个运行在路由器上的转发进程。当两个不同网络的计算机通信时,路由器担任网关角色,以实现两个不同网络的计算机进行数据的交换。
相关文章:

中继器、集线器、网桥、交换机、路由器和网关
目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.1.1 认识网桥2.1.2 网桥的工作原理2.1.3 生成树网桥 2.2 交换机2.2.1 交换机的特征2.2.2 交换机的交换模式2.2.3 交换机的功能 三、路由器、网关3.1 路由器的介绍3.2 路由器的工作过程3.2.1 前置知…...

揭秘相似矩阵:机器学习算法中的隐形“纽带”
在机器学习领域,数据的处理和分析至关重要。如何有效地从复杂的数据集中提取有价值的信息,是每一个机器学习研究者都在努力探索的问题。相似矩阵,作为衡量数据之间相似性的数学工具,在机器学习算法中扮演着不可或缺的角色。 相似矩…...

攻防世界—webbaby详解
1.ssrf注入漏洞 ssrf(服务端请求伪造)是一种安全漏洞,攻击者通过该漏洞向受害服务器发出伪造的请求,从而访问并获取服务器上的资源,常见的ssrf攻击场景包括访问内部网络的服务,执行本地文件系统命令&#…...

MySQL中:cmd下输入命令mysql -uroot -p 连接数据库错误
目录 问题cmd下输入命令mysql -uroot -p错误 待续、更新中 问题 cmd下输入命令mysql -uroot -p错误 解决 配置环境变量:高级系统设置——环境变量——系统变量——path编辑——新建——MySQL.exe文件路径(如下图所示) phpstudy2018软件下&am…...

【开发利器】使用OpenCV算子工作流高效开发
学习《人工智能应用软件开发》,学会所有OpenCV技能就这么简单! 做真正的OpenCV开发者,从入门到入职,一步到位! OpenCV实验大师Python SDK 基于OpenCV实验大师v1.02版本提供的Python SDK 实现工作流导出与第三方应用集…...

基础数学-求平方根(easy)
一、问题描述 二、实现思路 1.题目不能直接调用Math.sqrt(x) 2.这个题目可以使用二分法来缩小返回值范围 所以我们在left<right时 使 mid (leftright)/21 当mid*mid>x时,说明right范围过大,rightright-1 当mid*mid<x时,说明left范…...

c语言项目-贪吃蛇项目2-游戏的设计与分析
文章目录 前言游戏的设计与分析地图:这里简述一下c语言的国际化特性相关的知识<locale.h> 本地化头文件类项setlocale函数 上面我们讲到需要打印★,●,□三个宽字符找到这三个字符打印的方式有两种: 控制台屏幕的长宽特性&a…...
力扣2831.找出最长等值子数组
力扣2831.找出最长等值子数组 思路:用二维数组存每个数字的出现下标 遍历所有数字求结果当前子数组大小:pos[i] - pos[j] 1;当前相同数个数:i - j 1;需要删去的数的个数:pos[i] - pos[j] - i j; class Solution {public:int…...

17K star,一款开源免费的手机电脑无缝同屏软件
导读:白茶清欢无别事,我在等风也等你。 作为程序员,在我们的工作中经常需要把手机投票到电脑进行调试工作,选择一款功能强大的投屏软件是一件很必要的事情。今天给大家介绍一款开源且免费的投屏软件,极限投屏ÿ…...
正则表达式二
修饰符 i:将匹配设置为不区分大小写,即A和a没有区别 var str"Google Runoob taobao runoob"; var n1str.match(/runoob/g); //runoob var n2str.match(/runoob/gi); //Runoob,runoobg:重找所有匹配项࿰…...

我的创作纪念日--我和CSDN一起走过的1825天
机缘 第一次在CSDN写文章,是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记,没有去和大家区分享的想法,是一起的朋…...

递归书写树形图示例
大叫好,今天书写了一个扁型转换为树型的例子,使用的是递归,请大家食用,无毒 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" conte…...

【python】IndexError: Replacement index 1 out of range for positional args tuple
成功解决“IndexError: Replacement index 1 out of range for positional args tuple”错误的全面指南 一、引言 在Python编程中,IndexError: Replacement index 1 out of range for positional args tuple这个错误通常发生在使用str.format()方法或者f-string&am…...

Spring自带定时任务@Scheduled注解
文章目录 1. cron表达式生成器2. 简单定时任务代码示例:每隔两秒打印一次字符3. Scheduled注解的参数3.1 cron3.2 fixedDelay3.3 fixedRate3.4 initialDelay3.5 fixedDelayString、fixedRateString、initialDelayString等是String类型,支持占位符3.6 tim…...
代码随想录算法训练营第二十九天|LeetCode491 非递减子序列、LeetCode46 全排列、LeetCode47 全排列Ⅱ
题1: 指路:491. 非递减子序列 - 力扣(LeetCode) 思路与代码: 对于这个题我们应该想起我们做过的子集问题,就是在原来的问题上加一个去重操作。我们用unordered_set集合去重,集合中使用过的元…...

初识C++ · 优先级队列
目录 前言: 1 优先级队列的使用 2 优先级队列的实现 3 仿函数 前言: 栈和队列相对其他容器来说是比较简单的,在stl里面,有一种容器适配器是优先级队列(priority_queue),它也是个队列&#…...

php反序列化入门
一,php面向对象。 1.面向对象: 以“对象”伪中心的编程思想,把要解决的问题分解成对象,简单理解为套用模版,注重结果。 2.面向过程: 以“整体事件”为中心的编程思想,把解决问题的步骤分析出…...

嵌入式 Linux LED 驱动开发实验学习
I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,进行这个驱动开发实验之前,需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU&#x…...

C++:多态
文章目录 多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写override 和 final重载、重写(覆盖)、重定义(隐藏)的对比 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理 单继承和多继承关系的虚函数表单继承…...

Java事务入门:从基础概念到初步实践
Java事务入门:从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务?1.2 为什么需要事务? 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...