前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【我在拉勾训练营学技术】分布式问题解决方案整理

【我在拉勾训练营学技术】分布式问题解决方案整理

作者头像
程序员爱酸奶
发布于 2021-07-20 08:51:07
发布于 2021-07-20 08:51:07
51700
代码可运行
举报
文章被收录于专栏:程序员爱酸奶程序员爱酸奶
运行总次数:0
代码可运行

前言

文章内容输出来源:拉勾教育Java高薪训练营;

在面试的时候,尝尝会被问到分布式一些相关的问题,比如如何确保在分布式环境下 session 一致,分布式 ID 等等。我在拉勾训练营学习的时候,刚好老师有讲到,我就整理下来了。

一致性Hash 算法

image-20200703104027902

解决hash 冲突的方法:

开放寻址法:1放进去了,6再来的时候,向前或者向后找空闲位置存放,不好的地⽅,如果数组⻓度定

义好了⽐如10,⻓度不能扩展,来了11个数据,不管Hash冲突不冲突,肯定存不下这么多数据

拉链法:数据⻓度定义好了,怎么存储更多内容呢,算好Hash值,在数组元素存储位置放了⼀个链表.也就是出现重读的,我们就通过链表存储起来,也叫链地址法。hashmap 就是采用在这种结构哒。

hash 算法应用场景

nginx 的负载均衡

我们知道 nginx 实现负载均衡有三种方式。轮寻、设置权重、配置 ip_hash 。‘’

其中配置 ip_hash 就使用到了 hash 算法。Nginx的 IP_hash策略可以在客户端ip不变的情况下,将其发出的请求始终路由到同⼀个⽬标服务器上,实现会话粘滞,避免处理session共享问题 。对ip地址或者sessionid进⾏计算哈希值,哈希值与服务器数量进⾏取模运算,得到的值就是当前请求应该被路由到的服务器编号,如此,同⼀个客户端ip发送过来的请求就可以路由到同⼀个⽬标服务器,实现会话粘滞。

分布式存储

以分布式内存数据库Redis为例,集群中有redis1,redis2,redis3 三台Redis服务器那么,在进⾏数据存储时,<key1,value1>数据存储到哪个服务器当中呢?针对key进⾏hash处理hash(key1)%3=index, 使⽤余数index锁定存储的具体服务器节点。

普通hash 简单实现

我们写一个普通hash 的简单实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

public class GeneralHash {


    public static void main(String[] args) {


        // 定义客户端IP
        String[] clients = new String[]{
                "192.168.1.61",
                "192.168.1.48",
                "192.168.1.44",
                "192.168.1.42",
                "192.168.1.43",
                "192.168.1.73",
                "192.168.1.83",
                "192.168.1.23"};


        //服务器数量
        int count =5;


        for (String client : clients) {
            int hash = Math.abs(client.hashCode());
            int index=hash%count;
            System.out.println("IP 为:"+client+ "服务器编号为:"+index);
        }
    }
}

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IP :192.168.1.61服务器编号为:2
IP :192.168.1.48服务器编号为:2
IP :192.168.1.44服务器编号为:3
IP :192.168.1.42服务器编号为:1
IP :192.168.1.43服务器编号为:2
IP :192.168.1.73服务器编号为:0
IP :192.168.1.83服务器编号为:1
IP :192.168.1.23服务器编号为:0

普通 hash 算法存在的问题

比如上面的 ip_hash 是利用取模运算,但是如果出现一个服务宕机或者出现扩容和缩容的情况,就会导致重新hash .那么原来的会话就会丢失。

一致性 hash 算法

首先有一条一条直线。为 0 到 2 的 32 次方 -1。然后将首尾相连,形成一个闭环,也就是 hash 环。

image-20200703132632412

如下图所示:我们的服务器节点散落在这个环上。当请求的 ip 通过一致性 hash 可以找到离他最近的节点,从而进行访问。

当出现服务宕机,或者缩容时。只会影响部分的 IP 进行重新指向。

同理,增加服务器的时候,也只会影响部分 IP 重新指定。

demo 实现

我们使用 代码来实现一个一致性 hash 算法 借助 SortedMap 的 tailMap(K fromKey)获取一个子集。其所有对象的 key 的值大于等于 fromKey 。然后 firstKey() 获取最小 key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 * 无虚拟节点
 */
