HCIA 以太网的帧

news2024/11/18 19:31:22

一、前言

网络经常会遇到一些词汇,比如包、报文、帧,其概念如下:

1)帧(frame):数据链路层的协议数据单元,它包括三部分:帧头、数据部分、帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等。

2)数据包(packet):在TCP/IP协议通信传输中的数据单元,也称为“包”。指自包含的,带有足够寻址信息,可独立地从源主机传输到目的主机,而不需要以来早期地源主机和目的主机之间交换信息以及传输网络地数据包。

3)报文(message):是网路中交换与传输的数据单元,也是网络传输的单元,报文包含了将要发送的完整的数据信息,其长短不一。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的不受,那些就是报文头。

简单来说交换机交互的就是帧,路由器交互的是数据包,应用层则是报文。网络中实际传输的其实是帧,报文和包感觉更像是概念上的定义,本篇就是讲下帧的格式。

二、帧的类型

从Ethernet I发展到现在,大概有过5种以太帧格式(实际肯定不止,但我们主要不是讨论各种版本的帧),分别如下。

Ethernet I:1980 DEC,Intel,Xerox制订了Ethernet I的标准

Ethernet II:1982 DEC,Intel,Xerox又制订了Ethernet II的标准

(1982 IEEE开始研究Ethernet的国际标准802.3)

802.3 RAW:1983 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的Ethernet帧格式 。也就是802.3 RAW。

802.3 LLC:1985 IEEE推出了802.3的正式版,主要是加入了LLC控制字段所以又叫802.3 LLC。

802.3 SNAP:后来为解决Ethernet II与802.3的兼容问题推出了折中的SNAP格式。

总的来说,Ethernet II原本只是几家公司合伙制定的标准,802.3是IEEE发布的正式国际标准,但由于历史原因Ethernet II成了事实上大家都遵循的标准。

802.3 RAW是Novel基于IEEE原始版本自己开发的,但由于大家都不认最后只有他们家自己用。LLC是IEEE正式推出的国际标准,SNAP则是为兼容Ethernet II推出的。LLC和SNAP由于较Ethernet II还是有一些优势的,所以在特定场景下还是会使用这两个帧格式。

三、帧详解

1、Ethernet I

 

Preamble and SFD(8 byte):最前面的8个byte(64 bit)是固定值,前7个byte是10101010这样的值,第8个byte是10101011,大概长下面这样:

10101010、10101010、10101010、10101010、10101010、10101010、10101010、10101011

其作用是标识出帧的起始位置。前面我们讨论OSI参考模型时,了解过二层协议中非常重要的一点就是比特流的传输,0代表低电平1代表高电平。由于传输速率非常快,为确保数据的准确,在前后两个帧之间我们肯定是需要用一个非常显眼的标识来区分的。帧数据使用8个byte(64个bit)来交替发出01信号就是非常非常显眼的信号,可以避免前后两个帧的数据混淆。

Dest Addr(6 byte):目标地址,这里指的是MAC地址,比如54-89-98-A1-1B-BC。

Source Addr(6 byte):源地址,也是MAC地址。

Type(2 byte):类型,标识上层协议。比如0x0800是IP协议、0x0806是ARP协议。

Data(46-1500 byte):传输的数据,比如IP协议的报文就是放在这里面的。

FCS(4 byte):校验位

Inter Frame Gap:指的是前后两个帧的时间间距,不是数据。

2、Ethernet II

Ethernet II帧格式与Ethernet I完全一致,唯一不同的是II在I的基础上对电器特性和物理接口进行了更新。而Ethernet II也是目前使用最为广泛的帧格式也在事实上成为以太网的帧标准。不过在一些特定地方还是有使用802.3帧的,所以我们还得继续往下介绍。

3、802.3 RAW

 

