【通信网络】二层基础:03 二层转发基础

1. 二层转发概述

数据链路层,位于OSI模型中的第二层,所以称之为二层。本文我们讨论的转发过程,就是在数据链路层上的转发过程,即二层转发。

1.1 MAC地址

为了唯一的表示一台网络设备,网络设备都有自己的MAC地址。IEEE 802.3标准中,MAC地址被定义为48位(6字节)的地址。MAC地址的前24位称为组织唯一标识符(OUI),由IEEE分配给厂商,剩下的24位是网络接口标识符,表示厂商生产的网络设备的序列号。在前面的文章中,我们已经讲述过MAC地址,此处不再赘述。

1.2 帧

数据链路层上转发的数据叫帧,帧中包含了源设备的MAC地址(源MAC,SMAC)和目的设备的MAC地址(目的MAC,DMAC)。根据数据帧中DMAC的差异,分为单播帧、多播帧和广播帧,这里我们只分析单播帧和广播帧。在前面的文章中,我们已经讲述过帧,此处不再赘述。

了解完这些基础概念后,我们来分析二层转发过程。

更多文章也可以参看:

https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzk1NzU5MTE1OA==&action=getalbum&album_id=3768926401970290692#wechat_redirect

2. 基于MAC的二层转发

假设设备A~C在同一个局域网,他们三者的MAC地址已经列出来了,那么A和B之间的数据转发过程如何呢?下面,我们在设备C的内部详细分析一下。

7c83b38c5d1445e192c353e178247503.png

2.1 已知单播的二层转发

如果设备A已经知道设备B的MAC地址,那么发出的数据帧中的DMAC填的就是设备B的MAC地址,源MAC地址填的是自己的地址,那么具体的转发流程如下所示。

f6833c1ad61a43729e48aa4e18834fb7.png

(1)源MAC学习。设备C从PORT 1收到设备A发送的数据帧,根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(2)目的MAC转发。设备C根据数据帧的DMAC去MAC地址表中查找,找到对应的出端口是PORT 2,上图中绿色虚线框中的条目。那么就会将该数据帧从PORT 2转发出去,这样就完成了转发过程。

2.2 ARP协议

在上文中,我们描述的是设备A已知设备B的MAC地址的场景下的转发过程,那么我们怎么能知道设备B的MAC地址呢?这时候就需要请出我们的ARP协议了。

ARP报文的格式如下:

fcdf5e5db30644518aae6fc0a2d84113.png

报文中的各个字段的含义如下:

字段

长度

含义
DMAC6字节目的MAC地址
SMAC6字节源MAC地址
Type2字节

Type:指链路直接封装的上层协议类型,对于ARP请求或应答来说,该字段的值为0x0806。

802.1Q Tag4字节

802.1Q Tag

Hardware Type

16比特

表示硬件地址的类型。对于以太网,该类型的值为“1”。

Protocol Type

16比特

表示发送方要映射的协议地址类型。对于IP地址,该值为0x0800。

Hardware Length

8比特

表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6。

Protocol Length

8比特

表示协议地址的长度,单位是字节。对于ARP请求或应答来说,该值为4。

OP

16比特

操作类型:

  1 ARP请求

  2 ARP应答

  3 RARP请求

  4 RARP应答

Ethernet Address of Sender

48比特

发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。

IP Address of Sender

32比特

发送方的IP地址。

Ethernet Address of Destination

48比特

接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00

IP Address of Destination

32比特

接收方的IP地址。

FCS4字节

帧校验序列FCS(Frame Check Sequence)是为接收者提供判断是否传输错误的一种方法,如果发现错误,丢弃此帧。 FCS只是通用叫法,具体的FCS还可以细分多种校验方法。在以太帧中,FCS通常采用循环冗余码校验CRC(Cyclical Redundancy Check)。

如下图,A~J在同一个局域网,这时候A要和B通信,但是A不知道B的MAC地址,那么该怎么办呢?

3048c37af2cb4e41add039116bc4e02b.png

这时,A可以发送ARP请求广播报文到整个广播域去扩散,等待B的应答,具体过程如下。(ARP报文中包含了发送方和接收方的MAC地址和IP地址,ARP请求报文中,接收方的MAC地址填全0。)

e8372347b14043d988d79041704ecf11.png

(1)A发送ARP请求广播报文到C和D,图中的橙色箭头。这时,C和D会进行源MAC学习,图中橙色的MAC地址表条目。(这里只列出了D,C与之类似。)

