当前位置: 首页 > news >正文

【数通网络交换基础梳理1】二层交换机、以太网帧、MAC地址数据帧转发原理详解

一、网络模型

万年不变,先从模型结构分析,现在大家熟知的网络模型有两种。第一种是,OSI七层模型,第二种是TCP/IP模型。在实际运用中,参考更多的是TCP/IP模型。

OSI七层模型
在这里插入图片描述

TCP/IP模型在这里插入图片描述

不需要全部理解,只需要明白两点:1、数据包发送数据的过程是从上到下打包,接收数据是从下至上拆包。2、在二层数据链路层我们的数据已经被层层封装为以太网帧结构。现在有了下一个问题,以太网帧结构是什么?

二、以太网帧结构

在这里插入图片描述
在这里插入图片描述
以太网帧结构里有:DMAC、SMAC、Type、用户数据、FSC帧校验序列,我们挨个解释一下:

DMAC:目的MAC地址,被访问的MAC地址;
SMAC:源MAC地址,发起方的MAC地址;
Type:在数据中有一个type字段,是为了让交换机收到一个帧,拆开帧头,不用再进一步拆包就知道packet中类型,比如:
1、type=0X0800 代表的就是包内容是ipv4;
2、type=0X86DD 代表的就是IPv6;
3、type=0X0806 代表的就是ARP包;
4、type=0X8847 代表的就是MPLS unicast;
5、type=0X8848 代表的就是MPLS multicast;
用户数据:数据内容;
FSC帧校验序列:让接收帧的网卡或者网口判断是否有错误;

这里主要了解一下以太网帧头中有源MAC地址和目的MAC地址。

三、MAC地址

MAC地址(Media Access Control Address)也称为硬件地址或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第二层数据链路层则负责MAC位址 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。

四、数据链路层>二层交换机

二层交换机能够基于数据链路层的 MAC 地址,进行数据帧或 VLAN 的传输功能。二层交换机内置MAC地址表,为二层设备提供了唯一的地址,用于标识数据下发的终端设备和节点。

优点:数据交换是靠硬件来实现的,其非常快速且有效地将数据从源端传输到目标端。

简单的说,MAC地址表是交换机等网络设备记录MAC地址和设备端口的映射关系,代表了交换机从哪个端口学习到了某个MAC地址,后续交换机需要转发数据的时候就可以根据报文中目的MAC地址去 对照设备中的MAC地址表进行数据转发。如果MAC地址表中已经存在该MAC地址表项,设备将通过重置该表项的老化时间,对该表项进行更新。
在这里插入图片描述

五、二层交换机MAC地址学习

实例解析:

在这里插入图片描述

主机 PC1向主机 PC2 发送数据,PC1不知道PC2的MAC地址,PC1就像所有端口发说ARP广播请求包说:谁告诉我IP地址为192.168.1.4的MAC地址是多少?

PC1发送时,交换机把PC1的端口0/0/1、 MAC地址更新记录到MAC地址表中。但是此时交换机不知道目的 PC2MAC地址在哪个端口,于是将数据帧进行ARP广播包请求泛洪,即转发到除端口 1 之外的所有端口。

PC3收到数据帧发现目的IP地址不是自己,将丢弃数据帧。PC2收到数据帧发现是源IP是自己请求自己的MAC地址,于是发送应答数据帧,交换机端口 0/0/2 收到数据帧,记录PC2 对应的端口、 MAC
地址表项。

于是交换机知道了主机PC1 和主机 PC2 的 端口、MAC 地址信息,之后会根据 MAC 地址表进行转发。

上面的描述看不懂的话这里我们可以抓包看一下:
设置PC1访问PC2,抓包抓取交换机G0/0/1端口流量,抓包设置显示1.4的IP流量信息:
在这里插入图片描述
PC1开始ping 192.168.1.4,抓包内容显示如下:
在这里插入图片描述

打开一个广播包,内容为:
交换机ARP广播包问谁是192.168.1.4,告诉192.168.1.2,数据包里有发送的MAC地址和IP、目标的IP地址、MAC地址为广播因为不知道是交换机向所有端口问。
在这里插入图片描述
ARP回包:
包含源为192.168.1.4和MAC地址、以及回应给请求的目标192.168.1.2和MAC地址信息。