相比较Ethernet I和II,802.3 RAW使用Length字段代替了type,又从Data里挪了2个字节赋值成0xFFFF。这样做当然不是为了蛋疼,而是有历史原因,前面说过802.3 RAW是Novel公司在IEEE还未正式推出802.3时,在其临时版本上自己推出的一个版本。在802.3临时版中使用Length字段代替了type字段,Novel公司沿用了这个设定,但后续802.3正式发布时又从Data中挪了3个字节用作DSAP、SSAP、Control字段(各一个字节,下面会讲到)。为了与正式版的802.3做兼容和区分,RAW就把DSAP和SSAP这两个字段赋值成0xFFFF,同时Control字段还是划回到Data里去。下面我们再讲各字段的含义。

4、802.3 LLC

 

前面说IEEE有过一个临时版本的802.3协议,被Novel拿去使用了,其中将Ethernet II中的type字段修改为Length,后来正式发布时又从Data字段里挪了3个字节用作DSAP、SSAP、Control字段,合称LLC头,作用也是标识上层协议。所以正式版的802.3又叫802.3 LLC。

Length(2 byte):后续数据的字节长度,但不包括检验码

DSAP(1 byte):目的服务接入点

SSAP(1 byte):源服务接入点

Control(1 byte):控制字段

DSAP、SSAP、Control这三个字段的作用可以说是代替了Ethernet II的type又超过type字段的作用。具体咋回事我也没搞清楚可以参考:数据链路层 - 知乎

5、802.3 SNAP

 

前面提到过SNAP是为了将802.3 LLC与Ethernet II进行兼容,兼容方式是保留Length、DSAP、SSAP、Control这4个字段,同时再从Data里挪5个字节用作SNAP字段。

而SNAP字段又由2个部分组成,前3个字节是org code,其含义是组织代码,其实就是MAC地址里前3个字节,所以其实没啥用。后2个字节是type与Ethernet II的type字段一模一样。其实也是通过这个SNAP里的type字段与Ethernet II帧兼容。

此外,为了与LLC帧进行区别,DSAP、SSAP的值固定为0xAA,Control的值固定为0x03。

6、汇总

我们再理一下:

1)Ethernet I与II帧格式一致,使用type字段来记录上层协议。

2)802.3帧将原type字段的位置用Length字段代替,含义是帧的数据长度,同时从Data里挪了3个字节用于DSAP、SSAP、Control字段,其作用类似type字段也是用于记录上层协议但可以做到更加精细化。

3)802.3 RAW帧是802.3还在研究中推出的版本,只有Novel一家公司使用,它与802.3有点像的地方是没有type字段而有Length字段。为与正式版802.3做区分,将802.3原本DSAP和SSAP字段的值设置为0xFF(两个字段一起就是0xFFFF)。

4)802.3 LLC帧是802.3的正式版,将SDAP、SSAP、Control字段合称为LLC头,所以为与其他帧格式区分把正式的802.3又叫做802.3 LLC,如果直接说802.3一般指的就是这个版本。

5)802.3 SNAP帧是802.3为了与Ethernet II进行兼容,它保留了Length字段,从Data里又借了5个字节,其中2个字节就是type字段,同时DSAP、SSAP的值固定为0xAA,Control的值固定为0x03。

四、帧在网络中的使用

Ethernet II:

Ethernet II帧是最常用的,我们随便传输个什么数据,你抓包看都是Ethernet II的帧,比如下图这个。

 

但Ethernet II帧的特点是有一个type字段但没有Length字段,那网络设备怎么知道帧数据传输完了呢?原理是网络传输中使用了“4B/5B”编码,具体是啥我也没明白,反正有了这个编码规则网络设备是能识别帧结束的。

802.3:

802.3 LLC是802.3的正式版本,与Ethernet II的区别在于它多了个Length字段和LLC控制字段(SDAP、SSAP、Control),网上说,相对来讲802.3 LLC比较能“控制”所以在交换机之间传输报文时,比如BPDU就使用802.3,我不太明白,但抓包后发现确实是这样,比如STP协议的BPUD报文就是802.3的帧,像下图这个。

 

