当前位置: 首页 > article >正文

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

系列文章目录

文章目录

  • 系列文章目录
  • 一、以太网简介
  • 二、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.kler.cn/a/381493.html

相关文章:

  • 【黑马头条训练营】day02-黑马头条-App端文章展示
  • 【学生管理系统】权限管理之角色管理
  • 前后端分离(前后端交互步骤)
  • 基于Docker+模拟器的Appium自动化测试(二)
  • 【模块系列】STM321.69TFT屏幕
  • 【机器学习】机器学习的基本分类-半监督学习(Semi-supervised Learning)
  • leecode 44. 通配符匹配
  • 重学Android:自定义View基础(一)
  • Linux高阶——1103—修改屏蔽字信号到达及处理流程时序竞态问题
  • 微信小程序中,点击视频,没有跳转播放,可能是因为没有在app.json中正确注册视频播放页面的路径
  • 聊一聊Elasticsearch的索引的分片分配机制
  • 基于 Encoder-only 架构的大语言模型
  • 后台管理系统的通用权限解决方案(十二)数据模型、基于SpringCloud和Nacos的后端项目搭建
  • Python数据分析NumPy和pandas(二十三、数据清洗与预处理之五:pandas的分类类型数据)
  • java 中List 的使用
  • Vue:事件
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附下载链接
  • 根据某个字段禁用el-table里的checkbox
  • 纯前端实现在线预览excel文件(插件: LuckyExcel、Luckysheet)
  • 洛谷月赛 11.1题解
  • Android 15 在状态栏时间中显示秒数
  • 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
  • oracle如何创建两个数据库,以及如何用navicat连接,监听、数据泵
  • 定位new的表达式
  • 数据结构和算法入门
  • 【ORACLE】对Oracle中char类型的研究分析