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

lwip - 链路层收发以太网数据帧

1、以太网帧结构

  数据包在以太网物理介质上传播之前必须封装头部和尾部信息。封装后的数据包称为数据帧,数据帧的封装的信息决定了数据如何传输。
  以太网中传输的帧有两种格式,IEEE 802.3 和 Ethernet II,选择哪种格式由TCP/IP协议簇中的网络层决定。

2、Ethernet II

在这里插入图片描述

  • 目的地址和源地址均为48bit的MAC地址
  • 类型字段:指明了承载的上层协议的类型, 常见的值有
    • 0x800 IP
    • 0x806 ARP
    • 0x86dd IPv6
  • 数据字段:数据字段为承载的上层协议的数据, 长度为46~1500byte, 即使数据不够46byte, 也要填充到46byte。以太网的最大传输单元(MTU)是1500字节。这意味着如果IP数据报超过了1500字节,则主机必须将该数据报分片。当采用填充时,传递到网络层的数据包括数据报和填充部分,网络层使用IP数据报首部中的长度字段来去除填充部分。
  • 32bit CRC校验, 校验从 “目的地址” 到 “数据” 的内容

  以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。ifconfig命令的输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。

3、IEEE 802.3

在这里插入图片描述

  • Length 字段取代了 Ethernet_II 中的 Type 字段,它定义了 Data 字段包含的字节数。
  • LLC:Logical Link Control,逻辑链路控制由目的访问点 D.SAP (Destination Service Access Point)、源服务访问点 S.SAP(Source Service Access Point)和 Control 字段组成。Control 字段:无连接或面向连接的LLC, 基本不使用, 一般被设为0x03,指明采用无连接服务的802.2无编号数据格式
  • IEEE802.3 帧根据 D.SAP 和 S.SAP 字段的取值不同,可分为以下几类:
    • 当 D.SAP 和 S.SAP 都取特定值 0xFF 时,802.3 帧就变成了 Netware-Ethernet 帧,用来承载 NetWare 类型的数据;
    • 当 D.SAP 和 S.SAP 都取特定值 0xAA 时,802.3 帧就变成了 Ethernet_SNAP 帧,可用于传输多种协议。
    • D.SAP 和 S.SAP 其它的取值均为纯 IEEE802.3 帧。

  IEEE802.3/802.2 SNAP 在 IEEE802.3/802.2 LLC 的基础上, 扩充了 LLC header。帧格式如下图:

在这里插入图片描述

  • SNAP:Sub-network Access Protocol,子网访问协议由机构代码(Org Code)和类型(Type)字段组成。Org Code 通常与源mac地址的前三个bytes相同, 为厂商代码。Type 字段的含义与 Ethernet_II 帧中的 Type 字段相同。

4、不同帧格式的区分

  • 检查帧中“源MAC”字段后面的2byte(在Ethernet II中为协议类型, 在其它帧中为 数据长度), 若大于 0x05dc(即10进制的1500), 则为 Ethernet 帧
  • 继续比较后面的2个byte, 如果为0xFFFF则为Novell Ether 类型的帧。如果为 0xAAAA 则为 IEEE802.3/802.2 SNAP 帧, 否则, 为 IEEE 802.3/802.2 LLC 帧
  • 这些以太网帧可以共存于一个网络中,但互不兼容,当用不同封装类型的工作站要交换信息时,必须通过支持的路由器来通信

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

相关文章:

  • Linux内核源码分析-进程调度(二)-常用数据结构
  • P1042 [NOIP2003 普及组] 乒乓球
  • Go | 一分钟掌握Go | 2 - 集成开发工具
  • 科学防雷接地和雷电防护方案
  • 本地运行 minigpt-4
  • TCP FACK 与 RACK
  • 改进YOLOv8 | 即插即用篇 | YOLOv8 引入 RepVGG 重参数化模块 |《RepVGG:让VGG风格的卷积神经网络再次伟大》
  • Ansys Zemax | 设计抬头显示器时要使用哪些工具 – 第一部分
  • Adobe国际认证证书,深化设计师个人优势!
  • shell脚本备份postgres SQL数据库(同台服务器备份脚本)
  • 前端异步编程全套:xmlhttprequest > ajax > promise > async/await
  • 打造高效团队利器,掌握必备技能,揭秘完美工具箱——DevOps!
  • 运用SQL查询mysql,sersql,oracle所有数据库名和表名
  • 今天主要谈谈关于申请美国专利的一些问题
  • 数据库基础篇 《17.触发器》
  • Hadoop2.x集群搭建(centos7、VMware、finalshell)
  • 丁鹿学堂:2023最新vue3学习指南(vue3最简单demo)
  • 【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。
  • 20230425----重返学习-vue项目-vue自定义指令-vue-cli的配置
  • CentOS 7中安装配置Nginx的教程指南