在这里插入图片描述

1、同一个MAC可以在同一台交换机的不同接口上出现吗 ?
不能。因为这样的交换机就不知道如何转发了

2、同一个MAC地址可以在不同交换机上的接口出现吗?
可以。

3、不同MAC地址可以在同一台交换机的相同接口出现吗?
可以。

4、既然通过ARP广播包发送请求是不是二层交换机也有ARP表?
没有,二层交换机有且只有一个关系表:MAC地址表
在这里插入图片描述

大白话翻译:

二层交换机只工作在二层数据链路层,所以咱们ping 192.168.1.4的时候二层交换机理解不了这个是什么意思,因为IP地址是三层网络层协议。而二层交换机通讯主要依靠ARP广播包识别各自交换机端口所接设备的MAC地址更新维护MAC地址表,又因数据最终转换成比特流通过物理介质发送出去,所以他要做一个转换就是从上往下打包发送(应用-传输-网络-数据链路),每上一层的信息逐步打包好了添加到下一层中,此时再来理解这一张图可能会稍微清晰一点。
在这里插入图片描述

六、ARP广播

ARP 协议的全称是 Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。ARP 协议在 IPv4 中极其重要。

以五中实验为例:

在PC1给PC1的发送数据的时候,是以数据帧的形式发送的,数据帧被网卡解析成电信号或者光信号传递到对端。数据帧里太网帧头由源MAC地址和目的MAC地址组成的,如果发送者只知道目的主机的IP地址,不知道目的主机的MAC地址,就不能把这个数据包转化成数据帧发走。而ARP 协议就是负责地址解析的,使用目的主机IP地址来解析对方的MAC地址。

七、不通网段如何通讯?

同网段可以依靠二层交换机通讯,当网络中存在多个网段192.168.1.1/24 172.16.1.1/24 173.73.1.1/24情况下交换机该如何互相通讯?请关注下一章
在这里插入图片描述

知识扩展:

冲突与冲突域

1、交换机每一个端口都是一个独立的冲突域,因此在其独立的冲突域中是不会发生任何通讯冲突的。
2、交换机通过分割冲突域来避免冲突的发生,同时提高传输效率。

冲突域与广播域

1、交换机每一个端口都是一个独立的冲突域,但交换机默认情况下,所有端口都工作在同一个广播域中。
2、所有端口都处于同一个广播域将会造成较大的安全隐患,因此交换机可通过额外的配置来分割广播域,该配置称之为VLAN【Virtual Local Area Network | 虚拟局域网】。

相关文章:

【数通网络交换基础梳理1】二层交换机、以太网帧、MAC地址数据帧转发原理详解

一、网络模型 万年不变,先从模型结构分析,现在大家熟知的网络模型有两种。第一种是,OSI七层模型,第二种是TCP/IP模型。在实际运用中,参考更多的是TCP/IP模型。 OSI七层模型 TCP/IP模型 不需要全部理解,…...

《分布式技术原理与算法解析》学习笔记Day22

哈希与一致性哈希 在分布式系统中,哈希和一致性哈希是数据索引或者数据分布的常见实现方式。 数据分布设计原则 在分布式数据存储系统中,做存储方案选型时,一般会考虑以下因素: 数据均匀数据稳定节点异构性隔离故障域性能稳定…...

[MySQL]MySQL数据类型

文章目录数据类型分类数值类型tinyint类型bit类型float类型decimal类型字符串类型char类型varchar类型char和varchar对比日期和时间类型enum和set类型数据类型分类 MySQL中,支持各种各样的类型,比如表示数值的整型浮点型,文本、二进制类型、…...

利用steam搬砖信息差赚钱,单账号200+,小白也能轻松上手!

现在很多人在做互联网而且也赚到钱了,但还是有很多人赚不到钱,这是为什么? 这里我不得不说一个词叫做赛道,也就是选择,选择大于努力,项目本身大于一切,90%的人都觉得直播带货赚钱,但…...

树与二叉树与森林的相关性质

