FPGA 以太网概念简单学习

1 MAC和PHY

从硬件的角度来说,以太网接口电路主要由 MAC Media Access Control )控制器和物理层接口 PHY(Physical Layer PHY )两大部分构成。 MAC 指媒体访问控制子层协议,它和 PHY 接口既可以整合到单 颗芯片内,也可以独立分开,对于本次学习来说,MAC 控制器由 FPGA 实现, PHY 芯片指开发板板载的以太网芯片。
PHY芯片在发送数据时,接收MAC传输的无帧结构的原始数据(包括地址、数据和CRC),执行并串转换、编码及模数转换,将数据转换为模拟信号发送。接收过程则相反。PHY还负责物理连接的管理和状态显示,如通过LED指示灯反映连接状况和运行状态。在建立连接时,PHY会自动探测对端设备并启动自协商(Auto Negotiation),通过发送握手信号与对方协商一致,决定最优的连接参数,如速率、双工模式和流控设置等。

MDIO接口

MDIO(Management Data Input/Output)接口是根据IEEE 802.3标准定义的一种简单双线串行接口,主要用于以太网MAC(Media Access Control)控制器与物理层(PHY, Physical Layer)器件之间的管理通信。这种接口允许MAC控制器或者上层管理系统读取和修改PHY芯片内部的寄存器设置,以便控制和监测PHY的工作状态。

MDIO接口包含了两条信号线:

  1. MDIO: 这是一条双向数据线,用于在管理器件和PHY之间交换控制和状态信息。在不同的时间段内,这条线既可以用作数据输入也可以用作数据输出。

  2. MDC (Management Data Clock): 这是MDIO接口的时钟信号线,由管理器件提供,用来同步MDIO上的数据传输。

通过MDIO接口,可以实现以下功能:

  • 配置PHY芯片的各种参数,比如速度选择、双工模式、自动协商、节能模式等。
  • 查询PHY芯片的状态,如链路状态(Link Up/Down)、接收信号强度、错误统计等。
  • 控制物理层的特性,例如启动和停止物理层的自动协商过程。

MDIO协议基于特定的时序进行操作,允许MAC控制器按照一定的命令格式读取或写入PHY的多个寄存器,从而实现了对以太网物理层设备的灵活配置和实时监控。

3 以太网帧格式

典型的以太网帧格式主要包括以下几个主要部分:

前导码(Preamble)

  • 一组连续的7个字节(56比特)的10101010…101010序列,用于接收设备同步时钟和确定帧的开始。

帧起始定界符(SFD, Start-of-Frame Delimiter)

  • 第8个字节,值为10101011,标志着帧正文的开始。

以太网帧头(Ethernet Header)

  • 源MAC地址(Source MAC Address):6个字节,表示发送方的物理地址。
  • 目标MAC地址(Destination MAC Address):6个字节,表示接收方的物理地址。
  • 类型/长度字段(Type/Length Field):2个字节,指明上层协议类型(如IPv4、IPv6、ARP等)或在某些类型的帧中表示帧的数据部分的长度。

数据负载(Payload)

  • 可变长度,最小46字节,最大取决于以太网类型。通常承载的是上层协议数据单元(如IP数据包)。

帧校验序列(FCS, Frame Check Sequence)

  • 4个字节(32位),采用循环冗余校验(CRC)算法计算得出,用于检测帧在传输过程中是否出错。

4 ARP

在以太网中,每个设备都有一个唯一的MAC地址,这是其硬件标识符,用于在物理层上识别设备。而IP地址则是网络层为了寻址和路由数据包所使用的逻辑地址。当一台主机想要与同一网络内的另一台主机通信时,即使它知道目标主机的IP地址,也需要知道目标主机的MAC地址以便封装数据包到以太网帧中进行传输。

