FPGA实现以太网(一)、以太网基础知识

系列文章目录

FPGA实现以太网(二)、初始化和配置PHY芯片

文章目录

  • 系列文章目录
  • 一、以太网简介
  • 二、OSI七层模型
  • 三、TCP/IP五层模型
  • 四、MAC-PHY接口
  • 五、MAC帧格式
  • 六、IP帧格式
    • 6.1 IP首部校验和计算
    • 6.2 IP首部校验和校验
  • 七、UDP帧格式
    • 7.1 UDP头部校验和计算


一、以太网简介

  以太网(Ethernet)是一种广泛使用的局域网(LAN)技术,最初由罗伯特·梅特卡夫(Robert Metcalfe)于1970年代发明。以太网的设计旨在提供一种可靠的、低成本的网络连接方式,支持多种数据传输速率和网络拓扑结构。如今以太网在生活中广泛使用,以太网的分类有标准以太网(10Mbit/s)、快速以太网(100Mbit/s)和千兆以太网(1000Mbit/s),现在还有万兆以太网(10Gbit/s)。在实际应用中千兆以太网就能满足大部分需求,以下是局域网的示意图:

在这里插入图片描述

二、OSI七层模型

  OSI七层模型(Open Systems Interconnection Model)是一个用于理解网络通信的标准化模型,由国际标准化组织(ISO)于1984年提出。该模型将网络通信过程分为七个层次,每一层都有特定的功能和职责。七层模型的目的是为不同的网络设备和协议提供一个共同的框架,以便于互操作性和标准化。以下是OSI七层模型的各层及其功能:

在这里插入图片描述

  • 应用层:为用户提供网络服务,直接与用户的应用程序交互;主要协议:HTTP,HTTPS,FTP,POP3、SMTP、SNMP、DHCP、DNS。
  • 表示层:表示层负责数据的格式化、加密和解密,确保不同系统应用之间能够正确理解数据;主要格式:JPEG、ASCll、DECOIC、加密格式。
  • 会话层:会话层负责建立、管理和终止会话,确保数据在应用程序之间的顺利传输。
  • 传输层:传输层负责端到端的通信,提供可靠性、流量控制和错误恢复;主要协议 TCP、UDP。
  • 网络层:网络层负责数据包的路由选择和转发,确保数据在不同网络之间传输;网络层通过 IP 寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的传输层,就是我们常说的 IP 层。主要协议:ICMP IP(IPV4 IPV6)。
  • 数据链路层:数据链路层负责在物理层上建立、维护和断开数据链路,提供错误检测和纠正,确保数据帧的可靠传输;主要协 议 ARP 、 RARP 、IEEE802.3、PPP、CSMA/CD。
  • 物理层:物理层负责传输原始比特流,通过物理媒介(如电缆、光纤、无线信号等)实现数据的传输;常用设备:集线器、中继器、调制解调器、网线、双绞线、同轴电缆等。

  OSI七层模型为网络通信提供了一个系统化的框架,帮助网络工程师和开发人员理解和设计网络协议及应用。虽然在实际应用中,许多现代网络协议并不完全遵循OSI模型,但该模型依然是学习和理解网络通信的重要工具,实际大多数使用的是TCP/IP五层模式。

三、TCP/IP五层模型

  TCP/IP五层协议模型是互联网协议族的一个分层结构,它是由美国国防部开发的,旨在为网络通信提供一套标准。虽然TCP/IP协议族与OSI七层模型有相似之处,但它的层次结构更为简洁,通常分为五层。以下是TCP/IP五层协议模型的各层及其功能:

在这里插入图片描述
  TTCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/IP 协议中 TCP 协议和 IP协议最具代表性,所以被称为 TCP/IP 协议,其每层的功能和OSI七层类似,这里就不再赘述。