如何区分Ethernet II和802.3:

前面说802.3有Length字段而Ethernet II是type字段,所以这两个字段在帧中的位置一样但取值不一样。具体来说一个帧最大的长度是1500字节,所以Length字段的最大值是0x05DC(1500的十六进制),于是大家就约定好,type字段的取值必须大于0x0600(比如0x800是IP帧,0x0806是ARP帧),这样就成功将两个帧格式给错开了。

802.3 RAW:

前面提到过,RAW是Novel公司自己使用的,特点是使用Length字段替代了type但没有LLC控制字段,为了做区分,大家约定RAW帧在802.3 LLC基础上,将DSAP和SSAP位置的值置为0xFFFF。所以当Length字段值小于0x0600且接着两个字节都是全F时,那就是RAW帧了。由于只有Novel自己使用,所以我们也不关心它了。

802.3 SNAP:

SNAP也是在802.3 LLC基础上改的,区分方法是它的DSAP和SSAP字段是固定值0x0A。搜了半天也没发现有哪些协议是用SNAP封装的帧,所以也不关心了。

五、总结

本文对几种常用的帧格式进行了简述,最后发现我们只需要关系Ethernet II和802.3 LLC就好了。

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

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

相关文章

vector容器模拟实现(上)

1.1:模板设置 因为不能与库已经有的vector冲突,首先定义命名空间namespace my 使用类模板。 1.2:成员变量 vector有size,capacity,同时也要进行扩容操作和缩容(shrink to fit)操作,所以需要3个迭代器。 p…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java杨柳农贸市场摊位管理系统qr3ri

大四计算机专业的同学们即将面临大学4年的最后一次考验--毕业设计。通过完成毕业设计来对过去4年的大学学习生活做一个总结,也是检验我们学习成果的一种方式,毕业设计作品也是我们将来面试找工作的一个敲门砖。 选题前先看看自己掌握哪些技术点、擅长哪…

mysql首次安装error 1045 28000解决

mysql首次安装error 1045 28000解决 首先找到了这个教程,按其操作一步一步来,发现到登录输入密码这一步,怎么样都报错 2021MySql-8.0.26安装详细教程(保姆级) 然后按照这篇操作,但还是不行 MySQL安装1045错…

[附源码]Python计算机毕业设计Djangoospringboot作业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

通过窗口看世界之 界面制作如此简单-带你制作旅游观光系统界面-----效果图展示

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 玩归玩闹归闹,别拿java开玩笑 ⭐旅游管理系统部分效果图展示⭐ 文章目录⭐旅游管理系统部分效果图…

持久化的配置都不知道,也敢说精通Redis?

