【达哥讲网络】第3集:数据交换的垫基石——二层交换原理

news2024/11/16 13:30:12

专业的网络工程师在进行网络设计时,会事先规划好不同业务数据的转发路径,一方面是为了满足用户应用需求,另一方面是为了提高数据转发效率、充分利用各设备/各链路的硬件或带宽资源。在进行网络故障排除时,理顺各路数据的转发路径也是精准、高效排除故障的最基本前提。这些路径的实现是基于网络通信原理通过网络设备配置实现的,所以理解数据通信原理,是作为一个合格网络工程师必备的基础和前提。

数据在网络中如何转发受到许多因素影响,在不同网络中有不同的转发技术。如在同一个IP网段中,采用的是基于MAC地址表的数据转发技术;在跨网段的IP网络中,最常见的是IP路由转发,即根据IP数据包携带的目的IP地址,按照对应的IP路由表项一跳一跳地进行转发;在MPLS网络中,则又是根据MPLS报文中携带的外层MPLS标签进行转发。但这也只是最基本的转发原理,数据是否可以按照原路径进行转发,还可能受一些策略影响,如报文过滤策略、路由策略、策略路由、MPLS隧道策略等。所以,事实上,在一些比较大型的网络中,数据转发路径的确定不是想象的那么容易,可能要考虑前面所说的多方面因素。本文先介绍同一IP网段基于MAC地址表的数据转发原理,即通常所说的“二层交换原理”。

同一IP网段俗称二层交换网络,在此仅以最常见的以太交换网络为例进行介绍。在二层以太交换网中,数据转发的依据是帧头中的“目的MAC地址”字段中的值和在交换机上建立的MAC地址表进行的。MAC地址表可以看成是二层以太网的数据转发表,可以手动创建(生成静态MAC地址表),也可由交换机通过对进入交换机的数据帧中帧头的“源MAC地址”字段和“VLAN Tag”字段(仅VLAN网络中存在)的学习动态创建(生成动态MAC地址表)。静态MAC地址表项除非人为删除,否则永久有效,而动态创建的MAC地、址表项是有生存周期的,即是可以被老化的,老化后即删除。在此仅介绍动态MAC地址表的创建和指导数据帧的转发原理。

在MAC地址表中最主要的三个字段是“MAC地址”、“VLAN ID”(仅VLAN网络中存在)和“入接口”字段,它们之间形成一个映射关系。“MAC地址”和“VLAN ID”字段分别是通过学习所接收的帧中的“源MAC地址”和“VLAN Tag”两字段的值得到的,而“入接口”字段是本交换接收数据帧的接口,建立的是源设备的动态MAC地址表项。“MAC地址”字段是用来作为帧接收设备,向源设备发送的数据帧头部的“目的MAC地址”,“VLAN ID”字段代表帧所属的VLAN,“入接口”字段用来确定源帧接收设备向源设备发送的数据帧,到达本地交换机后的出接口,即确定了数据帧在本地交换机上的转发路径。在初始状态下,交换机没有为任何外部设备建立动态的MAC地址表项。在此先介绍非VLAN场景下的二层交换原理,下集课程再介绍VLAN帧的交换原理。

在非VLAN场景下,二层交换设备收到以太网帧后,根据以太网帧中帧头的“目的MAC地址”字段去查找本地MAC地址表,如果没有找到匹配表项,或者目的MAC地址是广播MAC地址(48位全为1的MAC地址),则向除帧入接口外的所有接口转发;如果能够找到匹配表项,则向该MAC地址表项中对应的接口转发。

【说明】二层交换设备虽然能够隔离冲突域,但是它并不能有效的划分广播域。因为从前面介绍的二层交换原理可以看出,广播报文以及目的MAC地址查找失败的报文会向除报文的入接口之外的其它所有接口转发,当网络中的主机数量增多时,这种情况会消耗大量的网络带宽,并且在安全性方面也带来一系列问题。当然,通过路由器来隔离广播域是一个办法,但是由于路由器的高成本以及转发性能低的特点使得这一方法应用有限。基于这些情况,二层交换中出现了VLAN技术,具体将在下集课程中进行介绍。