(2)D收到ARP请求广播报文,检查目的IP不是自己,将ARP请求广播报文泛洪到E和H,图中的橙色箭头。这时,E和H会进行源MAC学习,图中橙色的MAC地址表条目。(这里只列出了H,E与之类似。)

(3)E收到ARP请求广播报文,检查目的IP不是自己,将ARP请求广播报文泛洪到F;H收到ARP请求广播报文,检查目的IP不是自己,将ARP请求广播报文泛洪到B、G和I,图中的橙色箭头。这时,F、B、G和I会进行源MAC学习,图中橙色的MAC地址表条目。(这里只列出了B,F、G和I与之类似。)

(4)B收到ARP请求广播报文,检查目的IP是自己,查询MAC地址表,将ARP应答报文发送到H,图中的绿色箭头。同样的,这时,B会进行源MAC学习,图中橙色的MAC地址表条目

(5)H收到ARP应答报文,检查目的IP不是自己,查询MAC地址表,将ARP应答报文发送到D,图中的绿色箭头。同样的,这时,H会进行源MAC学习,图中绿色的MAC地址表条目

(6)D收到ARP应答报文,检查目的IP不是自己,查询MAC地址表,将ARP应答报文发送到A,图中的绿色箭头。同样的,这时,D会进行源MAC学习,图中绿色的MAC地址表条目

(7)A收到ARP应答报文,检查目的IP是自己,这样A就知道了B的MAC地址。同样的,这时,A会进行源MAC学习,图中绿色的MAC地址表条目

2.3 未知单播的二层转发

如果设备C上收到的报文是未知单播,又是怎样的转发过程呢?

79278484d5dd4fce9307cebab0719ce9.png

(1)源MAC学习。设备C从PORT 1收到设备A发送的数据帧,根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(2)泛洪转发。设备C根据数据帧的DMAC去MAC地址表中查找,发现并没有找到对应的MAC地址表条目。那么就会将该数据帧从除源端口外的其他所有端口转发出去,即泛洪转发。

2.4 广播的二层转发

如果设备C上收到的报文是广播帧,又是怎样的转发过程呢?

e614786ea51a4e88a7cf996e7de9e485.png

(1)源MAC学习。设备C从PORT 1收到设备A发送的数据帧,根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(2)泛洪转发。设备C发现数据帧的DMAC是全F,说明是广播帧,那么就会将该数据帧从除源端口外的其他所有端口转发出去。

3. 基于VLAN的二层转发

根据前面的文章,我们知道,早期的局域网存在广播帧泛滥,信息安全等问题。而VLAN技术可以将物理局域网划分为一个一个的逻辑子网(每个逻辑子网是一个广播域),一定程度上解决了这些问题。下文,我们还是以上文的拓扑为基础(设备A~C在同一个VLAN广播域),基于VLAN内的不同类型的端口,来讲述VLAN的二层转发。

7c83b38c5d1445e192c353e178247503.png

3.1 Access口的二层转发

设备C的PORT 1和PORT 2均配置成Access口,PVID配置成10。

e6212c575779491cafdde3e9953b33de.png

(1)如果设备C收到的是Untagged帧,需要先插入一层802.1Q Tag,Tag中的VID值是10。如果设备C收到的Tagged帧中VID值是10,则可以接收且不需要插入802.1Q Tag。

(2)源MAC学习。设备C根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目,MAC地址表也保存了VLAN信息。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(3)目的MAC转发。设备C根据数据帧的DMAC+VLAN去MAC地址表中查找,找到对应的出端口是PORT 2,上图中绿色虚线框中的条目,那么就会将该数据帧从PORT 2转发。

(4)设备C在出口将数据帧的802.1Q Tag剥除掉,这样就完成了转发过程。

3.2 Trunk口的二层转发

设备C的PORT 1和PORT 2均配置成Trunk口,PVID配置成10,Allowed VLAN配置成20。

3.2.1 Trunk口PVID的二层转发

Trunk口PVID的二层转发与Access口PVID的二层转发一致,此处不再赘述,只简单以图片说明。

04917d201bb146998261b97029b3a6ea.png

3.2.2 Trunk口Allowed VLAN的二层转发

设备C的PORT 1和PORT 2均配置成Trunk口,Allowed VLAN配置成20。

5834d543519a400facaa7926870995a4.png

(1)如果设备C收到的Tagged帧中VID值是20,则可以接收且不需要插入802.1Q Tag。

(2)源MAC学习。设备C根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目,MAC地址表也保存了VLAN信息。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(3)目的MAC转发。设备C根据数据帧的DMAC+VLAN去MAC地址表中查找,找到对应的出端口是PORT 2,上图中绿色虚线框中的条目,那么就会将该数据帧从PORT 2转发。

