交换机基础知识
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:首部交换机 (未接触)
以上是关于交换机基础知识的主要内容,如果未能解决你的问题,请参考以下文章