文章目录树的度树的性质二叉树的性质二叉树与森林树的度 树的度指的是树内所有节点的度数的最大值。 节点的度:节点所拥有的子树的数量。简单来说,我们直接数分支即可,例如下图: 在这颗二叉树中,节点2的度为2&#…...

MySQL面试题

文章目录MySQL索引Mysql索引分类InnDB索引与MyISAM索引实现有什么区别一个表中如果没有创建索引,那么还会创建B树么?B树原理B树怎么来的B树 叶子节点和非叶子节点B树能存储多少数据?MySQL索引 Mysql索引分类 mysql 索引分为三类&#xff1a…...

【蓝桥OJ—C语言】高斯日记、马虎的算式、第39级台阶

文章目录高斯日记马虎的算式第39级台阶总结高斯日记 题目: 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。 后来人们知道&am…...

基于深度学习的三维重建网络PatchMatchNet(二):dtu数据集介绍及PatchMatchNet中加载数据部分代码解析

目录 1.dtu数据集介绍 2. PatchMatchNet中数据加载模块详解(dtu_yao_eval.py) 1.dtu数据集介绍 dtu数据集下载地址:dtu...

一文3000字从0到1实现基于requests框架接口自动化测试项目实战(建议收藏)

requests库是一个常用的用于http请求的模块,它使用python语言编写,在当下python系列的接口自动化中应用广泛,本文将带领大家深入学习这个库 Python环境的安装就不在这里赘述了,我们直接开干。 01、requests的安装 windows下执行…...

【RockerMQ】001-RockerMQ 概述

【RockerMQ】001-RockerMQ 概述 文章目录【RockerMQ】001-RockerMQ 概述一、MQ 概述1、MQ 简介2、MQ 用途限流削峰异步解耦数据收集3、常见 MQ 产品概述对比4、MQ 常见协议二、RocketMQ 概述1、简介2、发展历史一、MQ 概述 1、MQ 简介 MQ,Message Queue&#xff0…...

阿里是如何做Code Review的?

作为卓越工程文化的一部分,Code Review其实一直在进行中,只是各团队根据自身情况张驰有度,松紧可能也不一,这里简单梳理一下CR的方法和团队实践。 一、为什么要CR 提前发现缺陷 在CodeReview阶段发现的逻辑错误、业务理解偏差、性…...

内核调试:一次多线程调试与KASAN检测实例

内核调试:一次多线程调试与KASAN检测实例1. 环境说明2. 问题描述3. 问题排查与定位3.1 线程并发问题(减少线程数)3.2 轻量地跟踪对象的分配与释放3.3 检查空指针与潜在修改者3.4 KASAN检查4. 总结博主最近遇到一个非常顽固的多线程BUG&#x…...

Java - 数据结构,队列

一、什么是队列 普通队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列&#xf…...

ccc-pytorch-感知机算法(3)

文章目录单一输出感知机多输出感知机MLP反向传播单一输出感知机 内容解释: w001w^1_{00}w001​:输入标号1连接标号0(第一层)x00x_0^0x00​:第0层的标号为0的值O11O_1^1O11​:第一层的标号为0的输出值t:真实…...

LeetCode 225.用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() …...

【面试】spring控制反转IOC

目录一.说明二.ioc的概念和作用三.优点四.实现机制五.IOC和DI的区别六.设计原则一.说明 1.ioc的概念2.ioc的作用3.ioc的优点4.ioc的实现机制 二.ioc的概念和作用 1.全称Inversion of Control2.控制:创建对象的控制权3.反转:以前对象是程序员主动去new…...

Spring 事务管理详解及使用

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

LeetCode 232.用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元…...

go面向对象思想封装继承多态

go貌似都没有听说过继承,当然这个继承不像c中通过class类的方式去继承,还是通过struct的方式,所以go严格来说不是面向对象编程的语言,c和java才是,不过还是可以基于自身的一些的特性实现面向对象的功能,面向…...

【网络原理9】HTTP响应篇

在前两篇文章当中,已经分别介绍了HTTP是什么,以及常见的请求头当中的属性。【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包,Fiddler的使用https://blog.csdn.net/weixin_56738054/article/details/129148515?spm1001.2014.3001.…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...