以下是ARP的工作流程:

  1. ARP请求: 当主机A需要向主机B发送数据,并且只知道主机B的IP地址时,主机A会通过广播的方式发送一个ARP请求到整个局域网中。这个请求中包含了目标主机B的IP地址,并询问:“具有这个IP地址的设备,请告诉我你的MAC地址。”

  2. ARP响应: 主机B收到ARP请求后,发现请求的目标IP地址与自己的IP地址匹配,便会回复一个ARP应答给主机A。ARP应答中包含了主机B的MAC地址。

  3. ARP缓存: 主机A收到ARP应答后,会将主机B的IP地址与其对应的MAC地址存储在本地的ARP缓存中,这样下次再需要发送数据给主机B时,就可以直接从缓存中查找MAC地址,无需再次发起ARP请求。

帧格式: 

 ARP 数据报文格式:

硬件类型(Hardware Type,2字节)

  • 表示物理层地址类型,例如对于以太网,其值通常为0x0001。

协议类型(Protocol Type,2字节)

  • 表示要映射的网络层协议地址类型,对于IPv4,其值为0x0800。

硬件地址长度(Hardware Address Length,1字节)

  • 指定硬件地址(MAC地址)的字节数,对于以太网,该值为6。

协议地址长度(Protocol Address Length,1字节)

  • 指定协议地址(IP地址)的字节数,对于IPv4,该值为4。

操作代码(Operation Code,2字节)

  • 定义了ARP请求(0x0001)或ARP应答(0x0002)的操作类型。

发送者硬件地址(Sender Hardware Address,6字节)

  • 发送ARP数据报文的设备的MAC地址。

发送者协议地址(Sender Protocol Address,4字节)

  • 发送ARP数据报文的设备的IP地址。

目标硬件地址(Target Hardware Address,6字节)

  • ARP 请求时由于不知道接收端 MAC 地址,因此该字段为广播地址,即48’hff_ff_ff_ff_ff_ff
  • 在ARP应答中填充请求者期望的目标MAC地址。

目标协议地址(Target Protocol Address,4字节)

  • 在ARP请求中填充需要解析的远程IP地址;
  • 在ARP应答中填充请求者的IP地址。

28字节的 ARP 数据位于以太网帧格式的数据段。由于以太网数据段最少为 46个字节, 而 ARP 数据包总长度为 28 个字节,因此在 ARP 数据段后面需要填充 18 个字节的数据,以满足以太网传 输格式的要求。这个填充的过程称为 Padding(填充),填充的数据可以为任意值,但一般为 0。

RGMII接口

以太网通信依赖物理层PHY芯片,其与MAC间常用接口包括MII、RMII、GMII、RGMII。其中:

  1. MII:支持10Mbps和100Mbps,数据位宽4位,100Mbps时钟频率25MHz。
  2. RMII:MII简化版,数据位宽2位,100Mbps时钟频率50MHz。
  3. GMII:兼容MII,支持10Mbps、100Mbps和1000Mbps,数据位宽8位,1000Mbps时钟125MHz。
  4. RGMII:GMII简化版,数据位宽4位,1000Mbps时钟125MHz,双沿采样;10M/100M采用单沿采样。适用于多速率通信,引脚数少,但布线需等长处理,时序要求严苛。

下图是 MAC 侧与 PHY 侧接口的连接

接口信号:

ETH_RXC(接收数据参考时钟):

  • 在不同速率下,其时钟频率分别为:
    • 1000Mbps:125MHz,采用上下沿同时采样。
    • 100Mbps:25MHz。
    • 10Mbps:2.5MHz。
  • ETH_RXC信号由PHY侧提供。

ETH_RXCTL(ETH_RX_DV)

  • 接收数据控制信号。

ETH_RXD

  • 四位并行的接收数据线。

ETH_TXC(发送参考时钟):

  • 同样在不同速率下,其时钟频率分别为:
    • 1000Mbps:125MHz,采用上下沿同时采样。
    • 100Mbps:25MHz。
    • 10Mbps:2.5MHz。
  • ETH_TXC信号由MAC侧提供。

ETH_TXCTL(ETH_TXEN)

  • 发送数据控制信号。

ETH_TXD

  • 四位并行的发送数据线。

ETH_RESET_N

  • 芯片复位信号,低电平有效。

