交换机基础知识

Posted Which is more painful? Efforts

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换机基础知识相关的知识,希望对你有一定的参考价值。

交换机简介

由于交换机连接的每个网段都是一个独立的冲突域(collision domain),因此可以通过增加网段数,减少每个网段的用户数量,有效避免冲突的产生。

传统的交换机工作在数据链路层,用于将同一个子网的多个节点连接在一起,没有进/出口之分。它只能处理MAC地址,不能处理IP地址。

因为交换机上每个端口都和网线另一端的计算机直接相连,交换机可以通过帧的源MAX地址获得与特定接口相连的设备的地址,然后通过MAC地址在接口间转发帧。

交换机功能

地址学习

交换机维护一个MAC地址表,用于记录与其相连的设备的地址,然后使用MAC地址标进行转发。初始状态下,MAC表为空。

学习
  交换机收到帧后将源MAC地址(发送方的MAC地址)和接收接口对应起来添加到MAC地址表中,并通过泛洪(广播)将数据帧转发出去,网段上的其他主机接收到这个帧后,只有真正的接收方发出响应,其余的主机将此帧丢弃。
  接收方的响应帧返回到交换机后,它的目的MAC地址为发送方的MAC地址,此时发送方的MAC地址和它与交换机相连的接口号已经被保存在交换机的MAC地址表中,交换机则按MAC地址表中相应条目进行数据帧的转发,同时,将接收方响应帧中的源地址(即接收方的MAC地址)和接收接口对应起来添加到MAC地址表中。
  随着网络中的主机不断发送帧,这个学习过程也将不断进行下去,最终,交换机获得了一份完整的MAC地址表。

更新
  如果发现从特定接口接收到的源MAC地址发生了改变,则会用新的MAC地址替换MAC地址表中已经存在的与该接口对应的MAC地址。

MAC地址表中的条目是有生命周期的,在一定时间内交换机没有从特定接口接收到在MAC地址表中记录的与此接口对应的MAC地址发出的数据帧,交换机会认为该主机已经不再与该接口相连,于是删除MAC地址表中对应的条目。

转发/过滤

交换机发现接收到的帧的目的MAC地址已经保存在其MAC地址表中,则只对MAC地址表中该地址对应的接口转发数据帧,不再使用广播转发。

当交换机发现帧中的目的地址为广播地址和组播地址时,交换机将此帧从除了入口外的所有接口转发出去。

消除环路

在数据链路层上,相同源端和目的端的多条路径被称为环路,以太网交换机通过生成树协议避免环路,同时允许存在多条备用路径。

Console口配置

交换机Console口和主机(PC)的串口通过配置电缆连接,最大直接传输距离都是15m,所以只适用于本地环境的配置

Telnet口配置

当无法在本地进行配置的时候,就要用远程来维护
使用Telnet方式访问交换机的前提条件是首先必须对交换机进行初始化配置,否则用户无法正确登录和访问。初始化配置是为交换机配置正确的网段和IP地址以及Telnet登陆密码。初始化配置需要使用Console口。

rabbitMQ基础知识--交换机

1、交换机类型:4种:Direct exchange、Fanout exchange、Topic exchange、Headers exchange

Direct exchange:直连交换机(默认的交换机),转发消息到routigKey指定的队列,是一种完全匹配的关系。这种模式下,routingKey与队列之间可以是一对一,一对多,多对多,多对一等形式。 只要发送消息的routingKey与交换机的 一致,就会把消息放到对应的队列。

rabbitTemplate.convertAndSend(exchange, routingKey, message, correlationId);
比如:发送的消息的key是:key2,那么testQueue1、testQueue2队列中都会有这个消息。

技术图片

 

 

技术图片

 

 

直连交换机是一种带路由功能的交互机,一个队列通过routing_key与一个交换机绑定,当消息被发送的时候,需要指定一个routing_key,这个消息被送达交换机的时候,就会被交换机送到指定的队列里面去。同样一个routing_key也是支持应用到多个队列中的,当一个交换机绑定多个队列时,消息就会被送到对应的队列去处理。

 

 适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。

 

 

Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快)

Topic exchange:主题交换机,按规则转发消息(最灵活)

直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息队列的管理就会异常的困难。

 

所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。

 

主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:

*表示一个单词

#表示任意数量(零个或多个)单词。

 

假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息:

 

fast..

..white

fast.#

……

下图来源于网上,感觉对主题交换机的描述比较到位:

 技术图片

 

 

适用场景:消息需要基于多重条件进行路由到达对应队列,例如:日志系统,不仅可以根据日志的级别而且能根据日志的来源进行订阅。

 

Headers exchange:首部交换机 (未接触)

以上是关于交换机基础知识的主要内容,如果未能解决你的问题,请参考以下文章

网络基础知识总结_交换机

(chap1 网络基础知识)网络的构成要素:交换机

CCNA基础:交换机和路由器基础配置

《路由协议与交换技术》重点知识总结(路由交换知识点)

《路由协议与交换技术》重点知识总结(路由交换知识点)

《路由协议与交换技术》重点知识总结(路由交换知识点)