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

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

数据在网络中如何转发受到许多因素影响,在不同网络中有不同的转发技术。如在同一个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的工作原理将在后面的课程中介绍。

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

uni-app优雅的实现时间戳转换日期格式

现在显示的格式如下图: 我期望统一格式,所以不妨前端处理一下,核心代码如下 filters: {// 时间戳处理formatDate: function(value, spe /) {value value * 1000let data new Date(value);let year data.getFullYear();let month data.…

交互式AI技术与模型部署:bert-base-chinese模型交互式问答界面设置

使用Gradio实现Question Answering交互式问答界面,首先你需要有一个已经训练好的Question Answering模型,这里你提到要使用bert-base-chinese模型。 Gradio支持PyTorch和TensorFlow模型,所以你需要将bert-base-chinese模型转换成PyTorch或Te…

为什么 Linux 内核协议栈会丢弃 SYN 数据包

最近了解到 SYN 数据包丢弃的问题,网上有一些资料,这里记录分享一下。 serverfault上的重要信息 tcp - No SYN-ACK Packet from server - Server Fault 信息如下: My embedded system with LwIP is the client and I have server1 and ser…

STM32MX配置EEPROM(AT24C02)------保姆级教程

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…

文件按关键字分组-切割-染色-写入excel

1. 背景 针对下面的文件data.csv,首先根据fid进行排序,然后分组,使相同fid的记录放到同一个excel文件中,并对每列重复的数据元素染上红色。 fid,user_id -1000078398032092029,230410010036537520 -1000078398032092029,23042301…

FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

文章目录 一、分频器二、Verilog实现任意倍分频器2.1、Verilog源码2.2、仿真文件 三、仿真波形图 一、分频器 在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输…

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRLSTM长短期记忆神经网络分位数回…

LLM系列 | 18 : 如何用LangChain进行网页问答

简介 一夕轻雷落万丝,霁光浮瓦碧参差。 紧接之前LangChain专题文章: 15:如何用LangChain做长文档问答?16:如何基于LangChain打造联网版ChatGPT?17:ChatGPT应用框架LangChain速成大法 今天这篇小作文是LangChain实践专题的第4…

Vue2 第四节 计算属性,监视属性

1.计算属性 2.监视属性 3.计算属性与监视属性之间的关系 一.计算属性 定义:要用的属性不存在,要通过已有属性计算得来原理:底层借助了Object.defineproperty方法提供的getter和setterget函数什么时候会执行:初次读取的时候会执…

【算法训练营】Fibonacci数列+合法括号序列判断+两种排序方法

7.29 Fibonacci数列题目解析代码 合法括号序列判断题目题解代码 两种排序方法题目:题解代码 Fibonacci数列 题目 题目链接: 点击跳转 解析 【题目解析】: 本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1&am…

AR开发平台 | 探索AR技术在建筑设计中的创新应用与挑战

随着AR技术的不断发展和普及,越来越多的建筑师开始探索AR技术在建筑设计中的应用。AR(增强现实)技术可以通过将虚拟信息叠加到现实场景中,为设计师提供更加直观、真实的建筑可视化效果,同时也可以为用户带来更加沉浸式的体验。 AR开发平台广…

【计算机网络】传输层协议 -- UDP协议

文章目录 1. 传输层相关知识1.1 端口号1.2 端口号范围划分1.3 知名端口号1.4 一些相关命令 2. UDP协议2.1 UDP协议格式2.2 UDP协议的特点2.3 什么是面向数据报2.4 UDP的缓冲区2.5 UDP使用注意事项2.6 基于UDP的应用层协议 1. 传输层相关知识 传输层是计算机网络中的一个重要层…

【项目6 UI Demo】前端代码记录

前端代码记录 1.GridListItem中的布局 在这个Item中的布局采用的是VBox和HBox相结合的方式。相关的代码如下&#xff1a; <VBox class"sapUiTinyMargin"><HBox justifyContent"SpaceBetween"><Titletext"{ToolNumber}"wrapping…

三、Web安全相关知识

请勿用于非法用途 文章目录 一、Web源码框架二、目录结构1、静态资源2、WEB-INF&#xff08;1&#xff09;classes&#xff08;2&#xff09;lib&#xff08;3&#xff09;web.xml 二、web脚本语言1、脚本种类&#xff08;1&#xff09;ASP&#xff08;2&#xff09;ASP.NET&am…

【UniApp开发小程序】悬浮按钮+出售闲置商品+商品分类选择【基于若依管理系统开发】

文章目录 界面效果界面实现悬浮按钮实现商品分类选择界面使元素均匀分布 闲置商品描述信息填写界面价格校验 界面效果 【悬浮按钮】 【闲置商品描述信息填写界面】 【商品分类选择界面】 【分类选择完成】 界面实现 悬浮按钮实现 悬浮按钮漂浮于页面之上&#xff0c;等页面…

上门小程序开发|上门服务小程序|上门家政小程序开发

随着移动互联网的普及和发展&#xff0c;上门服务成为了许多人生活中的一部分。上门小程序是一种基于小程序平台的应用程序&#xff0c;它提供了上门服务的在线平台&#xff0c;为用户提供了便捷的上门服务体验。下面将介绍一些适合开发上门小程序的商家。   家政服务商家&am…

Mybatis初识(一)

一.Mybatis是什么 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的XML或注解来配置,和映射原始类型、接口和Java POJO (Plain Old Java Objects…

动态线程池问题的解决

项目中需要将线程池也监控管理起来。 于是决定引入了hippo4j&#xff0c;这个引入很简单&#xff0c;官方的例子也很简单&#xff0c;拿过来直接跑。 出现问题了&#xff0c;用的和例子一模一样的&#xff0c;也没什么错&#xff0c;但是就是在服务器的管理控制台上没有找到动态…

Godot 4 插件 - Utility AI 研究

今天看到一个视频教学 Godot4 | 实现简单AI | Utility AI 插件_哔哩哔哩_bilibili 就看了一下。吸引我的不是插件&#xff0c;是AI这两个字母。这AI与Godot怎么结合&#xff1f;感觉还是离线使用&#xff0c;值得一看。 视频时间不长&#xff0c;15分钟左右&#xff0c;看得…

C#——多线程之Task

C#——多线程之Task 前言一、Task是什么&#xff1f;二、各应用场景以及实例分析1.异步执行代码2.等待异步操作完成3.并行执行多个任务4.处理异常5.取消异步操作 三、一些其他问题1.WhenAll与WhenAny的区别 总结 前言 在代码编写过程中&#xff0c;经常会用到多线程的知识&…