ETH_MDC

  • 数据管理时钟,为ETH_MDIO信号提供同步时钟。

ETH_MDIO

  • 数据输入/输出管理双向信号,用于传递管理信息。

1000Mbps速率工作模式:

ETH_TXC和ETH_RXC时钟频率均为125MHz,采用DDR(Double Data Rate)方式传输数据。

  • 每个时钟周期内发送/接收8位数据信号:上升沿发送/接收低4位数据,下降沿发送/接收高4位数据。

ETH_TXCTL和ETH_RXCTL控制信号同样采用DDR方式传输。

  • 上升沿发送/接收数据使能(TX_EN/RX_DV)信号,下降沿发送/接收使能信号与错误信号的异或值(TX_ERR xor TX_EN、RX_ERR xor RX_DV)。
  • 数据有效且正确的条件:RX_DV为高电平(数据有效),RX_ERR为低电平(无错误),此时ETH_RXCTL和ETH_TXCTL上下沿同时为高电平。

6 IP协议

IP 协议是 TCP/IP 协议簇中的核心协议,也是 TCP/IP 协议的载体, IP 协议规定了数据传输时的基本单元和格式。IP 协议位于以太网 MAC 帧格式的数据段,IP 协议内容由IP 首部和数据字段成。所有的 TCP、UDP 及 ICMP 数据都以 IP 数据报格式传输,IP 数据包格式如下图。

首部(Header):

首部是IP数据报的控制区域,包含了一系列固定和可选字段,用于指导数据报在网络中的传输。

