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

MAC地址与帧结构

目录

一、MAC地址

定义

格式

作用

二、帧结构

定义

典型帧结构(以以太网帧为例)

前导码

帧开始定界符

目的MAC地址

源MAC地址

类型/长度字段

数据字段

帧校验序列


一、MAC地址

定义

MAC地址(Media Access Control address)是物理地址,也称为硬件地址或链路地址。它是一个用来确认网络设备位置的地址。在OSI模型中,MAC地址工作在数据链路层。

格式

MAC地址是一个48位的二进制数。通常以12位十六进制数表示。例如:00 - 1A - 2B - 3C - 4D - 5E。

这48位可以分为两部分:

前24位是组织唯一标识符(OUI,Organizationally Unique Identifier)。它是由IEEE(电气和电子工程师协会)分配给各个网络设备制造商的。例如,00 - 1A - 2B这部分就是某个网络设备制造商的唯一标识。不同的制造商有自己独特的OUI,通过它可以识别出设备是由哪家公司生产的。

后24位是由制造商自己分配的扩展标识符。这部分用于区分同一制造商生产的不同设备。例如,3C - 4D - 5E就是同一制造商内部用来区分设备的编号。

作用

设备识别:在局域网中,MAC地址是网络接口卡(NIC)的唯一标识。当数据在局域网内传输时,源设备会使用目的设备的MAC地址来确定数据应该发送到哪个设备。例如,在一个公司的办公网络中,计算机A要向计算机B发送文件,计算机A会查找计算机B的MAC地址,然后将数据帧封装好发送出去。

链路层通信:在数据链路层,MAC地址用于在相邻节点之间进行数据传输。它与IP地址不同,IP地址是网络层的逻辑地址,用于在不同网络之间进行路由选择,而MAC地址是物理地址,用于在同一个局域网内部的设备之间进行通信。

二、帧结构

定义

帧是数据链路层的协议数据单元(PDU)。它是网络通信中数据链路层交换和传输的数据单元。帧就像一个“信封”,把网络层的协议数据单元(通常是IP数据报)封装起来,加上一些必要的控制信息,以便在物理链路上进行传输。

典型帧结构(以以太网帧为例)

前导码

长度为7个字节。它是一个特殊的位模式(10101010),用于同步发送方和接收方的时钟。在数据传输过程中,接收设备需要通过前导码来调整自己的接收时钟,以便能够正确地接收后续的数据。例如,当一个网络接口卡开始接收数据时,它会先检测到前导码的这个特定模式,从而知道数据即将开始传输。

帧开始定界符

长度为1个字节,其值为10101011。它标志着帧的正式开始。接收设备在检测到SFD后,就知道后面的数据是帧的内容,而不是其他无效的信号。

目的MAC地址

长度为6个字节。它标识了帧的接收方的MAC地址。就像邮件上的收件人地址一样,数据链路层会根据这个地址将帧发送到正确的设备。

源MAC地址

长度为6个字节。它标识了帧的发送方的MAC地址。这个地址用于标识数据是从哪里发送过来的,接收方可以根据这个地址进行回应或者记录等操作。

类型/长度字段

长度为2个字节。

如果值小于或等于1500,表示该字段是长度字段,用于标识后面数据字段的长度(以字节为单位)。例如,如果这个字段的值是500,那么后面的数据字段长度就是500字节。

如果值大于1536,表示该字段是类型字段,用于标识帧所携带的网络层协议类型。例如,值为0x0800表示该帧携带的是IPv4协议的数据。

数据字段

长度为46 - 1500字节。它存放的是上层协议(如网络层)的数据。例如,如果是IPv4协议的数据,这里就包含了IP数据报的内容。数据字段是帧的核心部分,承载了实际要传输的信息。

帧校验序列

长度为4个字节。它用于检测帧在传输过程中是否发生了错误。发送方在发送帧之前,会根据帧的内容(包括目的MAC地址、源MAC地址、类型/长度字段和数据字段)计算一个校验值,并将其放在FCS字段中。接收方收到帧后,会使用相同的算法对收到的帧内容进行校验,如果计算出的校验值和FCS字段中的值相同,就认为帧在传输过程中没有错误;如果不同,就认为帧出现了错误,接收方可能会丢弃该帧并要求发送方重新发送。

http://www.xdnf.cn/news/289963.html

相关文章:

  • ICLR2024 | GNS-HFA | 通过梯度归一化缩放和高频适应增强视觉Transformer的可迁移对抗攻击
  • WMS仓库管理系统:Java+Vue,含源码及文档,集成仓储全流程管控,实现库存精准、作业高效、数据透明
  • Visual Studio 项目转Qt项目
  • 用网页显示工控仪表
  • Barrett Reduction算法优化:更紧的界限消除冗余的减法
  • 迅睿CMS导入别站数据库
  • 【瞎折腾/mi50 32G/ubuntu】mi50显卡ubuntu运行大模型开坑(二)使用llama.cpp部署Qwen3系列
  • 卡尔曼滤波详解
  • 从Excel到高级工具:数据分析进阶指南
  • # 部署深度学习模型:Flask API 服务端与客户端通信实战
  • Linux进程间的通信
  • Node.js 是什么?
  • docker 外部能访问外网,内部不行(代理问题)
  • SQL常见误区
  • 如何扫描系统漏洞?漏洞扫描的原理是什么?
  • 【MCP Node.js SDK 全栈进阶指南】专家篇(1):MCP-SDK扩展与定制
  • Dify本地 + vllm + Qwen
  • 走出 Demo,走向现实:DeepSeek-VL 的多模态工程路线图
  • 协议(消息)生成
  • qt csv文件写操作
  • 3.5/Q1,GBD数据库最新一区文章解读
  • P3246 [HNOI2016] 序列 Solution
  • 项目生成日志链路id,traceId
  • 数据库的二级索引
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)
  • 数据结构小扫尾——栈
  • BUUCTF 大流量分析(一) 1
  • 比较两种判断相同二叉树的方法:递归与遍历序列对比
  • 湖北理元理律师事务所:债务法律服务的民生价值重构
  • brep2seq kaggle安装 micromamba conda环境