在图1所示的非VLAN网络中,PC A、PC B和PC C三台主机网卡的MAC地址分别为MAC A、MAC B和MAC C。现假设,在初始状态下,PC A要访问PC C(假设PCA已获取了PC C的MAC地址,具体获取原理本文后面介绍)。

图1

(1)根据前面课程的介绍,数据帧在发送前要进行帧封装,以PC C的MAC地址MAC C作为目的MAC地址,自己的MAC地址MAC A作为源MAC地址,参见1。

(2)当交换机收到PC A访问PC C的数据帧时会会学习帧中的“源MAC地址”MAC A,然后与接收该帧的接口Port 1建立映射关系,生成基于源主机PC A的MAC地址表项,如图2所示。

图2

(3)由于交换机上原来并没有基于PC C的MAC地址表项,不能确定从哪个接口转发到达PC C的数据帧,所以会向除入接口Port 1外的其它所有接口(如Port 2和Port 3)进行泛洪转发(类似广播转发方式),如图3所示。

 图3

【说明】“泛洪”其实是一种复制转发方式,就是从除入接口外的各个接口上发送一个帧副本,帧头中的“目的MAC地址”保持不变,且不是广播MAC地址。而“广播”(这里仅是二层广播)是帧头中的“目的MAC地址”是广播MAC地址。

(4)当PC C收到该帧后,发现帧中的“目的MAC地址”与自己的MAC地址一致,于是确定该帧是发给自己的,所以接收该帧,然后对源设备PC A进行响应。响应帧中的“源MAC地址”是PC C的MAC地址MAC C,目的MAC地址是PC A的MAC地址MAC A,如图4所示。

图4

(5)当交换机收到PC C发给PC A的响应帧后,同样会学习帧中的“源MAC地址”字段值MAC C,然后与接收该帧的接口Port 3建立映射,生成基于PC C的MAC地址表项,如图5所示。然后根据帧中的“目的MAC地址”MAC A在本地MAC地址表中进行查找。因为在交换机上原来已建立了基于PC A的MAC地址表项,所以可以查找到匹配的MAC地址表项,然后根据所映射的出接口Port 1把PC C发给PC A的响应帧发给PC A,如图6所示。

图5

图6

在这里再回到前面的问题,就是PC A如何知道目的主机PC C的MAC地址呢?其实这里要分两种情况的。通过前面课程的学习已知道,帧的封装是在数据链路层进行的,其中的数据部分可以是本地链路层自身的协议报文,通常是由二层交换机自己产生的(如STP BPDU),也可以是来自上层——网络层(或者以太网协议的更高子层),而来自网络层的数据包又可以是网络层自身产生的协议报文,也可以来自上面传输层,甚至应用层的用户数据报文,通常是由主机类设备产生的。二层交换可通过LLDP(Link Layer Discovery Protocol,链路层发现协议)之类的二层协议报文交互进行MAC地址学习,LLDP报文中的目的MAC地址固定为0x0180-C200-000E。如果是三层或以上层设备发送的协议或数据报文,则是采用ARP通过目的IP地址解析对应的目的MAC地址。有关ARP的工作原理将在后面的课程中介绍。

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如,tab缩进4个空格,或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…

C++笔记之++i和i++是原子操作吗?

C笔记之i和i是原子操作吗? code review! 文章目录 C笔记之i和i是原子操作吗?1.i是原子操作吗?2.i是原子操作吗?3.前置递增和后置递增 1.i是原子操作吗? 2.i是原子操作吗? 3.前置递增和后置递增

绝美!轮到AI写真爆火了!18种AI视频制作教程;Llama 2微调的极速指南;Nijijourney官方AI绘画课 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 摄影写真面临AI技术洗牌,一键生成杂志大片的时代来了 软件:midjourney & Stable Diffusion 模型&#xff…

Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介

简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏。从而达到一种“有图有真相”的效果。 截图方法 方法1 save_screenshot() 该方法直接保存当前…

传统计算机视觉

传统计算机视觉 计算机视觉难点图像分割基于主动轮廓的图像分割基于水平集的图像分割交互式图像分割基于模型的运动分割 目标跟踪基于光流的点目标跟踪基于均值漂移的块目标跟踪基于粒子滤波的目标跟踪基于核相关滤波的目标跟踪 目标检测一般目标检测识别之特征一般目标检测识别…

