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

以太网 MAC 帧格式

文章目录

    • 以太网 MAC 帧格式
    • 以太网帧间隔
    • 参考

本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均附有参考链接,如侵权,请联系删除。

以太网 MAC 帧格式

以太网技术的正式标准是 IEEE 802.3,它规定了以太网传输数据的帧结构,我们可以把以太网 MAC层理解成高速公路,我们必须遵循它的规则才能在上面通行,以太网 MAC 层帧格式如下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以太网传输数据时按照上面的顺序从头到尾依次被发送和接收,我们下面进一步解释各个区域

  • 前导码(Preamble):为了实现底层数据的正确阐述,物理层使用 7 个字节同步码(0 和 1 交替(55- 55-55-55-55-55-55))实现数据的同步。
  • 帧起始界定符(SFD,Start Frame Delimiter):使用 1 个字节的 SFD(固定值为 0xd5)来表示一帧的开始,即后面紧跟着传输的就是以太网的帧头。
  • 目的 MAC 地址:即接收端物理 MAC 地址,占用 6 个字节。MAC 地址从应用上可分为单播地址、组播地址和广播地址。单播地址:第一个字节的最低位为 0,比如 00-00-00-11-11-11,一般用于标志唯一的设备;组播地址:第一个字节的最低位为 1,比如 01-00-00-11-11-11,一般用于标志同属一组的多个设备;广播地址:所有 48bit 全为 1,即 FF-FF-FF-FF-FF-FF,它用于标志同一网段中的所有设备。
  • 源 MAC 地址:即发送端物理 MAC 地址,占用 6 个字节。
  • 长度/类型:上图中的长度/类型具有两个意义,
    • 当这两个字节的值小于 1536(十六进制为 0x0600)时,代表该以太网中数据段的长度;
    • 如果这两个字节的值大于 1536,则表示该以太网中的数据属于哪个上层协议,
      • 例如 0x0800 代表 IP 协议(网际协议)
      • 0x0806 代表 ARP 协议(地址解析协议)等。
  • 数据:以太网中的数据段长度最小 46 个字节,最大 1500 个字节。最大值 1500 称为以太网的最大传输单元(MTU,Maximum Transmission Unit),之所以限制最大传输单元是因为在多个计算机的数据帧排队等待传输时,如果某个数据帧太大的话,那么其它数据帧等待的时间就会加长,导致体验变差,这就像一个十字路口的红绿灯,你可以让绿灯持续亮一小时,但是等红灯的人一定不愿意的。另外还要考虑网络I/O 控制器缓存区资源以及网络最大的承载能力等因素,因此最大传输单元是由各种综合因素决定的。为了避免增加额外的配置,通常以太网的有效数据字段小于 1500 个字节。
  • 填充域,由于协议要求整个 MAC 数据包的长度至少为 64 字节(接收到的数据包如果少于 64 字节会被认为发生冲突,数据包被自动丢弃),当数据段的字节少于 46 字节时,在填充域会自动填上无效数据,以使数据包符合长度要求。
  • 帧检验序列(FCS,Frame Check Sequence):为了确保数据的正确传输,在数据的尾部加入了 4 个字节的循环冗余校验码(CRC 校验)来检测数据是否传输错误。CRC 数据校验从以太网帧头开始即不包含前导码和帧起始界定符。通用的 CRC 标准有 CRC-8、CRC-16、CRC-32、CRC-CCIT,其中在网络通信系统中应用最广泛的是 CRC-32 标准。

以太网帧间隔

以太网相邻两帧之间的时间间隔,即帧间隙(IFG,InterpacketGap)。帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,IFG 的最小值是 96 bit time,即在媒介中发送 96 位原始数据所需要的时间,在不同媒介中 IFG 的最小值是不一样的。不管 10M/100M/1000M 的以太网,两帧之间最少要有 96bit time,IFG 的最少间隔时间

计算方法如下:

  • 10Mbit/s 最小时间为:96*100ns = 9600ns;
  • 100Mbit/s 最小时间为:96*10ns = 960ns;
  • 1000Mbit/s 最小时间为:96*1ns = 96ns。

参考

  • https://blog.csdn.net/yindq1220/article/details/138027595
  • 正点原子《开拓者之FPGA开发指南V3.2》
  • LwIP应用开发实战指南—基于STM32

http://www.kler.cn/a/593128.html

相关文章:

  • 如何在前端发版时实现向客户端推送版本更新消息
  • Flutter中Align的使用说明
  • 【论文阅读】MMed-RAG:让多模态大模型告别“事实性幻觉”​
  • docker pull 提示timeout
  • 在线 SQL 转 Python ORM工具
  • 【从零开始学习计算机科学】算法分析(二)排序算法 与 分治法
  • Python与Web 3.0:重新定义数字身份验证的未来
  • C# HTTP认证方式详解与代码实现
  • 日常用命令
  • SAP的WPS导出找不到路径怎么办;上载报错怎么办
  • Could not create directory ‘/c/Users/.ssh‘ (No such file or directory).
  • python 数据可视化matplotib库安装与使用
  • 【SpringMVC】深入解析 API 概念及接口定义方法和 SpringMVC 综合实战—简单加法计算器
  • 革新协作体验 | 集和诚KMDA-2631协作机器人控制器重磅上市!
  • [数据结构]排序之 堆排序详解
  • 先有OLE还是先有COM?
  • xss漏洞基础整理
  • podspec语法
  • MyBatis 传递多个参数的方式
  • 原生JavaScript控制页面跳转的几种方式