四、MAC-PHY接口

  在物理层,由 IEEE 802.3 标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,物理层一般是通过一个 PHY 芯片实现其功能的。而链接数据链路层和物理层之间的通信接口称为媒体访问控制接口(MAC-PHY接口),也叫MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,后逐步扩展为:MII、RMII、SMII、GMII、RGMII 等。

  • MII:MII是最初的MAC-PHY接口标准,支持10 Mbps和100 Mbps的以太网,时钟单沿采样。
    在这里插入图片描述

  发送、接收的数据线均为4位,则每个时钟周期发送或接收4位数据。如果要实现100Mbps通信速率,那么时钟频率就应该是25MHz。如果要实现10Mbps通信速率,那么时钟频率就应该是2.5MHz。

  • RMII:RMII是MII的简化版,支持10 Mbps和100 Mbps的以太网,时钟单沿采样。
    在这里插入图片描述

  RMII将发送时钟、接收时钟合并为参考时钟信号,把4位的数据线简化为2位数据线。当以100Mbps速率传输数据时,每个时钟传输2位数据,此时参考时钟应该设置为50MHz。当以10Mbps速率传输数据时,参考时钟应设置为5MHz。

  • GMII:用于支持千兆以太网(1 Gbps)数据传输,时钟单沿采样。

在这里插入图片描述

  由于数据线位宽为8位,在每个时钟的单沿进行数据传输。如果要实现1000Mbps传输速率,那么发送和接收的时钟频率应该为125MHz。

  • RGMII:专门设计用于支持千兆以太网(1 Gbps)数据传输。RGMII是GMII(Gigabit Media Independent Interface)的简化版本,旨在减少所需的引脚数量,同时保持高数据传输速率,时钟双沿采样。

在这里插入图片描述

  由于数据线位宽为4位,在每个时钟的双沿进行数据传输。如果要实现1000Mbps传输速率,那么发送和接收的时钟频率应该为125MHz。

五、MAC帧格式

  MAC 子层是属于数据链路层的下半部分,它主要负责与物理层进行数据交接。如:是否可以发送数据,发送的数据是否正确,对数据流进行控制等。它自动对来自上层的数据包加上一些控制信号,交给物理层。接收方得到正常数据时,自动去除 MAC 控制信号,把该数据包交给上层,帧格式如下:

在这里插入图片描述

  1. 前导码:也称为帧头;用于使收发节点的时钟同步;内容为连续 7 个字节的 0x55。
  2. 帧起始界定符:用于区分前导段与数据段的,内容为 0xD5。
  3. MAC 地址:MAC 地址由 48 位数字组成,它是网卡的物理地址,在以太网传输的最底层,就是根据 MAC 地址来收发数据。
  4. 数据包类型:用来描述本 MAC 数据包是属于 TCP/IP 协议层的IP 包、 ARP 包还是 SNMP 包,也可以用来描述本 MAC 数据包数据段的长度。如果该值被设置大于 0x0600,不用于长度描述,而是用于类型描述功能,表示与以太网帧相关的 MAC 客户端协议的种类。
  5. 数据段:数据段是 MAC 包的核心内容,它包含的数据来自 MAC 的上层。
  6. 校验和域:MAC 数据包的尾部是校验和域,它保存了 CRC 校验序列,用于检错。

六、IP帧格式

  上面介绍的MAC 数据包位于 TCP/IP 协议的数据链路层,当 MAC 数据包经过数据链路层到达网络层时,前导码、帧起始界定符、目的 MAC 地址、源 MAC 地址、类型/长度以及校验字节均被去除,只有有效数据传入了网络层。网络层互联主要负责主机间或与路由器、交换机间对分组数据的路由选择和传递。要实现这一功能,就需要相关协议。常用的网络层协议就是 IP 协议,IP帧格式如下:

在这里插入图片描述
  传入网络层的数据包并不完全是需要传输的有效数据,他的前面还包含着 20 字节的IP 协议首部,IP协议首部格式如下:

