以太网Ethernet通信协议
一、以太网简介
计算机网络可分为局域网(LAN)、 城域网(MAN)、广域网(WAN)、互联网(Initernet)。局域网按传输介质所使用的访问控制方法可分为:以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(Token Ring)、交换网(Switching) 等,它们在拓朴结构、传输介质、传输速率、数据格式等多方面都有许多不同,其中应用最广泛的当属以太网。
以太网协议(Ethernet Protocol)是一种广泛应用于局域网(LAN)和广域网(WAN)的计算机网络通信协议。它是一种基于共享介质的局域网技术,最早由Xerox、Intel和Digital Equipment Corporation(DEC)于1970年代开发,并在1980年代初由IEEE标准化为IEEE 802.3。以太网根据最大传输速率的不同可以分为标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)、千兆以太网 (1000Mbit/s)和万兆以太网(10Gbit/s)。
二、计算机网络模型
为了实现网络通信的标准化,普及网络应用,国际标准化组织(ISO)将整个以太网通信结构制定了OSI(Open System Interconnection)模型。OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层表示层、应用层),即OSI开放互连系统参考模型。每个层功能不同,网络通信中各司其职,整个模型包括硬件和软件定义。
在一定程度上参考了OSI模型后,产生了TCP/IP协议。TCP/IP (Transmission ControProtocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信传输的协议簇。TCP/IP协议不仅仅指的TCP和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/P 协议中 TCP 协议和I协议最具代表性,所以被称为 TCP/IP 协议。
在TCP/IP协议中,OSI 七层参考模型被简化为五层。
在TCP/IP五层参考模型中,数据链路层又被分为LLC层(逻辑链路层)和MAC层(媒体介质访问层)。 LLC层和MAC层是软、硬件的分界线。如PC的网卡主要负责实现参考模型中的MAC子层和物理层。
之前写计算机网络的时候也写过相关博文:
Linux网络编程(一)_STATEABC的博客-CSDN博客
三、以太网传输格式
IEEE 802.3规定了以太网传输数据包的帧格式:前导码、帧起始界定符、帧头(目的MAC地址+源MAC地址+类型/长度)、数据、校验位。
- 前导码(Preamble):也称报头,用于使收发节点的时钟同步。物理层使用连续7个字节的0x55实现数据的同步。
- 帧起始定界符(SFD,Start Frame Delimiter):用于区分前导码与数据段,固定为1字节的0xD5。字段和帧起始定界符在MAC收到数据包后会自动过滤掉。
- 目的MAC地址:即接收端物理MAC地址,由48位数字组成,占用6个字节,每个设备都有且仅有唯一的MAC地址。MAC地址从应用上可分为单播地址、组播地址和广播地址。单播地址:第一个字节的最低位为0,比如0-00-00-11-11-11,一般用于标志唯一的设备;组播地址:第一个字节的最低位为1,比如01-00-00-11-11-11,一般用于标志同属一组的多个设备;广播地址:所有48bit全为1,即FF-FF-FF-FF-FF-FF,用于标志同一网段中的所有设备。
- 源MAC地址:即发送端物理MAC地址,占用6个字节。
- 数据包类型/长度:2字节,当这两个字节的值小于1536 (十六进制为0x0600)时代表该以太网中数据段的长度;如果这两个字节的值大于1536,则表示与以太网帧相关的MAC客户端协议的类型,例如0x0800代表IP协议(网际协议)、0x0806 代表ARP协议(地址解析协议) 等。
- 数据:数据段是MAC包的核心内容,它包含的数据来自MAC的上层,长度为46-1500字节。最大值1500称为以太网的最大传输单元(MTU,Maximum Transmission Unit)。接收到的数据包如果少于64字节会被认为发生冲突,数据包被自动丢弃。
- 校验(FCS,Frame Check Sequence):确保数据的正确传输,在数据的尾部加入了4字节的循环冗余校验码(CRC)来检验数据是否传输错误。CRC数据校验从目的MAC地址开始。
- 帧间隙(IFG,Interpacket Gap):以太网相邻两帧之间的时间间隔,即网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备的时间,最小值是96 bit time(媒介中发送96位原始数据所需要的时间)。
四、ARP协议
在以太网中要想进行通信,首先要知道接收端的物理MAC地址,而ARP(Address Resolution Protocol),地址解析协议就是根据目的设备的IP地址 (逻辑地址)获取MAC地址的一种TCP/IP协议。
ARP协议分为ARP请求和ARP应答,源主机发起查询目的MAC地址的报文称为ARP请求,目的主机响应源主机并发送包含本地MAC地址的报文称为ARP应答。
当主机需要找出网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包含了发送方的MAC地址和IP 地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播,即ARP请求时发送的接收方物理地址为广播地址,用48'hff_ff_ff_ff_ff_ff表示。此时局域网中的所有主机都会进行接收并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址。是则返回ARP应答报文(含接收方的IP地址和物理地址),不是则不响应。
主机B利用收到的ARP请求报文中的请求方物理地址,以单播的方式直接发送给主机A,主机A将收到的ARP应答报文中的目的MAC地址解析出来,将目的MAC地址和目的 P 地址更新至ARP缓存表中。当再次和主机A通信时,可以直接从ARP缓存表中获取,而不用重新发起ARP请求报文。ARP缓存表中的表项有过期时间(一般为20分钟),过期之后,需要重新发起ARP请求以获取目的MAC地址。
ARP数据位于以太网帧格式的数据段中。28字节的ARP数据位于以太网格式的数据段。由于以太网数据段最少为46个字节,而ARP数据包总长度为28个字节,因此在ARP数据段后面需要填充18字节的数据,以满足以太网传输格式的要求,填充的数据可以为任意值,但一般为0。
- 硬件类型(Hardware type):硬件地址的类型,1 表示以太网地址。
- 协议类型(Protocol type):要映射的协议地址类型,ARP协议的上层协议为IP协议,因此该协议类型为IP协议,其值为0x0800。
- 硬件地址长度 (Hardware size):硬件地址(MAC 地址)的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或者应答来说,该值为6。
- 协议地址长度 (Protocol size):IP地址的长度,以字节为单位。对于以太网上 P 地址的 ARP 请求或者应答来说,该值为4。
- OP(Opcode):操作码,用于表示该数据包为ARP请求或者ARP应答。1表示ARP请求,2表示ARP应答。
- 源MAC地址:发送端的硬件地址。
- 源IP地址:发送端的协议(IP) 地址,如192.168.1.102。
- 目的MAC地址:接收端的硬件地址,在ARP请求时由于不知道接收端MAC地址,因此该字段为广播地址,即48'hff_ff_ff_ff_ff_ff。
五、RGMII接口
在物理层,由IEEE 802.3标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个PHY芯片实现其功能的。
FPGA可以看成是MAC侧,接收或发送数据到PHY侧,PHY侧再通过网线接口和其他设备进行连接。PHY在发送数据的时候,接收MAC发过来的数据,把并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号发送出去,收数据时的流程反之。
MII (Media Independent Interface)为媒体独立接口,用以连接以太网MAC层和PHY芯片,常用接口有:MIIRMI、SMI、GMI、RGMII。
- MII (Medium Independent Interface,媒体独立接口):MII支持10Mbps和100Mbps的操作,数据位宽为4位,在 100Mbps 传输速率下,时钟频率为25Mhz。
- RMII(Reduced MII):RMII是MI的简化版,数据位宽为2位,在100Mbps传输速率下,时钟频率为50Mhz。
- GMII (Gigabit MII):GMII接口向下兼容MII接口,支持10Mbps、100Mbps和1000Mbps的操作,数据位宽为8位,在1000Mbps传输速率下,时钟频率为125Mhz。
- RGMII (Reduced GMII):RGMII是GMII的简化版,数据位宽为4位,在1000Mbps传输速率下,时钟频率为125Mhz,在时钟的上下沿同时采样数据。在100Mbps和10Mbps通信速率下,为单个时钟沿采样。
在千兆以太网中,常用的接口为RGMI和GMII接口。RGMII接口的优势是同时适用于10M/100M/1000Mbps通信速率,同时占用的引脚数较少。但RGMII接口在PCB布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。
参考文献:
《开拓者之FPGA开发指南》
《FPGA Verilog开发实战至指南》
相关文章:

以太网Ethernet通信协议
一、以太网简介 计算机网络可分为局域网(LAN)、 城域网(MAN)、广域网(WAN)、互联网(Initernet)。局域网按传输介质所使用的访问控制方法可分为:以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(Token Ring)、交换网(Switching) 等&#x…...

内网横向移动—资源约束委派
内网横向移动—资源约束委派 1. 资源约束委派1.1. 基于资源的约束委派的优势1.2. 约束性委派和基于资源的约束性委派配置的差别1.3. 利用条件1.3.1. 什么用户能够修改msDS-AllowedToActOnBehalfOfOtherIdentity属性1.3.2. 将机器加入域的域用户 2. 案例操作2.1. 获取目标信息2.…...
Spring Boot Logback日志格式改为JSON
在阿里云、或者日志分析时使用JSON格式输出日志更加方便。 依赖 增加Logbak JSON解析依赖。 另外需要注意的是JSON格式输出依赖Jackson,根据工程情况按需添加Jackson依赖。 <!--日志--><dependency><groupId>ch.qos.logback.contrib</grou…...
Linux 块设备操作函数
和字符设备的fil_operations一样,块设备也有操作集,为结构体block_device_operations,此结构体定义在include/linux/blkdev.h中,结构体内容如下: struct block_device_operations {int (*open) (struct block_device …...
linux c++网络编程基础:服务端与客户端的实现
在Linux环境下,我们可以使用socket编程来实现网络通信。下面是一个简单的C++版本的客户端和服务端的示例代码。 服务端代码: #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #...

坐标转换-使用geotools读取和转换地理空间表的坐标系(sqlserver、postgresql)
前言: 业务上通过GIS软件将空间数据导入到数据库时,因为不同的数据来源和软件设置,可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系,只是在geoserver单纯的设置坐标系只是改了…...
JavaScript的主要应用场景有哪些?请描述一下JavaScript的基本数据类型和引用数据类型分别是哪些?
1、JavaScript的主要应用场景有哪些? JavaScript是一种广泛使用的编程语言,它主要用于Web开发、移动应用开发、游戏开发、物联网设备开发等场景。以下是JavaScript的主要应用场景: Web开发:JavaScript是Web开发中最常用的编程语…...

webpack性能优化
文章目录 1. 性能优化-分包2. 动态导入3. 自定义分包4. Prefetch和Preload5. CDN加载配置6. CSS的提取7. terser压缩7.1 Terser在webpack中配置7.2 css压缩 8. Tree Shaking 消除未使用的代码8.1 usedExports 配置8.2 sideEffects配置8.3 CSS实现Tree Shaking 9. Scope Hoistin…...
保存和读取带有透明通道的视频
保存带有透明通道的视频: import osimport imageio from rembg import remove as removBg,new_session from PIL import Image import numpy as np import cv2 from tqdm import tqdmclass cls_rembg():def __init__(self,model_pth):self.session new_session(mo…...

bilibili的评论ip属地显示未知
现象 出于某些原因,我们在日常使用中的大部分平台都开启了IP地址显示,一般会显示当事人所在的地址,这其中就有一些奇怪的地址,(在此不谈魔法)就比如我最近在刷B站的时候,就在评论区发现了一些显…...

[BabysqliV3.0]phar反序列化
文章目录 [BabysqliV3.0]phar反序列化 [BabysqliV3.0]phar反序列化 开始以为是sql注入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ST1jvadM-1691302941344)(https://raw.githubusercontent.com/leekosss/photoBed/master/202308032140269.png)…...

数据库架构演变过程
🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…...
webpack 静态模块打包工具
webpack 为什么? 把静态模块内容,压缩,整合,转译等(前端工程化) 把less/sass转成css代码把ES6 降级成ES5支持多种模块文件类型,多种模块标准语法 vite 为什么不直接学习vite 而学习webpack 因为很多项目还是基于webpack来进…...

万界星空科技/免费开源MES系统/免费仓库管理
仓库管理(仓储管理),指对仓库及仓库内部的物资进行收发、结存等有效控制和管理,确保仓储货物的完好无损,保证生产经营活动的正常进行,在此基础上对货物进行分类记录,通过报表分析展示仓库状态、…...

【暑期每日一练】 Epilogue
目录 选择题(1)解析: (2)解析: (3)解析: (4)解析: (5)解析: 编程题题一描述输入描述:输…...

Go微服务实践 - Rpc核心概念理解
概述 从0研究一下Golang已经Golang的微服务生态体系,Golang的微服务首先要从Rpc开始,在升级到Grpc,详细介绍这些技术点都在解决什么技术问题。 Rpc Rpc (Remote Procedure Call) 远程过程调用,简单的理解是一个节点请求另一个节…...

Effective Java笔记(27)消除非受检的警告
用泛型编程时会遇到讲多编译器警告 : 非受检转换警告( unchecked cast warning )、非受检方法调用警告、非受检参数化可变参数类型警告( unchecked parameterized vararg type warning),以及非受检转换警告…...
Dapper
介绍 Dapper是一个轻量级的ORM(对象关系映射)框架,它可以方便地将数据库查询结果映射到.NET对象上,同时也支持执行原生SQL查询。下面我将详细介绍Dapper的使用方法。 安装Dapper 首先,你需要通过NuGet包管理器将Dap…...
Python基础知识(一)
数据类型 基本类型 数字,字符串,布尔 数字类型 int整型 整数 float浮点型 带小数的数 complex复数 abj 字符串类型 str字符串 视作文本 组成:由数字,字母,空格,其他字符等组合而成 表达ÿ…...
QTthreadPool 程序
//*******************主窗口****************************// ------------------------.H--------------------------------- ----------------------------------------------------------- #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #inclu…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...