以太网数据帧格式详解

一、数据帧格式概述

以太网是一种局域网技术,以太网数据帧是在以太网上传输的基本单位,其格式如下:

+--------+--------+--------+--------+------------------+-------------------+
|  前导码 | 目的地址| 源地址 | 类型/长度        |       数据        |   帧校验序列(FCS)  |
+--------+--------+--------+--------+------------------+-------------------+
| 8 字节 | 6 字节 | 6 字节 | 2 字节或4 字节 | 46~1500 字节| 4 字节                                          |
+--------+--------+--------+--------+------------------+-------------------+

以上数据帧格式中,各字段的含义如下:

  • 前导码:使用8个字节的连续的101010…(以二进制表示)作为二进制同步序列,用于标识接入网线的信号开始,以及同步接收方时钟。
  • 目的地址:指示数据帧的接收方MAC地址,6个字节,第7位为0,标识为单播地址;第7位为1,标识为多播地址。第8位还可以用于指示组播地址。
  • 源地址:指示数据帧的发送方MAC地址,同样为6个字节。
  • 类型/长度:两个字节,用于指示数据帧的类型,或标识长度子网中,以太网最小数据长度为64字节,如果数据帧长度不足64字节,则需在数据部分中填充空数据,以凑齐长度要求。(类型字段会使第一个字节数值小于等于0x05DC)。
  • 数据:数据部分,长度为46~1500字节之间。
  • 帧校验序列(FCS):4个字节,用于检查数据帧在传输过程中是否出现错误。

二、目的地址解析

数据帧的目的地址是6个字节的MAC地址,其中第1个字节表示最高位,第6个字节表示最低位。前3个字节是IEEE组织的注册号,用来唯一标识网络设备厂商;后3个字节由厂商自行分配使用。目的地址的第7位表示地址类型,0表示单播地址,1表示组播地址。如果目的地址的第一位(最高位)为0,则表示这是一个全球唯一标识的MAC地址,由IEEE组织统一分配,如:”00-60-08-6B-AC-00″。

如果在局域网中,发送数据时不知道目的MAC地址,可以使用广播地址(目的地址的第一位全部为1),如:”FF-FF-FF-FF-FF-FF”。任何接收方都能接收到广播数据帧。

三、类型/长度字段

类型/长度字段中,类型字段为2个字节,用于指示数据帧的类型,如IP数据报、ARP请求等等。长度字段也为2个字节,在以太网中,如果长度字段小于或等于0x05DC,表示该字段表示数据的长度;若大于0x05DC,则表示该字段是类型字段(Type)。

在IEEE802.3中,如果长度字段值大于0x05DC,那么它表示数据部分的长度。例如,对于Gigabit以太网,长度字段上限是0xFFFF,表示帧最大大小为1518字节(包括前导码、数据、帧校验序列)。

四、帧校验序列(FCS)

FCS字段用于检查数据的传输错误,对数据帧的每个字节(除了FCS字段)进行一系列的算法运算,产生一个32 位的校验和,作为 FCS字段的值,接收方将会使用相同的算法运算,对接收到的数据帧进行验证,如果验算失败,则接收方会请求重发。

对于以太网数据帧,采用的多项式为CRC32,其生成多项式为x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1。定义一个32位寄存器,与多项式生成器进行异或,便可以生成FCS。

#define POLY 0xEDB88320UL

unsigned long crc32(unsigned long crc, const unsigned char* buffer, size_t size)
{
    for(size_t i=0; i<size; i++){
        crc ^= buffer[i];
        for (unsigned int j = 0; j > 1) ^ (-(crc & 1u) & POLY);
        }
    }
    return crc;
}

五、结语

以上是以太网数据帧格式的详细解析,由于以太网是一种非常基础的局域网技术,应用非常广泛,这个格式的认识是十分必需的。通过对数据帧格式的分析,不仅可以加深对以太网的了解,也可以掌握数据传输过程中部分概念及技术实现,如CRC校验算法等等。

原创文章,作者:TKSEJ,如若转载,请注明出处:https://www.506064.com/n/368539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TKSEJTKSEJ
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • Python根据表格数据生成折线图

    本文将介绍如何使用Python根据表格数据生成折线图。折线图是一种常见的数据可视化图表形式,可以用来展示数据的趋势和变化。Python是一种流行的编程语言,其强大的数据分析和可视化…

    编程 2025-04-29

发表回复

登录后才能评论