理论与实践相结合之交换机通信(数据链路层)

前提

本文所使用的演示工具是“Cisco Packet Tracer”,没有安装的请参考以下链接进行安装

理论与实践相结合之Cisco Packet Tracer网络模拟器安装教程-CSDN博客

交换机简介

交换机是一种网络硬件设备,每个交换机都维护了一个mac地址和端口的对应表,交换机工作时依据数据包中的MAC 地址参照mac地址表将数据从指定端口发送出去。

本文所指的交换机是二层以太网交换机,工作在OSI 模型的第2层,也就是数据链路层。

交换机示例图如下所示:

单交换机数据通信演示

演示拓扑:

PC-A,PC-C,PC-E三台电脑接在同一交换机下,ip和mac地址配置如图所示:

场景一:当PC-A发送一个广播包(目的mac地址为全F)时,交换机如何发送数据包

1、创建数据包

  • 点击红框标记信封图标,然后依次点击电脑PC-A,PC-E
  • 点击绿框标记标记“edit”按钮,将目标地址修改为“255.255.255.255”

2、按下图步骤执行

3、数据包发送到交换机,内容如图所示,然后再次点击红框标记的图标

4、交换机将数据包从所有端口发送出去

结论:交换机收到广播包时,将从所有端口发送出去

场景二:PC-A发送数据给PC-C

1、创建数据包,然后点击下一步按钮

数据包的第2层信息,源MAC是PC-A,目标MAC是PC-C
数据包的第3层信息,源IP是PC-A,目标IP是PC-C

2、数据包到达交换机(交换机将从0/2端口发送出去),点击下一步

3、交换机只将数据发送给PC-C

结论:当数据包为指定目的地的单播包时,交换机从指定端口发送数据包

原理:交换机是依据目的MAC地址发送数据包

当目的mac地址为FFFF.FFFF.FFFF时从接收端口之外的所有其它端口发送

当目的mac地址为特定mac时,依据mac地址表和接口对应关系,从指定接口转发

交换机mac地址表如下所示:

场景三:交换机断电重启后mac地址表信息会丢失,此时如果PC-A发送数据给PC-C,交换机查询不到mac对应的端口号,将如何转发数据呢?

1、清空交换机mac表缓存

2、创建数据包,从PC-A发送给PC-C

3、数据发送过程演示

数据包到达交换机后,将从接口2和接口3发送

交换机将数据包发送给了PC-C和PC-E

结论:当交换机收到数据包后,目的mac地址在交换机的mac地址表中找不到对应接口时,将从所有端口发送出去。

多交换机数据通信演示

演示拓扑:

交换机0和交换机1相连,PC-A连接交换机0,PC-C,PC-E电脑接在交换机1下,ip和mac地址配置如图所示:

场景一:PC-A发送数据包给PC-C

数据到达交换机0

数据到达交换机1

PC-C收到数据包 

场景二:PC-A发送数据包给PC-E

同场景一,不再演示

交换机mac地址表

交换机0

Switch#show mac-address-table

Mac Address Table

-------------------------------------------

Vlan Mac Address    Type            Ports

---- ------------------- ---------------  ----------

1 0002.1735.bc01   DYNAMIC   Fa0/2

1 aaaa.aaaa.aaaa   DYNAMIC   Fa0/1

1 cccc.cccc.cccc     DYNAMIC   Fa0/2

1 eeee.eeee.eeee   DYNAMIC   Fa0/2

交换机1

Switch#show mac-address-table

Mac Address Table

-------------------------------------------

Vlan Mac Address    Type            Ports

---- ------------------- ---------------  ----------

1 000d.bd23.e602  DYNAMIC    Fa0/1

1 aaaa.aaaa.aaaa  DYNAMIC    Fa0/1

1 cccc.cccc.cccc    DYNAMIC    Fa0/2

1 eeee.eeee.eeee  DYNAMIC    Fa0/3

结论:多个交换机与单个交换机发送数据包的原理相同,都是依据目的mac地址发送数据包

当目的mac地址为广播地址时,将从接收端口之外的所有其它端口发送出去;

当目的mac地址在mac地址表中找不到对应接口时,当作广播包进行发送;

当目的mac地址在mac地址表中有对应接口时,从指定接口发送。 

vlan简介