public class ConsistentHashNoVirtual {


    public static void main(String[] args) {


        //step 1:将服务器的节点存到 hash 环中。

        // 定义服务器节点
        String[] servers = new String[]{
                "192.168.1.10",
                "192.168.1.30",
                "192.168.1.50",
                "192.168.1.70",
                "192.168.1.90",
                "192.168.2.10",
                "192.168.1.30",
                "192.168.2.80"};

        //定义一个hash 环
        SortedMap<Integer, String> hashServerMap = new TreeMap<>();

        for (String server : servers) {
            int hash = Math.abs(server.hashCode());
            hashServerMap.put(hash,server);
        }


        //step 2:将客户端的IP映射到 hash 环中。

        String[] clients = new String[]{
                "10.168.1.10",
                "10.168.2.10",
                "10.168.3.10",
                "10.168.4.10",
                "10.168.5.10",
                "10.168.6.10",
                "10.168.7.10",
                "192.168.1.40",
                "192.168.1.60",
                "192.168.1.80",
                "192.168.2.00",
                "192.168.2.30",
                "192.168.2.50",
                "192.168.3.50",
                "192.168.4.50",
                "192.168.2.90"};


        for (String client : clients) {
            //step3 针对客户端,找到能够处理当前客户端请求的服务器(哈希环上顺时针最近)
            // 根据客户端ip的哈希值去找出哪一个服务器节点能够处理()
            int clienthash = Math.abs(client.hashCode());

            //tailMap(K fromKey)获取一个子集。其所有对象的 key 的值大于等于 fromKey
            SortedMap<Integer, String> tailMap = hashServerMap.tailMap(clienthash);
            Integer firstKey = hashServerMap.firstKey();
            if(!tailMap.isEmpty()){
                firstKey = tailMap.firstKey();
            }
            System.out.println("客户端:" + client + " 被路由到服务器:" + hashServerMap.get(firstKey));
        }
    }
}

结果:

问题

从上面的结果来看,这种会存在一问题,也就是可能出现数据倾斜。⼀致性哈希算法在服务节点太少时,容易因为节点分部不均匀⽽造成数据倾斜问题。例如系统中只有两台服务器,其环分布如下,节点2只能负责⾮常⼩的⼀段,⼤量的客户端请求落在了节点1上,这就是数据(请求)倾斜问题。

解决方案

一致性hash 算法引入了虚拟节点机制。为每个服务节点计算多个hash,每个hash 放置一个服务器几点,称为虚拟节点。

具体做法可以在服务器ip或主机名的后⾯增加编号来实现。⽐如,可以为每台服务器计算三个虚拟节点,于是可以分别计算 “节点1的ip#1”、“节点1的ip#2”、“节点1的ip#3”、“节点2的ip#1”、“节点2的ip#2”、“节点2的ip#3”的哈希值,于是形成六个虚拟节点,当客户端被路由到虚拟节点的时候其实是被路由到该虚拟节点所对应的真实节点

demo 实现

我们在上面代码的基础上增加,虚拟节点。这里的 rehash 算法需要实际调整,我这里只是随便写的。

image-20200703164212953

就在原来的基础上加了这部分代码,我们再运行看下。可以看到原来后面这部分就重新分配了。

集群时钟同步问题

当我们的服务部署在多台服务器时,如果这些服务器的时间不一致必定会导致各种问题。

所以需要保证集群所在的服务器时间保持一致。

可以联网

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#使⽤ ntpdate ⽹络时间同步命令
ntpdate -u ntp.api.bz #从⼀个时间服务器同步时间

不能联网

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、如果有 restrict default ignore,注释掉它
2、添加如下⼏⾏内容
 restrict 172.17.0.0 mask 255.255.255.0 nomodify notrap # 放开局
域⽹同步功能,172.17.0.0是你的局域⽹⽹段
 server 127.127.1.0 # local clock
 fudge 127.127.1.0 stratum 10
3、重启⽣效并配置ntpd服务开机⾃启动
 service ntpd restart
 chkconfig ntpd on

分布式 ID 解决方案

image-20200703171349839

解决方法:

  • UUID 使用uuid 最为主键,每次都会随机生成保证不一样。
  • 独⽴数据库的⾃增ID
  • SnowFlake 雪花算法