(4)设备C在出口不需要剥除数据帧中的802.1Q Tag即可转发,这样就完成了转发过程。

3.3 Hybrid口的二层转发

设备C的PORT 1和PORT 2均配置成Hybrid口,PVID配置成10,Untagged VLAN配置成20,Tagged VLAN配置成30。

3.3.1 Hybrid口PVID的二层转发

Hybrid口PVID的二层转发与Access口PVID的二层转发一致,此处不再赘述,只简单以图片说明。

13b20aba06a644cdb0e0c7af248def8d.png

3.3.2 Hybrid口Untagged VLAN的二层转发

设备C的PORT 1和PORT 2均配置成Hybrid口,Untagged VLAN配置成20。

bf7feb0e806a49848b38c1f4ecb6dcc2.png

(1)如果设备C收到的Tagged帧中VID值是20,则可以接收且不需要插入802.1Q Tag。

(2)源MAC学习。设备C根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目,MAC地址表也保存了VLAN信息。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(3)目的MAC转发。设备C根据数据帧的DMAC+VLAN去MAC地址表中查找,找到对应的出端口是PORT 2,上图中绿色虚线框中的条目,那么就会将该数据帧从PORT 2转发。

(4)设备C在出口将数据帧的802.1Q Tag剥除掉,这样就完成了转发过程。

3.3.3 Hybrid口Tagged VLAN的二层转发

Hybrid口Tagged VLAN的二层转发与Trunk口Allowed VLAN的二层转发一致,此处不再赘述,只简单以图片说明。

4c9b0b184b6a4a27a0308ec56ffd6978.png

3.4 VLAN的泛洪转发

VLAN的泛洪转发和MAC的泛洪转发差异不大,未知单播和广播都会泛洪,主要区别是只在VLAN域内泛洪。如下图中的PORT 4,因为不在VLAN 10内,所以不会泛洪到这个端口。整体实现原理差异不大,此处不再赘述,只简单以图片说明。

ee7281563bbe45eaa090c8d45d82c600.png

4. VLAN的二层转发方式(扩展介绍)

4.1 独立式VLAN学习

通过上文,我们可以看出,设备在查MAC地址表转发的时候,索引是MAC+VLAN,这样的转发方式称为独立式VLAN学习(Independent VLAN Learning,IVL)。这种方式的VLAN学习,VLAN之间不会互相影响,目前实际应用中的二层交换机大多也都采用这种方式。

4.2 共享式VLAN学习

此外,我们也可以将MAC作为索引,去查表转发,这样的转发方式称为共享式VLAN学习(Shared VLAN Learning,SVL)。具体的转发过程如下所示。

设备C的PORT 1和PORT 2均配置成Trunk口,PVID配置成10。

2aa531a2adfb4c8a8e95a733a548d5b5.png

(1)如果设备C收到的是Untagged帧,需要先插入一层802.1Q Tag,Tag中的VID值是10。如果设备C收到的Tagged帧中VID值是10,则可以接收且不需要插入802.1Q Tag。

(2)源MAC学习。设备C根据数据帧的SMAC学习到一条MAC地址表的条目,上图中紫色虚线所指的条目,MAC地址表也保存了VLAN信息。(同理,如果从PORT 2收到设备B发送的数据帧,也会学习到相应的MAC地址表条目。)

(3)目的MAC转发设备C根据数据帧的DMAC去MAC地址表中查找,找到之后,检查该条目的VLAN是10,满足要求。所以对应的出端口是PORT 2,上图中绿色虚线框中的条目,那么就会将该数据帧从PORT 2转发。

(4)设备C在出口将数据帧的802.1Q Tag剥除掉,这样就完成了转发过程。

看起来,这样的转发方式似乎也没有什么问题,真的是这样的吗?我们继续分析。

设备C的PORT 1和PORT 2均配置成Trunk口,Allowed VLAN配置成20,30。

e561a390583440e59bc7a1dae48feb8a.png

如果此时,设备C从PORT 1同时收到Tagged 20和Tagged 30的数据帧,那么此时MAC地址表就会不停地变化,即00-0C-88-00-00-0A这一条MAC地址表条目的VLAN在20和30之间不断地变化。同理,00-0C-88-00-00-0B这一条目也是类似的。

如果在某一时刻下,00-0C-88-00-00-0B这一MAC地址表条目的VLAN变成了30,那么此时就只有Tagged 30的报文能够从PORT 2转发出去,而Tagged 20的就会被丢弃掉。所以,在实际的应用中,SVL方式的二层交换机已经比较少见了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到100:基于Java的大学选修课选课小程序开发笔记(上)

