FPGA 以太网概念简单学习

news2024/10/7 18:23:12

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.coloradmin.cn/o/1632236.html

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

相关文章

使用yolov8+QT+onnrunxtime进行开发的注意事项

1、本来想尝试做一个C的yolov8在QT5.15.2的应用; 因此,在实现这个目标的时候,我先用了yolov8自带的export进行导出,使用的代码很简单,如下所示: import os from ultralytics import YOLO# model YOLO(&q…

优卡特脸爱云一脸通智慧平台 UpLoadPic.ashx 文件上传致RCE漏洞复现

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。功能包括:系统管理中心、人员信息管理中心、设备管理中心、消费管理子系统、订餐管理子系统、水控管理…

uniapp分包,以及通过uni-simple-router进行分包

先说一下uniapp的直接分包方式,很简单: 配置分包信息 打开manifest.json源码视图,添加 “optimization”:{“subPackages”:true} 开启分包优化 我们在根目录下创建一个pagesA文件夹,用来放置需要分包的页面 然后配置路由 运行到…

OpenNMS安装

环境要求 硬件要求 Just Testing 1Minimum Server Specification 2Minimum Server Specification 2CPU2GHz dual core x86_643GHz quad core x86_64 and aboveRAM4GB (physical)16GB (physical) and aboveStorage (disk space)50-GB HDD, SSD1TB with SSD and above You can i…

Python并发编程:揭开多线程与异步编程的神秘面纱

第一章:并发编程导论 1.1 并发与并行概念解析 1.1.1 并发性与并行性的区别 想象一下繁忙的厨房中多位厨师同时准备不同的菜肴——即使他们共享有限的空间和资源,也能协同工作,这就是并发性的一个生动比喻。并发性意味着多个任务在同一时间…

基于 dockerfile 编写LNMP

目录 一. 环境准备 二. 部署 nginx 2.1 建立工作目录,并上传需要的安装包 2.2 配置 nginx.conf 文件 2.3 编写 dockerfile 2.4 构建一个新的镜像 2.5 启动一个新的容器 三. 部署MySQL 3.1 建立工作目录,并上传安装包 3.2 编写 Dockerfile 3.…

ROS学习笔记(14)拉普拉斯变换和PID

0.前提 近些时间在对睿抗的ROS仿真赛进行小组安排,对小组成员进行了一些安排,也要求他们以本次比赛写下自己的比赛经历博客,他们的培训由我来安排和负责,因此我得加吧油,起码保证我的进度得快过他们,才能安…

源码编译安装curl _ 统信UOS _ 麒麟KOS _ 中科方德

原文链接:源码编译安装curl | 统信UOS | 麒麟KOS | 中科方德 Hello,大家好啊!今天我们来探讨一个非常实用的话题:在统信UOS、麒麟KOS以及中科方德桌面操作系统上如何从源码编译安装curl。Curl是一个广泛使用的命令行工具和库&…

【Kafka】Kafka高性能之道(六)

Kafka高性能之道 Kafka高性能原因 高效使用磁盘 1)顺序写磁盘,顺序写磁盘性能高于随机写内存。 2)Append Only 数据不更新,无记录级的数据删除(只会整个segment删s除)。读操作可直接在page cache内进行。如果进程重启,JVM内的cache会失效&a…

Pandas dataframe 中显示包含NaN值的单元格

大部分教程只讲如何打印含有NA的列或行。这个函数可以直接定位到单元格,当dataframe的行和列都很多的时候更加直观。 # Finding NaN locations for df.loc def locate_na(df):nan_indices set()nan_columns set()for col, vals in df_descriptors.items():for in…

grafana监控模板 regex截取ip地址

查看prometheus的node服务启动指标up,也可以查看其他的服务 配置监控模板 配置正则截取ip regex截取ip地址 /.*instance"([^"]*):9100*/ #提取(instance")开头,(:9001)结束字段

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示 引言一、变量注释二、函数注释三、参考链接 引言 代码注释在软件开发中起着至关重要的作用。它们不仅有助于开发者理解和维护代码,还能促进团队协作,提高代码的可读性和可维护性。适当的注释应该是简洁明…

头脑风暴式会议设计6步法

头脑风暴是一种常用的会议讨论工具,可以释放参与者的思想,让参与者更加有创意地思考,产生新的想法和见解。引导者在设计会议时,遵循一定的步骤和流程,便能高效激发创新思维,共创出有效的问题解决方案。下图…

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及,网络营销已成为企业不可或缺的一部分。其中,百度竞价作为一种高效的网络推广方式,受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项,帮助企业更好地利用这一工具提升品牌知名度和…

linux运行python怎么结束

假如你已经进入到【>>>】,那么输入【quit()】,然后按一下回车键即可退出了。 如果是想要关闭窗口的,那么直接在这个窗口上按【ctrld】。

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

stm32单片机开发四、USART

串口的空闲状态时高电平,起始位是低电平,来打破空闲状态的高电平 必须要有停止位,停止位一般为一位高电平 串口常说的数据为8N1,其实就是8个数据位(固定的),N就是none,也就是0个校验…

用socat验证multicase(组播)和broadcast(广播) with k8s容器环境

安装socat 网络允许的话,可以使用yum install -y socat进行安装。 如果是在容器里面运行,建议使用静态链接的socat: 可以从此处下载: Release socat-v1.7.4.4 ernw/static-toolbox GitHub 确定网络接口地址和组播地址 #kubectl exec -i…

低GPU利用率的实证研究;可解决数学问题的数据合成新范式;大规模合成数学推理的指令微调数据;大模型改进推荐系统

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

KT-0911兔气管插管

简单介绍: 在医学和生物学常用兔进行实验,实验中经常需要给兔气管插管以进行机械通气或气管给药等操作。 详情介绍: 技术参数: 1.材质:PVC注塑一体成型 2.插管外径尺寸:5mm 3.适用动物:兔…