vlan,也就是虚拟局域网,在二层网络中隔离广播域,应用场景很广泛,例如将公司不同的部门划分为不同的vlan,不同的vlan之间不能直接通过二层交换机通信。

单交换机vlan数据通信演示

演示拓扑:

将交换机0的F0/2接口修改为vlan2,其它接口保持默认

场景一:PC-A发送广播包

制作数据包

交换机0收到数据包后,只从F0/3发送,因为F0/2在不同的vlan,不属于相同的广播域,所以不会从F0/2发送数据包

PC-C收到数据包

 场景二:将PC-A连接的交换机接口配置为vlan2,再次发送广播包

 交换机收到数据包后,将从F0/2发送出去,因为F0/1和F0/2都属于相同的vlan2,不会从F0/3发送

PC-E接收到数据包

结论:在二层交换网络中,只有相同的vlan之间才能传输数据 

多交换机vlan数据通信演示

演示拓扑:

交换机0的F0/1为vlan2,F0/3为vlan3;交换机1的F0/2为vlan2,F0/3为vlan3;其它端口默认

场景一:PC-A发送广播包

制作广播包

 交换机0收到数据包后,不会从任何端口发送出去

原因:交换机的端口默认都属于vlan1,从PC-A接收到vlan2的数据包后,没有其它任何端口属于vlan2,所以不会进行发送(用于交换机相连的端口默认也属于vlan1)

在此,我们引入trunk的概念,将交换机相连的端口配置为trunk后,则允许所有vlan数据通过

场景二:将交换机连接的端口配置为trunk后,PC-A重新发送广播包

下面我们来对比一下交换机接收和待发送的数据包PDU

从PC-A接收的PDU

待发送数据包的PDU

 

我们可以看到交换机0接收到数据包后,准备发送给交换机1的数据包采用的是802.1q进行数据封装,数据内容中携带了vlan2标签,这也是用于交换机1接收到数据包后能够识别到数据包来源于哪个vlan

下一步,交换机0将数据发送给交换机1

 交换机1接收的数据包中包含vlan标签

 交换机1将数据只发送给PC-E,因为只有PC-E属于vlan2

结论:交换机所有端口默认属于vlan1 ,交换机与交换机相连的端口应当配置为trunk模式,称之为中继链路,采用802.1q协议,传输的数据包内容包含vlan信息,中继链路允许所有vlan数据传输。

补充:trunk链路在传输默认vlan(通常为vlan1)数据时不会使用802.1q标准,传输数据时不会包含vlan信息。

生成树协议简介

生成树协议的作用是为了防止广播风暴,交换机之间通过生成树协议数据包,选举出根桥,指定端口和阻塞端口等,避免形成环路,如下图所示,红框标记端口为阻塞状态,不能收发数据:

我们试想一下,如果没有生成树协议,那么交换机连接的两条线路都能收发数据,当PC-A发送一个广播数据包时,由于交换机之间形成了环路,将产生广播风暴。

生成树演示

我们通过show spanning-tree命令可以查看交换机端口状态

交换机0

交换机1

场景一:将交换机F0/1相连的线断开

由于两台交换机只有一根线相连,不会产生环境,所以原来阻塞的端口恢复正常状态

交换机0

交换机1

结论:当交换机端口状态改变时,生成树协议将重新评估端口状态,目的是为了防止生成环路 

场景二:将端口添加到不同的vlan防止环路

将两个交换机的端口F0/1和F0/3加入vlan1,端口F0/2和F0/4加入vlan2

由于vlan可以隔离广播域,此时交换机两条线路均可传输数据

PC-A发送数据给PC-E,我们可以看到交换机1的数据是从F0/1接收,将从F0/3发送出去

PC-C发送数据给PC-G时,我们可以看到,交换机1的数据是从F0/2接收,将从F0/4发送出去

总结

以上演示了交换机数据收发过程,介绍了vlan和生成树。

交换机传输数据其实很简单,就是依据目地mac地址进行转发,当找不到目的mac或目的mac为ffff.ffff.ffff的广播包时,将从接收端口外的所有其它端口发送出去。

vlan是802.1q标准下的虚拟局域网,可以隔离广播域,交换机之间相连,我们应当将端口配置为trunk模式,此时的链路称之为中继链路,允许所有vlan传输,非默认vlan的数据包传输时将打上vlan的标记。

