草庐IT

交换机MAC地址学习

奋斗小白Ain 2023-12-19 原文

首先我们要了解交换机mac地址是怎么学习的之前要了解一下交换机是如何工作的。

参考模型

 交换机工作在OSI模型的第二层,也就是数据链路层,数据链路层传输的数据叫数据帧。数据链路层使用的封装一般使用以太网进行封装,也就是Ethernet Ⅱ 以太帧。

这里随便抓个包演示一下

由于交换机工作在数据链路层,也就是说交换机收到一个报文他只会解封装到数据链路层,以太,然后在根据目的mac地址来对数据帧进行传输。

当交换机从接口收到一个报文后,解封装,然后将源mac记录在mac地址表,记录这个mac地址来源于哪个接口,当接口为down状态或超过老化时间,交换机会将来源于该接口的mac地址删除,这里后面我会实验演示。

1.泛洪:收到目的mac地址为ff:ff:ff:ff:ff:ff,向同一广播域的接口复制转发(一对所有)

抓包演示

2.转发:从一个接口接收到数据帧后,查看mac地址表,存在目的mac地址,然后一对一接口转发(一对一)

3.丢弃:从一个接口接收到数据帧后,mac地址表不存在对应mac地址或数据帧不合法,丢弃

有了以上基础,我们就可以实战演示一下交换机的mac地址表是怎么生成的,以及如何转发数据帧。

以下实验使用华为模拟器实现,其他模拟器也可以同样验证,原理一样。

拓扑图

步骤一

第一步我们先看看交换机的mac地址表

<Huawei>system-view 
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname S1                                  #设置主机名
[S1]display mac-address                             #查看mac地址表

 

 我们可以看到初始状态交换机的mac地址表是空的,华为交换机直接不显示,下一步我们看看交换机是如何将mac添加到表上的。

步骤二

为PC1添加IP地址,然后发送广播帧。

由于是二层网络,这里不需要添加网关IP地址。

然后ping一个网络中没有的主机地址,发送广播帧。

 

 抓包截取

PC1尝试广播获取目的IP地址mac。

步骤三

查看交换机mac地址表

 此时可以看到交换机将PC1的mac地址记录并标明来源的接口。

总结:也就是说当交换机收到某接口的数据帧时,将该数据帧的源mac地址记录到交换机的mac地址表并标明来源接口,下一次收到数据帧时,并通过mac地址表进行转发。

扩展:交换机MAC地址绑定(静态)

拓扑图

 R1

[Huawei]sysname R1
[R1]interface Ethernet0/0/0
[R1-Ethernet0/0/0]ip address 192.168.1.1 24
[R1-Ethernet0/0/0]mac-address 1-1-1          #更改mac地址

R2

[Huawei]sysname R2
[R2]interface Ethernet0/0/0
[R2-Ethernet0/0/0]ip address 192.168.1.2 24
[R2-Ethernet0/0/0]mac-address 2-2-2          #更改mac地址

S1

[S1]mac-address static 1-1-1 Ethernet 0/0/1 vlan 1     #静态mac绑定
[S1]mac-address static 2-2-2 Ethernet 0/0/2 vlan 1     #静态mac绑定
[S1]interface Ethernet0/0/1
[S1-Ethernet0/0/1]port link-type access                
[S1-Ethernet0/0/1]q
[S1]interface Ethernet0/0/2
[S1-Ethernet0/0/2]port link-type access 
[S1-Ethernet0/0/2]q

查看交换机MAC地址表

END

有关交换机MAC地址学习的更多相关文章

  1. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  2. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

  3. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  9. ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1 - 2

    我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