在这里插入图片描述
  有两部分组成:IP 首部和数据。首部长度可由 20~60 个字节组成,该部分包含有与路由选择和传输有关的重要信息。

  1. 版本:4bit,该字段定义 IP 协议版本;IPv4的值为4,IPv6的值为6。
  2. 首部长度:4bit,指定IP头部的长度,以32位字(4字节)为单位。最小值为5(20字节),最大值为15(60字节)。
  3. 服务类型:8bit,用于指定数据包的优先级和服务质量;并对数据报按照重要性级别进行分配。前 3 位成为优先位,后面 4 位成为服务类
    型,最后 1 位没有定义。这些 8 位字段用于分配优先级、延迟、吞吐量以及可靠性。
  4. 总长度:16bit,指定整个IP数据包的长度,包括头部和数据部分,单位为字节。最大值为65,535字节。
  5. 标识:该字段包含一个整数,用于识别当前数据报。当数据报分段时,标识字段的值被复制到所有的分段之中。该字段由发送端分配帮助接收端集中数据报分段。
  6. 标志:3bit,其中最低位(MF)控制分段,存在下一个分段置为 1,否则置 0 代表该分段是最后一个分段。中间位(DF)指出数据报是否可进行分段,如果为 1 则机器不能将该数据报进行分段。第三位即最高位保留不使用,值为 0。
  7. 分段偏移:13bit,该字段指出分段数据在源数据报中的相对位置,支持目标 IP适当重建源数据。
  8. 生产时间:用于限制数据包在网络中的生存时间。每经过一个路由器,TTL值减1,当TTL为0时,数据包被丢弃。
  9. 协议:指定IP数据包中封装的上层协议类型(如TCP、UDP、ICMP等)。例如,TCP的值为6,UDP的值为17。
  10. 用于检测IP头部在传输过程中是否发生错误。接收方会计算接收到的头部的校验和,并与该字段进行比较。
  11. 源IP地址:源主机 IP 地址,该字段在 IPv4 数据报从源主机到目的主机传输期间必须保持不变。
  12. 目的IP地址:目标主机 IP 地址,该字段在 IPv4 数据报从源主机到目的主机传输期间同样必须保持不变。

6.1 IP首部校验和计算

  首部校验和一共16bit位,2字节。首先将校验和位置为00,然后将整个IP头部的20字节,按照每两个字节一组分开;然后一起累加,若结果大于 FFFF 那么把高 16 位与低 16 位相加,直到最终结果为 16 比特数据。将计算结果取反作为 IP 首部校验和字节。

  例如:抓取 IP 数据包,取 IP 数据报报头部分(20B),数据如下,45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d,计算 IP 首部校验和。

  1. 首先将校验和字段置为00,数据变为:45 00 00 30 80 4c 40 00 80 06 00 00 d3 43 11 7b cb 51 15 3d
  2. 再将IP首部以2字节分开然后求和:
    4500+0030+804c+4000+8006+0000+d343+117b+cb51+153d=34ace
  3. 结果大于FFFF,那么将结果的高16位和低16位相加:
    0003+4ace=4ad1
  4. 再把相加后的数字取反:~ 4ad1 = B521

6.2 IP首部校验和校验

  对 IP 首部中每个 16 bit 进行二进制反码求和,将计算结果再取反码,若结果为 0,通过检验,否则,不通过检验。例如:验证IP首部:45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d

  1. 以2字节分开求和:
    4500+0030+804c+4000+8006+b52e+d343+117b+cb51+153d=3fffc
  2. 求和后结果大于FFFF,则高16位和低16位相加:
    0003+fffc=ffff
  3. 相加后的结果取反:~ ffff = 0000,校验正确。

七、UDP帧格式

  网络层在接收到数据包后,取下数据包的 IP 首部,将剩余有效数据包发送到传输层。传输层有两种传输协议:基于字节流的 TCP 协议、基于报文流的 UDP 协议。两种协议各有优缺点,应用于不同场景。TCP 协议是面向连接的流传输协议,可以保证数据传输
的完整、有序,是可靠协议,常用在对数据完整性和正确性要求较高的场合,如文件传输。占用资源较 UDP 多,速度较 UDP 慢;UDP 协议则是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,因为无需连接,传输速度较 TCP 快,占用资源量较TCP 少,适合实时数据的传输,如视频通话。
  UDP(用户数据报协议)是一个无连接的传输层协议,用于在计算机网络中传输数据。UDP数据报的格式相对简单,适用于需要快速传输而不需要复杂连接管理的应用,其帧格式如下:

在这里插入图片描述
  UDP 数据包分为 UDP 首部和有效数据两个部分。UDP 首部由源端口,目的端口,报文长度以及校验和组成,其UDP头部格式如下:

在这里插入图片描述

  1. 源端口号(16bit):指定发送数据报的应用程序的端口号。这个字段是可选的,可以为0。
  2. 目的端口号(16bit):指定接收数据报的应用程序的端口号。这个字段是必需的。
  3. UDP长度(16bit):指定UDP数据报的总长度,包括头部和数据部分。最小值为8字节(仅包含头部)。
  4. UDP校验和(16bit):用于错误检测,确保数据在传输过程中没有损坏,校验和覆盖UDP头部和数据部分的内容,接收方会计算接收到的数据的校验和,并与该字段进行比较