生成树协议是为了防止交换机之间产生环路引发广播风暴,因为交换机收到广播包后将会从其它所有接口发送,这样将导致广播包从一个端口发送出去后,又从另一个端口接收到,导致数据包在交换机之间不断循环。

另外,有一种攻击叫做mac地址泛洪攻击就是利用了交换机的这种特性,交换机的mac地址缓存表是有限制的,当mac地址缓存表达到上限后将不能缓存新的mac地址。

攻击者通过发送假数据包使交换机的mac地址表达到上限,后续真实数据包由于在交换机的mac地址表中找不到对应的接口将从所有其它端口发送出去,此时,攻击者便可以接收到别人发送的真实数据包。

在上面的演示中,我们使用的思科设备,其实不管是思科、H3C还是华为,通信原理都是相同的,因为大家都遵守相同的标准,这也是不同设备能够兼容的前提。

我们不需要太关注设备配置命令,因为每个厂家的配置命令都有差异,弄懂通信原理后,不管什么品牌的设备,我们都可以上手。

本文为“理论与实践相结合之计算机网络基础系列”的内容之一,其他博文也在更新中,本系列完成后会将导览链接补充在本文末尾,感兴趣的可以关注和收藏。

种草

我的博文内容主要针对“计算机网络”、“安全”、“运维”和“云计算”方向,感兴趣朋友的请关注我,我将不定期发布新的博文并不断改进已发布博文。

后期依据大家对博文的评论,点赞及关注情况,针对大家感兴趣的内容我也会录制视频并整理出成套的学习资料免费分享给大家,期待能和大家一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/218426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(上)