背景 为学生提供便捷的课程选择方式,并帮助学校进行课程管理和资源调配;主要功能包括:课程展示,自主选课,取消选课,后台录入课程,统计每门课程报名情况,导出数据,用户管…

基于Springboot + vue实现的火锅店管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

基于Svelte 5的体检查询系统前端设计与实现探究

一、引言 1.1 研究背景与意义 在当今数字化时代,医疗信息化已成为医疗行业发展的重要趋势。随着人们对健康的重视程度不断提高,体检作为预防疾病、保障健康的重要手段,其相关信息的管理和查询需求也日益增长。传统的体检查询系统前端往往存…

科大讯飞在线语音合成(流式版)python版

1、进入自己的项目 复制APPID、APISecret、APIKey 2、添加好听发音人 复制vcn参数 3、需要替换代码部分: 换自己喜欢的发声人的参数 换上自己的APPID、APISecret、APIKey 4、完整代码: # -*- coding:utf-8 -*- import _thread as thread import base…

TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手 采用三次握手的原因: 确认双方的收发能力。第一次握手,客户端发送 SYN 报文,告诉服务器自身具备发送数据的能力,第二次握手,服务器回应 SYN ACK 报文,表名自己既能…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题,就好像是我要去找在南方的人,然后我刚好不分南北,我认为的方向错了,实则方向对了。 在我针对复盘解决:sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候,又出现…

2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。

文章目录 sklearn学习(25) 无监督学习-神经网络模型(无监督)25.1 限制波尔兹曼机25.1.1 图形模型和参数化25.1.2 伯努利限制玻尔兹曼机25.1.3 随机最大似然学习 sklearn学习(25) 无监督学习-神经网络模型(无监督) 文章参考网站&a…

Spring ----深入理解AOP(面向切面编程)

给程序做增强 事务是最小的执行单元,转账,同时成功、同时失败 TxUtils类式事务管理类,有6个静态方法,可以直接通过类名来调用,threadlocal线程池,还有一个静态代码块,来加载链接 从数据源中获取…

vue源码分析(十)—— 生命周期

文章目录 前言一、关键方法 callHook二、详细的钩子函数说明1.beforeCreate和create2.beforeMount & mounted注意点组件(非根组件)的渲染节点(1)invokeInsertHook函数(2)insert方法(3&#…

docker离线安装及部署各类中间件(x86系统架构)

前言:此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本:docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面,这里放在…

【WIN11新机/重装系统 把尿级系统设置优化】

目录 一、更改鼠标样式二、更改显示器刷新率三、常规文件存储路径0.存储感知1.保存新内容的地方2.快捷访问的文件路径3.Edge浏览器下载路径 四、通知关闭五、开机自启动关闭六、隐私关闭七、性能优化1.开机优化2.用户账控制关闭 八、关闭Windows自动更新九、任务栏设置十、必装…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品,只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…

修改网络ip地址方法有哪些?常用的有这四种

在数字时代,IP地址作为网络设备的唯一标识,对于网络连接和通信至关重要。然而,有时候我们可能需要修改设备的IP地址,以满足特定的网络需求或解决网络问题。本文将为您详细介绍几种修改网络IP地址的常用方法,无论是对于…

【Java项目】基于SpringBoot的【外卖点餐系统】

【Java项目】基于SpringBoot的【外卖点餐系统】 技术简介:本系统使用JSP技术,采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介:管理员;首页、个人中心、用户管理、商家管理、菜品分类管理、骑手管理、系统管理…

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化? Docker是一个开源容器化工具,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring B…

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档: chooseMessageFile 微信小程序读取文件,请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

vue3+vite+nginx打包

在开发环境下,已经可以正常地运行一个有增删改查功能的页面了,但如何把它发布到运行服务器呢?仍有许多的问题需要探索。 网上很多文章给了很大的帮助,但总是没有说明原理,对于像我这样的初学者来说,不知其…

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层

文章目录 3. Transport Layer(传输层)3.1 Multiplexing and demultiplexing(多路复用和多路分解)3.2 Connectionless transport:UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…

JVM 详解

一. JVM 内存区域的划分 1. 程序计数器 程序计数器是JVM中一块比较小的空间, 它保存下一条要执行的指令的地址. [注]: 与CPU的程序计数器不同, 这里的下一条指令不是二进制的机器语言, 而是Java字节码. 2. 栈 保存方法中的局部变量, 方法的形参, 方法之间的调用关系. 栈又…