7.1 UDP头部校验和计算

  UDP 校验和的计算需要三部分数据:UDP 伪首部、UDP 首部和有效数据。伪首部包含 IP 首部一些字段,其目的是让 UDP 两次检查数据是否已经正确到达目的地,只是单纯做校验使用。
在这里插入图片描述
  例如:源IP地址为:a9 fe bf 1f,目的IP地址为: a9 fe 01 17,协议为11。UDP长度为0028,源端口号为:04d2,目的
端口号也是04d2。

在这里插入图片描述

  1. 和IP校验一样,先把校验位置0,得到数据:a9 fe bf 1f a9 fe 01 17 00 11 00 28 04 d2 04 d2 00 28 00 00 68 74 74 70 3a 2f 2f 77 77 77 2e 63 6d 73 6f 66 74 2e 63 6e 20 51 51 3a 31 30 38 36 35 36 30 30

  2. 累加起来:a9fe + bf1f + a9fe + 0117 + 0011 + 0028 + 04d2 + 04d2 + 0028 + 0000 + 6874 + 7470+ 3a2f + 2f77 + 7777 + 2e63 + 6d73 + 6f66 + 742e + 636e + 2051 + 513a + 3130 +3836 + 3536 + 3030 = 6 ff67

  3. 大于FFFF,则高16位和低16位相加:0006 + ff67 = ff6d

  4. 相加后取反:~ff6d = 0092

  以上是我们对以太网基础知识的了解,接下来我们用FPGA来实现。

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

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

相关文章

Linux平台C99与C++11获取系统时间

源码: #include <iostream> #include <chrono> #include <ctime> #include <thread>using namespace std; int main() {cout << "===使用C99方式获取系统时间===" << endl;time_t now = time(nullptr);struct tm *tm_c99 = lo…

QT版发送邮件程序

简单的TCP邮箱程序 **教学与实践目的&#xff1a;**学会网络邮件发送的程序设计技术。 1.SMTP协议 邮件传输协议包括 SMTP&#xff08;简单邮件传输协议&#xff0c;RFC821&#xff09;及其扩充协议 MIME&#xff1b; 邮件接收协议包括 POP3 和功能更强大的 IMAP 协议。 服务…

【学习记录】使用CARLA录制双目摄像头SLAM数据

一、数据录制 数据录制的部分参考了网上的部分代码&#xff0c;代码本身并不复杂&#xff0c;基本都是简单的CARLA语法&#xff0c;关键的一点在于&#xff0c;CARLA内部本身并没有预设的双目摄像头&#xff0c;需要我们添加两个朝向相同的摄像头来组成双目系统&#xff0c;这…

第02章 CentOS基本操作

2.文件基本操作【文件操作&#xff08;一&#xff09;】 目标 理解Linux下路径的表示方法能够使用命令(mkdir和touch)在指定位置创建目录和文件能够使用命令(rm)删除指定的目录和文件能够使用命令(ls)列出目录里的文件能够使用命令(cat,head,tail,less,more)查看文件内容理解标…

【数字图像处理+MATLAB】解决 imshow 函数图像显示亮度异常问题:自动调整亮度范围使图像能正确显示

问题描述 在MATLAB中&#xff0c;使用imshow函数进行图像显示时&#xff0c;图片亮度显示异常。 imshow(im_avg);执行上述代码后&#xff0c;得到的图片亮度异常&#xff0c;如下图所示&#xff1a; 原因分析 在MATLAB中&#xff0c;imshow函数的亮度显示规则是基于图像数据…

探索 Python 的新边疆:sh 库的革命性功能

文章目录 **探索 Python 的新边疆&#xff1a;sh 库的革命性功能**第一部分&#xff1a;背景介绍第二部分&#xff1a;sh 库是什么&#xff1f;第三部分&#xff1a;如何安装 sh 库&#xff1f;第四部分&#xff1a;简单库函数使用方法1. 执行 ls 命令2. 使用 grep 搜索文件内容…

外贸管理利器7选,助力高效办公

推荐7款外贸管理软件&#xff0c;包括ZohoBooks、ZohoCRM、富通天下等&#xff0c;各具特色&#xff0c;满足外贸企业不同需求&#xff0c;提高管理效率&#xff0c;助力企业全球化竞争。、 一、Zoho Books Zoho Books是一款外贸财务管理软件&#xff0c;不仅为用户提供了一个…