雪花算法是⼀个算法,基于这个算法可以⽣成ID,⽣成的ID是⼀个long型,那么在Java中⼀个long 型是8个字节,算下来是64bit,如下是使⽤雪花算法⽣成的⼀个ID的⼆进制形式示意

image-20200703173115718

  • 借助Redis的Incr命令获取全局唯⼀ID

分布式调度问题

什么是分布式调度

  • 运⾏在分布式集群环境下的调度任务(同⼀个定时任务程序部署多份,只应该有⼀个定时任务在执⾏)
  • 分布式调度—>定时任务的分布式—>定时任务的拆分(即为把⼀个⼤的作业任务拆分为多个⼩的作业任务,同时执⾏)

定时任务与消息队列的区别

共同点:

  • 异步处理。⽐如注册、下单事件
  • 应⽤解耦。不管定时任务作业还是MQ都可以作为两个应⽤之间的⻮轮实现应⽤解耦,这个⻮轮可以中转数据,当然单体服务不需要考虑这些,服务拆分的时候往往都会考虑
  • 流量削峰。双⼗⼀的时候,任务作业和MQ都可以⽤来扛流量,后端系统根据服务能⼒定时处理订单或者从MQ抓取订单抓取到⼀个订单到来事件的话触发处理,对于前端⽤户来说看到的结果是已经下单成功了,下单是不受任何影响的

不同点:

定时任务作业是时间驱动,⽽MQ是事件驱动;

时间驱动是不可代替的,⽐如⾦融系统每⽇的利息结算,不是说利息来⼀条(利息到来事件)就算⼀下,⽽往往是通过定时任务批量计算;所以,定时任务作业更倾向于批处理,MQ倾向于逐条处理;

分布式调度框架 Elastic-Job

Elastic-Job是当当⽹开源的⼀个分布式调度解决⽅案,基于Quartz⼆次开发的,由两个相互独⽴的⼦项⽬Elastic-Job-Lite和Elastic-Job-Cloud组成。我们要学习的是 Elastic-Job-Lite,它定位为轻量级⽆中⼼化解决⽅案,使⽤Jar包的形式提供分布式任务的协调服务,⽽Elastic-Job-Cloud⼦项⽬需要结合Mesos以及Docker在云环境下使⽤。

Elastic-Job的github地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/elasticjob

主要功能介绍

  • 分布式调度协调。在分布式环境中,任务能够按指定的调度策略执⾏,并且能够避免同⼀任务多实例重复执⾏
  • 丰富的调度策略 基于成熟的定时任务作业框架Quartz cron表达式执⾏定时任务
  • 弹性扩容缩容 当集群中增加某⼀个实例,它应当也能够被选举并执⾏任务;当集群减少⼀个实例时,它所执⾏的任务能被转移到别的实例来执⾏。
  • 失效转移 某实例在任务执⾏失败后,会被转移到其他实例执⾏错过执⾏作业重触发 若因某种原因导致作业错过执⾏,⾃动记录错过执⾏的作业,并在上次作业完成后⾃动触发。
  • ⽀持并⾏调度 ⽀持任务分⽚,任务分⽚是指将⼀个任务分为多个⼩任务项在多个实例同时执⾏。
  • 作业分⽚⼀致性 当任务被分⽚后,保证同⼀分⽚在分布式环境中仅⼀个执⾏实例。

引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- https://mvnrepository.com/artifact/com.dangdang/elastic-job-lite-core
-->
<dependency>
 <groupId>com.dangdang</groupId>
 <artifactId>elastic-job-lite-core</artifactId>
 <version>2.1.5</version>
</dependency>

Session 共享问题

session 丢失问题

从根本上来说是因为Http协议是⽆状态的协议。客户端和服务端在某次会话中产⽣的数据不会被保留下来,所以第⼆次请求服务端⽆法认识到你曾经来过, Http为什么要设计为⽆状态协议?早期都是静态⻚⾯⽆所谓有⽆状态,后来有动态的内容更丰富,就需要有状态,出现了两种⽤于保持Http状态的技术,那就是Cookie和Session。⽽出现上述不停让登录的问题,分析如下图:

解决 Session ⼀致性的⽅案

Nginx的 IP_Hash 策略(可以使⽤)

