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来实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【启程Golang之旅】Go-Micro框架的高效开发技巧

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

课下作业:IPSec协议验证

课下作业:IPSec协议验证 文章目录 1. 参考云班课课程资源中“ch03 密码技术-协议验证”的“VPN协议验证.pdf”和“ch03 密码技术-10-密码协议验证IPSec.mp4”,对 IPSec 协议进行验证,提交验证过程。(79分)第一阶段发起…

私域流量时代下的新型商业模式:以开源链动 2 + 1 模式、AI 智能名片、S2B2C 商城小程序源码为例

摘要:本文探讨了私域流量时代的特点及其对商业盈利模式的影响。通过分析从大众消费时代到私域流量时代的转型,阐述了商品到“人”的变化过程。同时,深入研究了开源链动 2 1 模式、AI 智能名片和 S2B2C 商城小程序源码在私域流量发展中的作用…

QJson-趟过的各种坑(先坑后用法)

QJson-趟过的各种坑【先坑后用法】 Chapter1 QJson-趟过的各种坑【先坑后用法】一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge二、json格式化输出1.构建…

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。 对于行…

DBeaver工具连接Hive

DBeaver工具连接Hive 首先解压安装包dbeaver-ce-latest-x86_64-setup.zip,并安装dbeaver-ce-latest-x86_64-setup.exe; 安装Kerberos客户端4.1-amd64.msi; 查看集群节点/etc/hosts文件内容,并追加到C:\Windows\System32\drivers\etc\hosts; 下载集群用户keytab文件,并解压…

动态规划-两个数组的dp问题——718.最长重复子数组

1.题目解析 题目来源 718.最长重复子数组——力扣 测试用例 2.算法原理 1.状态表示 子数组问题不能像子序列问题使用两个区间来表示状态,因为子数组一定是连续的,因此在填第i个位置就需要用到第i-1个位置的值,那么不妨以某个位置为结尾来设…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

【日志】392.判断子序列

2024.11.8 【力扣刷题】 392. 判断子序列 - 力扣(LeetCode)https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 整个题从一开始就是打算从双指针的思想往下走的。但是,我设置了四个变量sLeft…

高校宿舍信息管理系统小程序

作者主页:编程千纸鹤 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参…

【含开题报告+文档+源码】基于SpringBoot的智慧养老医护管理系统

开题报告 随着社会老龄化趋势的不断加深,我国老年人口逐年增长,对养老服务的需求愈发迫切。然而,传统的养老服务模式存在许多不足,如信息孤岛、护理不精准等问题,迫切需要一种创新性的解决方案以提升养老服务的质量和…

【双十一特惠】腾讯云省钱攻略:如何智取云计算资源

前言 双十一不仅是购物的狂欢节,对于云计算用户来说,更是一个节省成本的绝佳时机。腾讯云,作为国内领先的云计算服务商,每年双十一都会推出一系列优惠活动。本文将为您揭开如何在这个购物节中,最大化利用腾讯云的优惠…

IEEE 1588:电信网络的精确时间协议 (PTP)

IEEE 1588:电信网络的精确时间协议 IEEE 1588 PTP 概述PTP 协议特征同步类型IEEE 1588 PTP 角色IEEE 1588 PTP 的工作原理PTP 设备类型PTP 消息类型事件消息一般信息 PTP 时钟类规范PTP 配置文件 https://www.techplayon.com/ieee-1588-precision-time-protocol-ptp…

昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类

如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 大模型平台 平台说明 昇思大模型平台旨在为AI学习者和开发者提供在线学习的项目、模型、大模型体验和数据集的平台。我们也添加了各领域的经典数据集来帮助学习者解决AI学习过程中的一系列难题, 如…

在IDEA中使用Git

一、准备工作 这里我们使用 Gitee 做例子,使用 SSH 协议。看这个文章前最好看一下《》这个文章,了解一下 SSH。 1、生成秘钥对 首先要到 ~/.ssh 目录下进行操作,因为生成的公钥和私钥一般放在这个目录下,Windows 就是在用户目…

Linux下通过sqlplus连Oracle提示字符是乱码▒▒▒[

先参考https://www.cnblogs.com/wrencai/articles/4374451.html 理解下Oracle编码字符集的概念 如下图,刚开始连上是软吗▒▒▒[ 执行export NLS_LANGJAPANESE_JAPAN.AL32UTF8 (这个仅在当前会话起作用)如果好了,说明字符集是这个,不行在尝试别的字符集 如果要永久设置 vim …

Flyweight(享元)

1)意图 运用共享技术有效地支持大量细粒度的对象。 2)结构 享元模式的结构如图 7-36 所示。 其中: Flyweight 描述一个接口,通过这个接口 Flyweight 可以接受并作用于外部状态 ConcreteFlyweight 实现 Flyweight 接口,并为内部状态(如果有)增加存储空…

微信小程序中使用离线版阿里云矢量图标

前言 阿里矢量图库提供的在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 1.下载图标 将阿里矢量图库的图标先下载下来 解压如下 2.转换格式 贴一个地址用于转换格式:Onlin…

大数据之多级缓存方案

多级缓存介绍?多级缓存优缺点,应用场景?多级缓存架构? 多级缓存介绍 多级缓存方案是一种优化手段,通过在多个级别上存储数据来提高应用程序的性能和响应速度。以下是对多级缓存方案的详细解析: 一、多级缓…

jupyter notebook启动和单元格cell

【注意!!!】 本章主要讲解数据分析、挖掘入门及进阶知识 - 通过多篇文章【文字案例】的形式系统化进行描述 数据分析专栏:https://blog.csdn.net/2201_75422674/category_12827743.html - 大家喜欢可以订阅一下,不收费…