前言 所谓持久化可以简单理解为将内存中的数据保存到硬盘上存储的过程。持久化之后的数据在系统重启或者宕机之后依然可以进行访问,保证了数据的安全性。一键获取最先java文档。 Redis有两种持久化方案,一种是快照方式(SNAPSHOTTING&#xff…

前端 | 前端设计设计及代码收集

全部来源于Github,侵权删! 1.Maxime Euzire 2.Shubham Singh | Resume 3.Natasha Theodora Petrus 4.Ana Mara Martnez Gmez 5.bagussona.github.io 6.leodevbro.github.io 7.yuanlinping.github.io 8.Dr.Q 9.sureshmurali.github.io 10.Chandrika Deb | Software…

常见的接口测试面试题

1、按你的理解,软件接口是什么? 答: 就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。 2、HTTP和HTTPS协议区别? 答: https协议需要到CA(Certificate Authority,证…

[附源码]JAVA毕业设计医疗器械销售电子商城(系统+LW)

[附源码]JAVA毕业设计医疗器械销售电子商城(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

Spring:Ioc

目录 一、Spring的两大核心机制 1、IOC/ DI:控制反转和依赖注入 2、AOP:面向切面编程 二、IOC/ DI:控制反转 / 依赖注入: 1、bean的基础配置: 2、bean的实例化 3、配置bean 4、依赖注入方式 三、注解开发定义bean 注解依赖注入 Spring设计理念 …

Spring推断构造方法源码深度解析

文章目录前言思考目标一、bean的实例化入口-createBeanInstance1、源码逻辑思路**核心点,主要做了几件事情**2、instantiateBean-默认无参实例化3、instantiate-实例化4、instantiateClass-实例化类二、获取构造函数候选数组-determineConstructorsFromBeanPostProc…

这十套练习,教你如何用Pandas做数据分析(04)

练习4-Apply函数 探索1960 - 2014 美国犯罪数据 步骤1 导入必要的库 运行以下代码 import numpy as np import pandas as pd 步骤2 从以下地址导入数据集 运行以下代码 path4 ‘…/input/pandas_exercise/pandas_exercise/exercise_data/US_Crime_Rates_1960_2014.csv’…

微信小程序|入门进阶

接下来点击新建项目就可以在主界面中预览到我们的豆瓣电影示例了 小程序开发初体验 Hello world 希望是一个从零到一的转换过程~ 创建项目 接下来创建一个新的项目,理解小程序项目的基本结构和一些基础语法。 官方的开发工具为此准备了一个QuickStart项目。在创建过程中,…

利用jrebel与arthas在centos7 springboot热部署

jrebel 热部署 jrebel在本地是可以class xml一起热部署,但是远程热部署xml不行,所以用arthas代替去热部署xml 1.jrebel 反向代理 因为jrebel是收费插件,所以要高一些小动作咱们才能‘正常’使用,当然你也可以拿别人代理好的操作…

并发基础(五):ThreadPoolExecutor源码解析

尺有所短,寸有所长;不忘初心,方得始终。 请关注公众号:星河之码 在JDK提供的几种线程池技术,除了JDK8新加的newWorkStealingPool之外,其余的几种线程池都是通过ThreadPoolExecutor 来实现线程池技术&#x…

本周大新闻|FDA公布XR认证医疗名单,索尼推数字孪生平台Mapray

本周大新闻,AR方面,苹果首款MR头显或推迟至2023年下半年发布;FDA官网公布经过认真的AR/VR医疗方案名单;索尼预测AR/VR光学发展路径;索尼公布3D数字孪生平台Mapray;索尼公布ToF AR SDK。 VR方面&#xff0c…

Docker简介与安装

一、Docker 简介 1.1 为什么选择Docker? 更高效的利用系统资源更快速的启动时间一致的运行环境持续交付和部署更轻松的迁移更轻松的维护和扩展 1.2 Docker组件 1.2.1 Docker服务器与客户端 Docker是一个客户端-服务器(cs)架构程序。Docker客户端只…

linux下共享内存和消息队列实现多进程间数据收发

linux下进程通信的方式有很多,共享内存,消息队列,管道等。共享内存可以传输大量数据,但是多个进程同时读取共享内存就会出现脏读,可以借助消息队列实现多进程消息发送和接收。这种组合方式在实际开发中应用还是很多的&…

计算机网络复习(五)

考点:UDP 拥塞控制 TCP三次握手四次握手 P247 熟知端口号 P215 TCP报文计算5-36.假定TCP采用一种仅使用线性增大和乘法减小的简单拥塞控制算法,而不使用慢开始。发送窗口不采用字节为计算单位,而是使用分组pkt为计算单位。在一开始发送窗口为…

时序预测 | MATLAB实现VAR和GARCH时间序列预测

时序预测 | MATLAB实现VAR和GARCH时间序列预测 目录 时序预测 | MATLAB实现VAR和GARCH时间序列预测预测效果基本介绍程序设计VARGARCH参考资料预测效果 基本介绍 机器学习可其用于时间序列问题的分类和预测。在探索时间序列的机器学习方法之前,尝试统计时间序列预测方法,它列…