同⼀个客户端IP的请求都会被路由到同⼀个⽬标服务器,也叫做会话粘滞

优点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  配置简单,不⼊侵应⽤,不需要额外修改代码

缺点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
服务器重启Session丢失
存在单点负载⾼的⻛险
单点故障问题

Session复制(不推荐)

多个tomcat之间通过修改配置⽂件,达到Session之间的复制

image-20200705163259385

优点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
不⼊侵应⽤
便于服务器⽔平扩展
能适应各种负载均衡策略
服务器重启或者宕机不会造成Session丢失

缺点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
性能低
内存消耗
不能存储太多数据,否则数据越多越影响性能
延迟性

Session共享,Session集中存储(推荐)

image-20200705163354860

优点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
能适应各种负载均衡策略
服务器重启或者宕机不会造成Session丢失
扩展能⼒强
适合⼤集群数量使⽤

缺点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
对应⽤有⼊侵,引⼊了和Redis的交互代码

总结

这些问题都是面试会别问到的高频问题,所以赶紧 get 吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员爱酸奶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
交换机与路由器详细比较
作为计算机网络中最重要的两种数据包转发设备,交换机和路由器在功能设计方面既存在本质差别,又包含诸多相似之处,本文从两种设备的工作原理出发,详细介绍了它们之间的种种区别与联系。
我是东东东
2018/08/01
3.4K0
交换机与路由器详细比较
交换机、集线器、路由器区别和使用
交换机、集线器、路由器区别和使用 最近看到很多人在询问交换机、集线器、路由器是什么,功能如何,有何区别,笔者就这些问题简单的做些解答。 首先说HUB,也就是集线器。它的作用可以简单的理解为将一些机器连接起来组成一个局域网。而交换机(又名交换式集线器)作用与集线器大体相同。但是两者在性能上有区别:集线器采用的式共享带宽的工作方式,而交换机是独享带宽。 这样在机器很多或数据量很大时,两者将会有比较明显的。而路由器与以上两者有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径 ,可以说一般情况下个人用户需求不大。路由器是产生于交换机之后,就像交换机产生于集线器之后,所以路由器与交换机也有一定联系,并不是完全独立的两种设备。路由器主要克服了交换机不能路由转发数据包的不足。 总的来说,路由器与交换机的主要区别体现在以下几个方面: (1)工作层次不同 最初的的交换机是工作在OSI/RM开放体系结构的数据链路层,也就是第二层,而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。 (2)数据转发所依据的对象不同 交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。 (3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域 由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。 (4)路由器提供了防火墙的服务 路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。 交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。 路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。 相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广泛应用。 目前个人比较多宽带接入方式就是ADSL,因此笔者就ADSL的接入来简单的说明一下。现在购买的ADSL猫大多具有路由功能(很多的时候厂家在出厂时将路由功能屏蔽了,因为电信安装时大多是不启用路由功能的,启用DHCP,打开ADSL的路由功能),如果个人上网或少数几台通过ADSL本身就可以了,如果电脑比较多你只需要再购买一个或多个集线器或者交换机。 考虑到如今集线器与交换机的 价格相差十分小,不是特殊的原因,请购买一个交换机。不必去追求高价,因为如今产品同质化十分严重,我最便宜的交换机现在没有任何问题。 给你一个参考,建议你购买一个8口的,以满足扩充需求,一般的价格100元左右。接上交换机,所有电脑再接到交换机上就行了。余下所要做的事情就只有把各个机器的网线插入交换机的接口,将猫的网线插入uplink接口。然后设置路由功能,DHCP等, 就可以共享上网了。 看完以上的解说读者应该对交换机、集线器、路由器有了一些了解,目前的使用主要还是以交换机、路由器的组合使用为主,具体的组合方式可根据具体的网络情况和需求来确定。
互联网金融打杂
2022/08/01
7170
网工基础:集线器、交换机、路由器的区别与使用场景
这三种设备平时我们经常遇到,集线器可能看不到了,但是我们应该都听说过。这三种设备的功能一般都不同,不同的场景用不同的设备。
网络技术联盟站
2021/11/03
2.6K0
网工基础:集线器、交换机、路由器的区别与使用场景
交换机,集线器,路由器这三者如何区分,各自的作用是什么?
首先说HUB,也就是 集线器 。它的作用能够简单的理解为将一些机器连接起来组成一个局域网。
全栈程序员站长
2022/07/11
2.4K0
完全图解二层交换机、三层交换机、路由器,哪个才是王者?
在当今高度互联的数字化时代,计算机网络成为了现代社会的重要基础设施。而在构建和优化网络时,我们经常会遇到三种核心网络设备:二层交换机、三层交换机和路由器。这些设备在网络通信中扮演着不同的角色,对于数据的转发和路由起着关键作用。本文将深入探讨这三种网络设备,从它们的工作层次、功能、应用以及优缺点等方面进行全面对比,帮助读者更好地理解和选择适合自己网络需求的设备。
网络技术联盟站
2023/08/22
4.2K1
完全图解二层交换机、三层交换机、路由器,哪个才是王者?
路由器与交换机的区别
  计算机网络往往由许多种不同类型的网络互相连接而成。如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种“互连”并没有什么实际意义。因此通常在谈到“互连”时,就已经暗示这些相互连接的计算机是可以进行通信的,也就是说,从功能上和逻辑上看,这些计算机网络已经组成了一个大型的计算机网络,或称为互联网络,也可简称为互联网、互连网。   
awwewwbbb
2022/04/26
5130
《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)
如果了解[[《网络是怎么样连接的》读书笔记 - ADSL]]和[[《网络是怎么样连接的》读书笔记 - FTTH]]两个部分的内容,应该清楚网络包在传输的过程中最终转化为电信号或者光信号传输,我们通常所说的TCP协议、IP协议、以太网等等实际上都已经被“屏蔽”的。
阿东
2022/07/04
1.1K0
《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)
集线器、交换机和路由器之间的区别?
在计算机网络中,理解集线器(Hub)、交换机(Switch)和路由器(Router)的区别至关重要。这些设备虽然在功能上都承担着连接设备的任务,但运作原理和性能特点却大相径庭,直接影响着网络传输速度、安全性和管理效率。
通往ICT之路
2025/03/24
2140
集线器、交换机和路由器之间的区别?
详细解释路由器、数据包、交换机和帧
路由器(Router)是一种网络设备,用于在不同的网络之间转发数据。它是计算机网络中的核心设备之一,主要负责将数据包从源网络转发到目标网络。
网络技术联盟站
2023/09/06
8780
详细解释路由器、数据包、交换机和帧
交换机与路由器的默契配合:它们的联系与区别
在现代网络中,交换机(Switch) 和 路由器(Router) 是最常见的两种网络设备。它们在整个网络架构中扮演着至关重要的角色,分别负责局域网(LAN)中的数据转发和跨网络之间的通信。虽然它们的功能各有侧重,但两者之间有着密不可分的联系,且在实际应用中常常互为补充。那么,交换机和路由器之间到底有怎样的关系呢?它们各自的作用是什么?如何协同工作实现网络的高效运行。
神的孩子都在歌唱
2025/03/05
1160
交换机与路由器的默契配合:它们的联系与区别
硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?
所以可以理解,大家常逛的 Github,Docker Hub, 还有P**hub ,都是为了表达它们是某类资源的中心了吧。
9号同学
2021/04/15
8.2K2
硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?
计算机网络课程论文:《浅谈交换机、路由器》
前言:这是我大三上计网课程的课程论文,花了几天心思,确实能弄懂一些以前不懂的东西,计网其实挺有趣的,只要学进去了,还是比较有趣的。为什么选择这个题目呢,因为当时每周做实验,都是跟做路由器、交换机的会H3C仿真实验+交换机的实物实验,所以有些时候搞不懂原理,干脆直接课程论文写这个方面的东西。因为是课程论文,所以要求比较低,如果有不足请指正。
程序员洲洲
2024/06/07
1950
计算机网络课程论文:《浅谈交换机、路由器》
三层交换机功能那么强大,那它可以完全取代路由器吗?
说到三层交换机和路由器,大家可能会对这两个术语感到困惑,因为它们都接收IP数据包,检查目标地址并根据路由规则传递数据包。这样看来,三层交换机就和路由器就是一样的了。事实上,它们不仅在功能上,而且在其他很多方面都存在一些差异。本文瑞哥将带大家好好了解一下三层交换机和路由器的差别。
网络技术联盟站
2024/06/03
1.6K0
三层交换机功能那么强大,那它可以完全取代路由器吗?
探索信号、数据包在集线器、交换机和路由器的转发过程
网线和集线器在信号传输中起到了重要的作用。网线通过保持信号的完整性和减少噪声干扰来确保数据的准确传输,而集线器则负责将信号广播到所有连接的线路上,以实现设备之间的通信。
一凡sir
2023/08/26
8520
探索信号、数据包在集线器、交换机和路由器的转发过程
路由器、集线器、网关、网桥的联系与区别
路由器:连接不同IP 子网的设备,负责寻径和转发,工作在OSI 的网络层。 网桥: 连接不同子网,使其透明通信,工作在数据链路层,解析数据帧。缺点是无法避免“广播风暴”。 网关(gateway):工作在应用层,不同子网间的翻译器,对收到的信息进行重新打包。 ===================================================================== 集线器: 集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去。一些集线器在分发之前将弱信号
猿人谷
2018/01/17
6.6K0
网工必懂!路由器、光猫、交换机三大设备大揭秘,区别你分得清吗?
对于网络工程师来说,理解和区分常见的网络设备如 路由器、光猫 和 交换机 是每位技术人员的必修课。这些设备看似相似,实际上它们在网络架构中的角色、工作原理和应用场景都有着显著的区别。
神的孩子都在歌唱
2025/03/05
1.4K0
网工必懂!路由器、光猫、交换机三大设备大揭秘,区别你分得清吗?
行业报告-说一说交换机
AI 算力迸发催化数通领域交换机新机遇。当前,AI 大模型训练产生的算力需求激增,交换机作为网络 架构的重要组成部分,将充分受益下游需求爆发而带来的产业景气度提升。
通往ICT之路
2024/04/09
1750
行业报告-说一说交换机
关于交换机的前世今生 (一看就懂的交换机基础知识)
今天武汉海翎光电的小编要为大家科普的是搭建网络时最常见的设备,交换机。小伙伴都知道,交换机在英文里叫做switch,交换机是一种比较省事的叫法。它的全名应该叫做以太网交换机,它还有一些姐妹,比如电话语音交换机、光纤交换机等等。要讲交换机,自然要了解它的前身,它就是集线器(图1)。用过集线器的小伙伴们可能就要暴露年龄了。
利又德智能感知
2022/04/02
1.5K0
二层交换机和三层交换机到底有啥区别?
网络交换机在当今网络架构中扮演着至关重要的角色,它们不仅能够接入各种终端设备,组建强大的局域网,还能实现所有设备之间的直接通信。随着网络技术的不断演进和应用场景的多样化,不同类型的交换机也得以广泛投入应用。
网络技术联盟站
2024/06/03
6520
二层交换机和三层交换机到底有啥区别?
二层、三层、四层交换机的区别!!
二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。具体的工作流程如下:   (1) 当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的;   (2) 再去读 取包头中的目的MAC地址,并在地址表中查找相应的端口;   (3) 如表中有与这目的MAC地址对应的端口,把数据包直接复制到这端口上;   (4) 如表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。   不断的循环这个过程,对于全网的MAC地址信息都可以学习到,二层交换机就是这样建立和维护它自己的地址表。   从二层交换机的工作原理可以推知以下三点:   (1) 由于交换机对多数端口的数据进行同时交换,这就要求具有很宽的交换总线带宽,如果二层交换机有N个端口,每个端口的带宽是M,交换机总线带宽超过N×M,那么这交换机就可以实现线速交换;   (2) 学习端口连接的机器的MAC地址,写入地址表,地址表的大小(一般两种表示方式:一为BEFFER RAM,一为MAC表项数值),地址表大小影响交换机的接入容量;   (3) 还有一个就是二层交换机一般都含有专门用于处理数据包转发的ASIC (Application specific Integrated Circuit)芯片,因此转发速度可以做到非常快。由于各个厂家采用ASIC不同,直接影响产品性能。   以上三点也是评判二三层交换机性能优劣的主要技术参数,这一点请大家在考虑设备选型时注意比较。
青果云小潘
2019/08/30
2.7K0
推荐阅读
相关推荐
交换机与路由器详细比较
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档