前言: 由于c语言的程序编译链接的这块知识点不清楚,回来复习一遍,以便于好理解c知识,我会尽快更新下一篇文章。 目录 1.程序的翻译环境和执行环境 2.翻译环境(编译链接) 编译(编译器&#xf…

Mybatis异常org.apache.ibatis.binding.BindingException: Parameter “xxx“ not found

问题1: 可能是 mybatis 的xml,对应的mapper接口缺少Param注解,或者Param注解的value与xml的不一致 切记只要参数不是一个集合类型向下图或者多个参数值就要加Param注解 问题2: mybatis的xml,存在多余的注释。注释中包含#{}、${}。注释掉的代…

【C#】读取ini配置文件的内容

一、编写ini配置文件 ini文件时初始化文件,通常是系统配置文件所采用的存储格式。ini文件有自己的固定格式,是由若干个“节”(section)组成,每个节由若干个“键”(key)组成,每个key…

【Cesium】实现卷帘对比

一、创建滑块 <style>import url(../Build/CesiumUnminified/Widgets/widgets.css);import url(./Sandcastle/templates/bucket.css);#slider {position: absolute;left: 50%;top: 0px;background-color: #d3d3d3;width: 5px;height: 100%;z-index: 9999;}#slider:hover…

STM32使用SIM900A、SIM800C、SIM800A完成短信发送、连接onenet上传数据、拨打电话_完整教程

一、前言 本篇文章介绍SIM800C 、SIM800A、SIM900A 等等系列的模块的常用AT指令,讲解模块的使用方法,演示短信发送、拨打电话、网络连接,与服务器通信等常用案例。 如果只是用到发送短信、拨打电话、连接网络通信、这些模块的AT指令是兼容的。 文章最后贴了完整的STM32代码…

学习极市开发平台

这是官网的链接&#xff1a;极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题&#xff0c;首先在使用这个平台之前&#xff0c;我大部分时候使用的是百度的飞浆平台&#xff0c;也就是BML&#xff0c;去训练一些深度学习的模型。 …

DevOps 中 API 治理的工程问题和落地实践案例

近日&#xff0c;中国 DevOps 社区峰会在广州成功召开&#xff0c;Eolink 作为 API 管理领域代表受邀出席。来自各地的讲师与华南区本土开发者朋友们齐聚一堂&#xff0c;共同探讨了 DevOps 转型、AI、API 管理&#xff0c;以及 SRE 稳定性工程、平台工程、混沌工程、可观测性工…

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条组件样式都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style&…

晶圆测试技术

晶圆探针测试也被称为中间测试&#xff08;中测&#xff09;&#xff0c;是集成电路生产中的重要一环。晶圆探针测试的目的就是确保在芯片封装前&#xff0c;尽可能地把坏的芯片筛选出来以节约封装费用。这步测试是晶圆生产过程的成绩单&#xff0c;它不仅是节约芯片封装成本的…

Linux下安装MySQL 5.7

1、下载安装包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2、安装MySQL包 yum -y install mysql57-community-release-el7-10.noarch.rpm 3、安装MySQL yum -y install mysql-community-server 如果出现下图失败情形&#xff0c;则…

为告警设备设置服务端属性,在tb中标记存在告警的设备

有位读者想要实现标记系统中存在告警的设备,于是我给他做了三个方案。各有优缺点。 第一个方案时,告警是在规则链里手动创建的,通过告警数,+1,-1来标记设备告警属性。 第二种是当设备通过设备配置创建,清空告警。这种情况只适用于一次遥测创建,清空一个告警。不支持单次…

CrapApi 本地部署 windows+Linux部署( maven+tomcat+idea)

目录 一、本章节所用到的资源共享&#xff0c;嫌麻烦的可以直接下载本地配置好运行使用二、idea maven tomcat启动&#xff0c;我的maven和tomcat的配置三、遇到的问题四、项目运行后效果图转载请标明出处&#xff0c;写作不易如果有用请给个赞~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

【Turbo乘积码2】基于EaE(Error-and-Erasure)的TPC码迭代译码的C语言实现及工程详细解析『需要完整工程代码请先私信』

回顾 上篇博客讲述了AWGN信道下TPC码迭代译码的原理及CPP实现&#xff0c;此次主要讨论一种改进的译码方式&#xff0c;也就是基于错误和擦除(Error-and-Erasure, EaE)的译码。 EaE信道模型 如上图所示&#xff0c;我们定义一个可配置的阈值 T T T&#xff0c;使得值 y i ∈ …

[linux] kaggle 数据集用linux下载

你可以通过以下步骤获取Kaggle的下载链接并在Linux中进行下载&#xff1a; 首先&#xff0c;确保你已经安装了Python和Kaggle API。如果没有安装&#xff0c;你可以通过以下命令安装&#xff1a; pip install kaggle 接着&#xff0c;你需要在Kaggle网站上获取API Token。登录…

Spring AOP 概念及其使用

目录 AOP概述 什么是AOP&#xff1f; 什么是Spring AOP ? Spring AOP 快速入门 1.引⼊ AOP 依赖 2.编写AOP程序 Spring AOP 核心概念 1.切点 2.连接点 3.通知 4.切面 通知类型 注意事项: PointCut&#xff08;定义切点&#xff09; 切面优先级 Order 切点表达…

java SSM毕业生信息管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

前言 学校的规模不断扩大&#xff0c;学生数量急剧增加&#xff0c;有关学生的各种信息量也成倍增长。面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等&#xff0c;从而减少管…

【GO】protobuf在golang中的测试用例

上篇文章介绍了如何安装protobuf环境&#xff0c;文章链接如下 【Go】protobuf介绍及安装-CSDN博客 本节介绍protobuf在gRPC中具体如何使用&#xff0c;并编写测试用例 一、Protobuf是如何工作的 .proto文件是protobuf一个重要的文件&#xff0c;它定义了需要序列化数据的结…

为什么Nginx被称为反向代理

下图显示了 &#x1d41f;&#x1d428;&#x1d42b;&#x1d430;&#x1d41a;&#x1d42b;&#x1d41d; &#x1d429;&#x1d42b;&#x1d428;&#x1d431;&#x1d432; 和 &#x1d42b;&#x1d41e;&#x1d42f;&#x1d41e;&#x1d42b;&#x1d42c;&#…

Android : AndroidStudio开发工具优化

1.开启 gradle 单独的守护进程 Windows: 进入目录 C:\Users\Administrator\.gradle 创建文件&#xff1a; gradle.properties # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Settings specified in this file will override any Gradle s…

mac本地部署stable-diffusion

下载Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" ①输入“1”选择中科大版本&#xff0c;然后输入Y(YES)&#xff0c;直接输入开机密码&#xff08;不显示&#xff09;然后回车确认&#xff0c;开始下载 ②…