固定部分(Fixed Part)

  • 版本(Version):占4位,指示正在使用的IP协议版本。最常见的版本是IPv4(值为4),目前广泛使用的也是IPv4;IPv6版本的值为6。

  • 首部长度(Header Length, IHL):占4位,表示IP数据报首部的长度,以32位(4字节)为单位。最小值为5,即20字节(不包含任何可选项)。如果存在可选项字段,则首部长度相应增加。

  • 区分服务(Differentiated Services Code Point, DSCP):占6位,用于指定数据报的优先级和QoS(Quality of Service)处理需求。它允许网络设备对不同类型的流量进行差异化服务。

  • 总长度(Total Length):占16位,表示整个IP数据报(包括首部和数据部分)的字节数。最大值通常为65,535字节(对于IPv4),但实际有效载荷受到路径上最低MTU(Maximum Transmission Unit)的限制,通常以以太网的MTU(1500字节)为参考。

  • 标识(Identification):占16位,是一个唯一标识符,用于标识属于同一个原始数据报的所有分片。当数据报因过大需要分片时,所有分片的标识字段设置为相同的值。

  • 标志(Flags):占3位,其中:

    • 第一位(Reserved,保留位)通常置为0;
    • 第二位(Don't Fragment, DF):如果置为1,表示数据报不能被分片;
    • 第三位(More Fragments, MF):如果置为1,表示当前分片不是最后一个分片。
  • 片偏移(Fragment Offset):占13位,仅在数据报分片时有意义,指出该分片相对于原始数据报起始处的偏移量,以8字节为单位。

  • 生存时间(Time to Live, TTL):占8位,初始值由发送方设定,每经过一个路由器减1。当TTL值为0时,数据报将被丢弃,防止数据报在网络中无限循环。

  • 协议(Protocol):占8位,标识IP数据报携带的数据部分应交给哪个上层协议进行进一步处理,例如TCP(值为6)、UDP(值为17)等。

  • 首部检验和(Header Checksum):占16位,用于检测IP数据报首部在传输过程中是否发生错误。接收方通过计算校验和来验证首部的完整性。

  • 源地址(Source Address):占32位(IPv4)或128位(IPv6),标识发送方的IP地址。

  • 目的地址(Destination Address):占32位(IPv4)或128位(IPv6),标识接收方的IP地址。

可选部分(Optional Fields)

紧跟在固定部分之后,可包含一系列可变长度的选项,如记录路由选项(Record Route)、时间戳选项(Timestamp)等。这些选项根据需要添加,使得IP数据报具有一定的灵活性。可选部分的存在会增加首部长度。

数据区(Payload):

紧随首部之后的是数据区,包含了由上层协议(如TCP、UDP等)提供的实际用户数据或上层协议控制信息。数据区的长度取决于IP数据报的总长度减去首部长度。

填充(Padding):

如果需要,会在数据区后附加一些全0的字节(填充),以确保整个IP数据报的长度是32位(4字节)的整数倍,满足某些底层网络设备对传输单位对齐的要求。

UDP

UDP主要特性和工作方式的简单介绍:

无连接

  • 在使用UDP发送数据前,不需要建立正式的连接。发送方可以直接向接收方发送数据报文,无需经过握手、确认等过程,这使得UDP具有较低的开销和较高的响应速度。

不可靠性

  • UDP不保证数据报文的可靠传输。它不会对数据进行校验、重传、拥塞控制等操作,一旦将数据报文发送出去,就无法确保其一定能到达目的地,也无法确保到达的顺序与发送顺序一致。如果数据在传输过程中丢失、被错误地修改或重复,UDP不会试图纠正这些问题。

面向数据报

  • UDP以独立的数据报(Datagram)为单位进行数据传输。每个数据报包含完整的源和目的端口号以及用户数据,可以独立地在网络中路由。这意味着每个UDP报文都是单独处理、独立送达的,应用程序需要自行处理数据的完整性、顺序性和重传问题。

最小化服务

  • UDP提供了最基础的服务,仅包括数据报的封装、传输和解封装。它不提供流量控制、拥塞控制、数据排序、超时重传等复杂功能,这些任务通常由使用UDP的应用层协议自行实现,或者在某些情况下,由应用程序直接处理。

头部结构简单

  • UDP头部相对较小,只有8字节,包含源端口、目的端口、长度和校验和四个字段。这种简洁设计有助于减少处理开销,提高传输效率。

适用场景

  • 由于其简单、快速的特点,UDP常用于对实时性要求高、容错能力强或数据传输效率优先于数据完整性的应用,如在线视频会议、实时音视频流、在线游戏、DNS查询、物联网(IoT)消息传递等。在这些应用中,偶尔丢失个别数据包通常不会严重影响用户体验,而保持低延迟和高吞吐量更为关键。
以太网 UDP 传输单包数据的格式:

从底层到高层的包含关系描述如下:

  • MAC(以太网)帧:作为最底层的传输单元,MAC帧承载着整个数据包。其中,数据字段包含了向上一层封装的内容。
  • IP数据报:位于MAC帧的数据字段内,是IP层的传输单元。IP数据报包含源IP地址、目的IP地址以及报文头中的其他控制信息,其有效载荷部分则是更高层的UDP报文。
  • UDP报文:作为IP数据报的有效载荷,UDP报文包含源端口号、目的端口号、长度以及校验和等UDP头部信息,以及真正的用户数据。UDP报文提供了无连接、不可靠的数据传输服务。
  • 用户数据:最终要传输的实际信息,被封装在UDP报文的数据部分。这些数据可以是文本、图片、音频、视频等各种形式,具体取决于上层应用程序的需求。
UDP 数据格式如下图所示:

UDP首部共计8个字节(64位),与IP数据报首部一样,遵循以32位(4字节)为单位的排列规则。其具体字段如下:

源端口号(Source Port):占用16位,用于标识发送端(源主机)正在使用的特定服务端口。端口号的取值范围从0到65535(含)。每个端口号代表一种特定的服务或应用程序,例如HTTP通常使用80端口,DNS通常使用53端口。源端口号的存在使得接收端可以根据该值识别并定向到相应的服务进程进行数据处理。

目的端口号(Destination Port):同样占用16位,用于指定接收端(目的主机)的目标服务端口。与源端口号类似,目的端口号用于在目的主机上区分不同的服务或应用程序,确保数据包能被正确地递送到预期的服务进程中。

UDP长度(Length):占据16位,表示整个UDP数据报(包括UDP首部和数据部分)的总长度,以字节(byte)为单位。该字段的值范围为最小值8(仅包含UDP首部,无数据)到最大值65535字节。由于UDP数据报作为IP数据报的数据部分,因此UDP长度需与IP数据报的总长度字段相协调,确保IP层能够正确处理封装后的数据报。

UDP校验和(Checksum):占用16位,用于检测UDP数据报在传输过程中是否出现错误。在许多实际应用场景中,接收端可能选择不严格检查UDP校验和,尤其是在对实时性要求较高而对数据完整性和可靠性要求相对较低的情况下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建获利段

事务代码:KE21N BAPI:BAPI_COPAACTUALS_POSTCOSTDATA 前台操作: 表是业务配置的 配置路径: 代码:BAPI不返回生成的凭证号和获利段,需要通过增强或者读表获取 ls_copa_data-record_id 000001.ls_co…

Agent AI智能体在未来,一定与你我密不可分

随着Agent AI智能体的逐渐成熟,人工智能应用的不断深入与拓展,相信在不久的将来,他与你我的生活一定是密不可分的。 目录 ​编辑 1 Agent AI智能体是什么? 2 Agent AI在语言处理方面的能力 2.1 情感分析示例 2.2 文本分类任…

Spring - 5 ( 8000 字 Spring 入门级教程 )

一:Spring IoC&DI 1.1 方法注解 Bean 类注解是添加到某个类上的, 但是存在两个问题: 使用外部包里的类, 没办法添加类注解⼀个类, 需要多个对象, ⽐如多个数据源 这种场景, 我们就需要使用方法注解 Bean 我们先来看方法注解如何使用: public c…

Unity 踩坑记录 Rigidbody 刚体重力失效

playerSetting > physics > Gravity > 设置 Y 的值为负数

前端canvas项目实战——在线图文编辑器(九):逻辑画布

目录 前言一、 效果展示二、 实现步骤1. 调整布局,最大化利用屏幕空间2. 添加逻辑画布3. 添加遮罩4. 居中显示逻辑画布5. 一个容易被忽视的bug点 三、Show u the code后记 前言 上一篇博文中,我们实现了一组通用的功能按钮:复制、删除、锁定…

FreeRTOS之列表

1.FreeRTOS的列表和列表项十分重要。列表类相当于链表,列表项则相当于链表中的节点。列表项的地址是非连续的,列表项的数量可随时修改。在OS中的任务状态和数量会发生改变,因此使用列表可以很好的满足需求。 列表和列表项的相关定义与操作函…

电商独立站||跨境电商独立站网站搭建|功能系统搭建||API接口接入

搭建多语言跨境电商独立站系统 前台主要功能模块 短信接口 第三方登陆 支付方式 会员中心 代购订单列表 - new 会员签到 -1000(1) new 支付密码 ---1000 国内流程 -----5000 new 订单运单多退少补 -1000 未付款运单取消功能 - 修改运单运输方式 -----1000 年费会员 -----3000 …

大型零售企业,适合什么样的企业邮箱大文件解决方案?

大型零售企业通常指的是在全球或特定地区内具有显著市场影响力和知名度的零售商。这些企业不仅在零售业务收入上达到了惊人的规模,而且在全球范围内拥有广泛的销售网络和实体店铺。它们在快速变化的零售行业中持续创新,通过实体店、电商平台等多种渠道吸…

C#队列(Queue)的基本使用

概述 在编程中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;它遵循FIFO&#xff08;先进先出&#xff09;的原则。在C#中&#xff0c;.NET Framework提供了Queue<T>类&#xff0c;它位于System.Collections.Generic命名空间下&#x…

【深度学习实战(26)】标签处理之语义分割标签转换,数据集划分

一、标签转换 我们在使用labeme标签工具&#xff0c;标注完数据后会获得json文件。在标注结束过后&#xff0c;我们需要通过标签转换操作&#xff0c;生成jpg格式原始图片和png格式mask标签图。 1.1 使用img_b64_to_arr将json标签中二进制图像数据变成numpy格式数据&#xf…

selenium在Pycharm中结合python的基本使用、交互、无界面访问

下载 下载与浏览器匹配的浏览器驱动文件&#xff0c;这里一定注意的是&#xff0c;要选择和浏览器版本号相同的驱动程序&#xff0c;否则后面会有很多问题。 &#xff08;1&#xff09;浏览器&#xff08;以google为例&#xff09;版本号的查询&#xff1a; 我这里的版本号是1…

java实现模板填充word,word转pdf,pdf转图片

Java实现Word转PDF及PDF转图片 在日常开发中&#xff0c;我们经常需要将文件操作&#xff0c;比如&#xff1a; 根据模板填充wordword文档中插入图片Word文档转换为PDF格式将PDF文件转换为图片。 这些转换可以帮助我们在不同的场景下展示或处理文档内容。下面&#xff0c;我将…

Leetcode—1256. 加密数字【中等】Plus(bitset、find_first_not_of、erase)

2024每日刷题&#xff08;120&#xff09; Leetcode—1256. 加密数字 实现代码 class Solution { public:string encode(int num) {string ans;num 1;while(num ! 0) {ans to_string(num & 1);num num >> 1;}if(ans.empty()) {return "";} else {stri…

coreldraw2024精简版绿色版安装包免费下载

CorelDRAW 2024是一款矢量图形设计软件&#xff0c;于2024年3月5日正式在全球范围内发布。这款软件在多个方面进行了更新和改进&#xff0c;为用户提供了更多高效、灵活和便捷的设计工具。 首先&#xff0c;CorelDRAW 2024新增了绘画笔刷功能&#xff0c;这些笔刷不仅模拟了传…

Ubuntu20.04 [Ros Noetic]版本——在catkin_make编译时出现报错的解决方案

今天在新的笔记本电脑上进行catkin_make的编译过程中遇到了报错&#xff0c;这个报错在之前也遇到过&#xff0c;但是&#xff0c;我却忘了怎么解决。很是头痛&#xff01; 经过多篇博客的查询&#xff0c;特此解决了这个编译报错的问题&#xff0c;于此特地记录&#xff01;&…

[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

引言 今天带来另一篇激活函数论文SEARCHING FOR ACTIVATION FUNCTIONS的笔记。 作者利用自动搜索技术来发现新的激活函数。通过结合详尽的搜索和基于强化学习的搜索&#xff0c;通过实验发现最佳的激活函数 f ( x ) x ⋅ sigmoid ( β x ) f(x) x \cdot \text{sigmoid}(βx…

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退&#xff0c;发现是在读取自定义文件上出问题 然后在找读取自定义文件函数&#xff0c;发现是读取图片部分出问题 然后就卡住了 调试半天&#xff0c;不是数据溢出&#xff0c;于是就看 函数_findnext,网上搜 ———_findn…

4.Docker本地镜像发布至阿里云仓库、私有仓库、DockerHub

文章目录 0、镜像的生成方法1、本地镜像发布到阿里云仓库2、本地镜像发布到私有仓库3、本地镜像发布到Docker Hub仓库 Docker仓库是集中存放镜像的地方&#xff0c;分为公共仓库和私有仓库。 注册服务器是存放仓库的具体服务器&#xff0c;一个注册服务器上可以有多个仓库&…

项目开发规范

Restful REST&#xff0c;表述性状态转换&#xff0c;他是一种软件架构风格 使用URL定位资源&#xff0c;HTTP动词描述操作 根据发出请求类型来区分操作 GET&#xff1a; 查询id为1的用户POST&#xff1a;新增用户PUT&#xff1a;修改用户DELETE&#xff1a;删除id为1的用户 …

springboot权限验证学习-上

创建maven项目 创建父工程 这类项目和原来项目的区别在于&#xff0c;打包方式是pom 由于pom项目一般都是用来做父项目的&#xff0c;所以该项目的src文件夹可以删除掉。 创建子工程 子工程pom.xml 父工程pom.xml 添加依赖 父工程导入依赖包 <!--导入springboot 父工程…