【深度学习】生成对抗网络Generative Adversarial Nets

序言 本文是GAN网络的原始论文,发表于2014年,我们知道,对抗网络是深度学习中,CNN基础上的一大进步; 它最大的好处是,让网络摆脱训练成“死模型”到固定场所处去应用,而是对于变化的场景&#xf…

【小梦C嘎嘎——启航篇】类和对象(上篇)

【小梦C嘎嘎——启航篇】类和对象(上篇)😎 前言🙌什么是面向过程?什么是面向对象?什么是类和对象类中的访问权限属性类的大小计算this 指针构造函数析构函数 总结撒花💞 😎博客昵称&…

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

LeetCode 1857. Largest Color Value in a Directed Graph【拓扑排序,动态规划】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

【LeetCode】148.排序链表

题目 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&#xff1…

Go 下载安装教程

1. 下载地址:The Go Programming Language (google.cn) 2. 下载安装包 3. 安装 (1)下一步 (2)同意 (3)修改安装路径,如果不修改,直接下一步 更改后,点击下一…

软件测试/测试开发丨Selenium环境安装与使用

Selenium 官方网站: www.selenium.dev/ 简介: 用于web浏览器测试的工具;支持的浏览器包括IE,Firefox,Safari,Chrome,Edge等;使用简单,可使用Java,Python等…

InnoDB引擎底层逻辑讲解——逻辑存储结构

逻辑存储结构架构事务原理MVCC 1.逻辑存储结构 InnoDB逻辑存储结构图 mysql数据文件存储位置(linux系统) cd /var/lib/mysql一个mysql实例中有多个表空间,我们切换到某一个特定的数据库如itcast数据库,每个ibd文件都是一个表空间, cd it…

使用pikachu管理工具下的XSS后台进行实战

写在前面的重要提示: Attention:技术没有好坏之分,关键在于使用技术的人或组织。网络安全技术是一把双刃剑 – 作为网络安全人,虽然无法控制头上的帽子是否会变绿,但能控制不让它变黑;无论我们在物质上面对…

Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用,可以进一步提升 Cilium 的网络性能。具体调优项包括不限于: 启用本地路由 (Native Rou…

精读《自由布局吸附线的实现》

目录 判断 box 离哪条边最近 产生吸附效果 resize 时中间对齐线需要放大双倍吸附力 总结 自由布局吸附线的效果如下图所示: 那么如何实现吸附线呢?我们先归纳一下吸附线的特征: 正在拖动的 box 与其他 box 在水平或垂直位置距离接近时&am…

Spring之BeanDefinition(二)

Spring之BeanDefinition 文章目录 Spring之BeanDefinition1、对象和bean的区别2、BeanDefinition作用AutowireCandidate说明Primary说明ConstructorArgumentValues说明第一种使用方式第二种使用方式 MutablePropertyValuesabstract小结 3、BeanDefinition的发展历程3、BeanDefi…

RedHat7.9安装mysql8.0.32 ↝ 二进制方式

RedHat7.9安装mysql8.0.32 ↝ 二进制方式 一、rpm方式安装1、检查是否安装了mariadb2、下载mysqlmysql8.0.323、上传解压4、创建安装目录,拷贝解压后的文件至安装目录/usr/local/mysql8.0/5、创建相关目录,开始安装6、创建mysql组和用户7、更改安装目录归…

SpringAOP的相关概念

文章目录 一.什么是AOP二.AOP的组成部分三.SpringAOP的实现3.1 增加SpringAOP依赖3.2 创建切面3.2 创建切点3.3 创建通知3.4 创建连接点 四.SpringAOP的实现原理4.1 JDK动态代理4.2 CGLIB 动态代理总结 一.什么是AOP AOP,全称为Aspect-Oriented Programming&#x…

创建jupyterlab的快捷启动的一种方式

1、找Jupyter Notebook的快捷图标 首先,找到Jupyter Notebook的快捷图标,打开其文件位置。 2、复制Jupyter Notebook快捷方式 复制Jupyter Notebook的快捷方式 将复制Jupyter Notebook的快捷方式的这两处的Noetbook修改为lab。 如下图 3、找Jupy…