SQL中的内连接(inner join)、外连接(left|right join、full join)以及on关键字中涉及分区筛选、null解释

一、简介 本篇幅主要介绍了&#xff1a; SQL中内连接&#xff08;inner join&#xff09;、外连接&#xff08;left join、right join、full join&#xff09;的机制;连接关键字on上涉及表分区筛选的物理执行及引擎优化&#xff1b;null在表关联时的情况与执行&#xff1b; …

机器学习(一)——基本概念、模型的评估与选择

目录 1 关于2 概念2.1 基础概念2.2 学习过程2.3 预测与评估2.4 标记与分类2.4.1 标记2.4.2 分类 2.5 回归分析2.6 聚类分析2.7 学习类型2.8 泛化能力2.9 统计学概念 3 模型评估与选择3.1 经验误差与过拟合3.2 评估方法3.2.1 留出法3.2.2 交叉验证法3.2.3 自助法3.2.4 调参与最终…

ssm060基于SSM的高校共享单车管理系统的设计与实现+vue(论文+源码)_kaic

设计题目&#xff1a;高校共享单车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0…

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …

三菱QD77MS定位模块速度更改功能

速度更改功能” 是以任意时机将控制中的速度更改为新指定的速度的功能。更改后的速度直接设置到缓冲存储器中&#xff0c;并根据速度更改指令([cd.15速度更改请求)或者外部指令信号执行速度更改。 但是&#xff0c;机械原点复位的情况下&#xff0c;检测出近点狗 ON 并开始向蠕…

flink 内存配置(二):设置TaskManager内存

flink 内存配置&#xff08;一&#xff09;&#xff1a;设置Flink进程内存 flink 内存配置&#xff08;二&#xff09;&#xff1a;设置TaskManager内存 flink 内存配置&#xff08;三&#xff09;&#xff1a;设置JobManager内存 flink 内存配置&#xff08;四&#xff09;…

线段树专题(1)

线段树 线段树可维护的信息类型 线段树可以维护的信息类型&#xff0c;父范围上的某个信息&#xff0c;可以用O(1)的时间&#xff0c;从子范围的信息加工得到&#xff0c;例如求某个范围的最大最小值&#xff0c;给某个范围每个位置加相同的数字&#xff0c;进行求和。 0到2范…

NoETL自动化指标平台为数据分析提质增效,驱动业务决策

直觉判断往往来源于多年的经验和专业知识&#xff0c;能够在复杂和不确定的环境中快速做出决策反应。但这种方式普遍存在主观偏见&#xff0c;缺乏合理的科学依据&#xff0c;无法全面、客观、精准地评估和识别市场趋势与用户需求&#xff0c;从而造成决策失误&#xff0c;给业…

软考高级架构 - 8.1 - 系统质量属性与架构评估 - 超详细讲解+精简总结

第8章 系统质量属性与架构评估 软件系统属性包括功能属性和质量属性&#xff0c;而软件架构重点关注质量属性。 8.1 软件系统质量属性 8.1.1 概述 软件系统的质量反映了其与需求的一致性&#xff0c;即&#xff1a;软件系统的质量高低取决于它是否能满足用户提出的需求&#…

Jmeter常见的几种报错及解决方案

在性能测试的过程中&#xff0c;使用JMeter进行负载测试是一项常见而重要的任务。然而&#xff0c;测试中常常会遇到各种报错&#xff0c;这些问题可能会影响测试结果的准确性。了解这些错误的原因及解决方案&#xff0c;是每位测试工程师必备的技能 进行Jmeter项目练习的时候…

《JavaEE进阶》----21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)>

PS&#xff1a; 开闭原则 定义和背景‌ ‌开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;‌&#xff0c;也称为开放封闭原则&#xff0c;是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放&#xff0c;对修改封闭。这意味着一个软…

仿真APP助力汽车零部件厂商打造核心竞争力

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。 在汽车产业快速发展的今天&#xff0c;汽车零部件…

现代Web开发:Vue 3 组件化开发实战

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;Vue 3 组件化开发实战 现代Web开发&#xff1a;Vue 3 组件化开发实战 现代Web开发&#xff1a;Vue 3 组…