FPGA-UDP实验

news2024/9/19 10:37:09

1. 以太网简介

  1. 水晶头的规格就是RJ45
  2. 千兆网一般指的就是UDP千兆网
  3. PHY芯片是用来协商用的 协商匹配最低的通信速率

1.1. OSI模型

  1. 7层
    在这里插入图片描述

在这里插入图片描述

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=image-2.png&pos_id=img-SeubNYVv-1720108026560)

1.2. 几种接口

  1. FPGA配置PHY芯片的接口 MDIO
  2. 数据交换相关的接口 MII-RMII-GMII(千兆)-RGMII(千兆)
    1. MII(Medium Independent Interface,媒体独立接口): MII 支持 10Mbps 和 100Mbps 的操作,数据位宽为 4 位,在 100Mbps 传输速率下,时钟频率为 25Mhz。
    2. RMII(Reduced MII): RMII 是 MII 的简化版, 数据位宽为 2 位,在 100Mbps 传输速率下,时钟频率为 50Mhz。
    3. GMII(Gigabit MII): GMII 接口向下兼容 MII 接口, 支持 10Mbps、 100Mbps 和 1000Mbps 的操作,数
    4. 据位宽为 8 位,在 1000Mbps 传输速率下,时钟频率为 125Mhz。RGMII(Reduced GMII): RGMII 是 GMII 的简化版,数据位宽为 4 位,在 1000Mbps 传输速率下,时钟频率为 125Mhz,在时钟的上下沿同时采样数据。 在 100Mbps 和 10Mbps 通信速率下,为单个时钟沿采样。
    5. 常用的接口为RGMII和GMII接口。**RGMII接口的优势是同时适用于10M/100M/1000Mbps 通信速率,同时占用的引脚数较少。**但 RGMII 接口也有其缺点,就是在 PCB 布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格
  3. GMII接口介绍
    在这里插入图片描述
时钟等于125M的时候   125M*8bit=1000Mbps      实现了千兆网 
时钟等于25M的时候    12.5M*8bit=100Mbps      实现了百兆网
通过设置不同的时钟频率来设置不同的传输速率
  1. RGMII接口介绍
    在这里插入图片描述
  • 有延迟模式和非延迟模式,用的更多的是延迟模式,一般PHY芯片默认配置为延时模式
  • 所谓的非延时模式其实就是在时钟的跳变沿传输上一时刻的数据值,延时模式就是在是时钟的跳变沿的此刻传输数据(类似于I2S)
  • RGMII与GMII不同的是,RGMII在时钟的上升沿和时钟的下降沿都传输数据,但是GMII只在时钟的上升沿进行数据的传输
  • RGMII是后来发展而来的,节省了数据线
    在这里插入图片描述

RGMII 发送端口在 TXC 时钟的上升沿传输 TXD 的低 4 位和 TX_CTL 的使能信号;下降沿传输 TXD 的高 4 位和 TX_CTL 的错误信号(实际上是使能信号和错误信号的异或值);RGMII 接收端口在 RXC 时钟的上升沿传输 RXD 的低 4 位和 RX_CTL 的使能信号;下降沿传输 RXD 的高4 位和 RX_CTL 的错误信号(实际上是使能信号和错误信号的异或值)

1.3. 数据包介绍

数据包又叫做MAC数据包,存在于PHY芯片和外设(FPGA或者PC等)中
在这里插入图片描述

  • 红色的是前导码,绿色的是MAC层的有效数据,灰色的是校验码

  • 前导码(7Byte,默认为8’h55)+ SFD(1Byte,默认为8’hd5)一般作为帧头,目的MAC地址(6Byte)+源AMC地址(6Byte)+类型/长度(2Byte,小于1536表示长度,大于1536表示类型 ARP:16’h0806 ip:16’0800)

  • MAC数据中 IP头部/首部(20Byte)
    在这里插入图片描述

    1. 版本 + 首部长度 1byte,版本ipv4 : 4’h4 ,首部长度 : 4’h5
    2. 服务类型 1byte,一般为8’h0
    3. 总长度 2byte,ip首部长度 + ip数据包长度
    4. 标识 2byte,复位给0,发完一包数据自加1
    5. 标记 + 分段偏移 2byte,标记:3bit。最高位保留为0;中间位是否开启分段,0不开启,1开启;最低位表示是否存在下一个分段,0表示为最后一个分段,1表示还存在下一个分段。一般默认为3’b010,分段偏移:表示第0段,第1段…
    6. 生存时间 1byte,表示以太网数据包可以中转进过多少个路由器,每进过一个路由器,改值就会减少1,直到该值变成0,丢包该包。,win系统默认为8‘h80
    7. 协议 1byte,udp : 8’d17 ,tcp : 8’d6, icmp : 8’d1
    8. 首部校验和 2byte
    9. 源ip地址 4byte
    10. 目的ip地址 4byte
    11. 说明:MAC数据包的长度不能超过1526

1.4. UDP首部校验和、IP首部校验和计算方法

  1. 将校验和字段b5 2e置为00 00
  2. 以两个字节为单位,数据反码求和
  3. 将进位(3)加到低16位上
  4. 将上一步的数据取反

1.5. 软件的使用-网络调试助手&Wireshark

  1. ping是ICMP其中的一个功能
    ping的功能就是通过数据的回环,检查网络的连接情况
  2. ARP
    基本功能:知道目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
    ARP表 静态绑定MAC地址

2. 实验1-ARP

  1. ARP协议介绍

    1. ARP(Address Resolution Protocol),即地址解析协议,是根据IP地址(逻辑地址)获取MAC地址的一种 TCP/IP 协议。32位的IP地址对应48位的MAC地址
    2. ARP 协议分为 ARP 请求和 ARP 应答
    3. ARP 协议位于以太网MAC帧格式的数据段, ARP数据包格式如下图所示:
      在这里插入图片描述
      在这里插入图片描述

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

  2. ARP广播过程

    1. ARP请求时,携带发送方的IP地址和MAC地以及目标的IP地址,目标的MAC地址是48位的1,因为要进行广播发送,下面是ARP广播的示意图
      在这里插入图片描述

    2. 只有验证成功的主机才能返回一个ARP应答报文(包含了接收方的IP地址和MAC地址)

    3. 发送方接收到报文,更新自己的ARP缓存表

  3. 以太网的帧格式
    ARP协议(在MAC层)通过以太网传输,下面介绍以太网的帧格式,以太网的通信是以数据包的形式传输的
    在这里插入图片描述

在这里插入图片描述

上图中长度/类型比较重要,当这两个字节的数据小于1536的时候 代表数据段的长度,大于1536代表数据属于哪个上层协议 例如0x0800代表IP协议(网际协议) 0x0806代表ARP协议(地址解析协议)
数据的长度最小46个字节,最大1500个字节,最大值1500称为以太网的最大传输单元(MTU)
FCS(Frame Check Sequence),为了确保数据的正确传输 应用最广泛的是CRC-32标准

IFG(Interpacket Gap)帧间隙,IFG 的最小值是96 bit的时间,在不同的媒介中IFG的最小值是不一样的

  1. ARP和以太网MAC层的关系
    TCP(传输控制协议)/IP(网际协议)协议簇。它包括上百个各种功能的协议,如TCP、 IP、ARP、 UDP 等。而其中的TCP和IP协议是保证数据完整传输的两个重要协议,因此TCP/IP协议用来表示Internet协议簇。

TCP/IP协议不仅可以运行在以太网上,还可以运行在FDDI(光纤分布式数据接口)和WLAN(无线局域网)上,反过来,以太网的高层协议不仅可以是TCP/IP协议,还可以是IPX(互联网分组交换)协议。只不过以太网+TCP/IP成为IT行业中应用最普遍的技术。

  1. ARP实验
    在这里插入图片描述

上面是FPGA发送给PC的ARP请求,下面是PC向FPGA开发板发送的数据,通过这样的过程,使通信的双方构建起了ARP的通信

3. 实验2-ICMP

3.1. ICMP协议介绍

  • ICMP(Internet Control Message Protocol) Internet 控制报文协议。它是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、 路由器之间传递控制消息。
  • ping和tracert(显示到达目的主机的路径)都利用ICMP协议来实现网络功能。ICMP就是一个“错误侦测与回报机制”,目的是让我们能够检测网络的连接状况,确保网络连接的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件
  • 主要功能有:
    • 侦测远端主机是否存在
    • 建立与维护路由资料
    • 重导资料传送路径(ICMP重定向)
    • 资料流量控制
      在这里插入图片描述

3.2. IP协议介绍

IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP协议的载体,IP协议规定了数据传输时的基本单元和格式
所有的TCP UDP ICMP数据都以IP数据报格式传输,IP数据报的格式如图所示
在这里插入图片描述

第二行的标识|标志|片偏移都是和数据包分组发送相关的
第三行的协议:表示数据报所携带上层数据使用的协议类型 ICMP为1 TCP为6 UDP为17;首部校验和:校验IP数据报头部是都被破坏,篡改和修改等

3.3. ICMP协议

3.4. 协议介绍

IP头部就在ICMP报文的前面(ICMP的首部在IP层的数据段),一个ICMP报文包括IP头部,ICMP头部和ICMP报文IP头部的Protocol为1说明这是一个ICMP报文,ICMP头部的类型(Type)用于说明ICMP报文的作用与格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有的数据都在ICMP头部的后面

3.5. 一帧ICMP报文

在这里插入图片描述

  • ICMP首部一共8个字节,同IP首部一样,也是一行以32位(4个字节)为单位

  • 类型和代码表示的含义

    类型/代码含义
    类型 0,代码 0表示回显应答(ping 应答)
    类型 8,代码 0表示回显请求(ping 请求)
    类型 11,代码 0超时
    类型 3,代码 0网络不可达
    类型 3,代码 1主机不可达
    类型 5,代码 0重定向
  • 标识符(Identifier):占用了 16 bit 位,对于每一个发送的数据报进行标识。

  • 序列号(Sequence number):占用了16bit位,对于发送的每一个数据报文进行编号,比如:发送的第一个数据报序列号为 1,第二个序列号为2。

4. 实验3-UDP

4.1. UDP回环系统框图

在这里插入图片描述

4.2. UDP回环程序编写

先把从PHY芯片接收到的双边沿的RGMII信号转为单边沿的GMII信号

4.3. demo的调用

  1. 步骤
    1. 前提:程序正常烧录到FPGA,网口线接好
    2. 在win进行ARP地址的映射(这个比较关键)
      1. 查看ARP缓存:在命令提示符中输入arp -a,就可以列出所有ARP缓存的条目。
      2. 添加ARP条目:在命令提示符中输入arp -s <IP地址> <MAC地址>,就可以将一个2新的IP和MAC的映射关系添加到ARP缓存中。
      3. 删除ARP条目:在命令提示符中输入arp -d <IP地址>,就可以将指定的映射关系从ARP缓存中删除。
    3. 在网络调试助手输入正确的远程主机的IP和端口号
      在这里插入图片描述

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

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

相关文章

【LeetCode】有效的数独

目录 一、题目二、解法 一、题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…

使用OpenCV与PySide(PyQt)的视觉检测小项目练习

OpenCV 提供了丰富的图像处理和计算机视觉功能&#xff0c;可以实现各种复杂的图像处理任务&#xff0c;如目标检测、人脸识别、图像分割等。 PyQt(或PySide)是一个创建GUI应用程序的工具包&#xff0c;它是Python编程语言和Qt库的成功融合。Qt库是最强大的GUI库之一。Qt的快速…

昇思MindSpore 25天学习打卡营|day18

DCGAN生成漫画头像 在下面的教程中&#xff0c;我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中&#xff0c;使用的动漫头像数据集共有70,171张动漫头像图片&#xff0c;图片大小均为96*96。 GAN基础原理 这部分原…

06.C2W1.Auto-correct

往期文章请点这里 目录 OverviewAutocorrectWhat is autocorrect?How it works Building the modelMinimum edit distanceMinimum edit distance algorithmMinimum edit distance Part 2Minimum edit distance Part 3 往期文章请点 这里 Overview 本周学习目标&#xff1a;…

C++入门7——string类详解

目录 1.什么是string类&#xff1f; 2.string类对象的常见构造 2.1 string(); 2.2 string (const char* s); 2.3 string (const string& str); 2.4 string (const string& str, size_t pos, size_t len npos); 2.5 string (const char* s, size_t n); 2.7 验证…

Educational Codeforces Round 167 (Rated for Div. 2)(A~C)题解

A. Catch the Coin 解题思路: 最终&#x1d465;一定会相等&#xff0c;我们考虑直接到下面接住他。 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t; ll…

PCIe驱动开发(2)— 第一个简单驱动编写和测试

PCIe驱动开发&#xff08;2&#xff09;— 第一个简单驱动编写和测试 一、前言 教程参考&#xff1a;02_实战部分_PCIE设备测试 教程参考&#xff1a;03_PCIe设备驱动源码解析 二、驱动编写 新建hello_pcie.c文件 touch hello_pcie.c然后编写内容如下所示&#xff1a; #i…

芯片封装简介

1、背景 所谓“封装技术”是一种将集成电路用绝缘的塑料或陶瓷材料打包的技术。以CPU为例&#xff0c;实际看到的体积和外观并不是真正的CPU内核的大小和面貌&#xff0c;而是CPU内核等元件经过封装后的产品。封装技术对于芯片来说是必须的&#xff0c;也是至关重要的。因为芯片…

Java AI+若依框架项目开发 RuoYi-Vue(SpringBoot + Vue)

1.诺依的版本 本次选择RuoYI-Vue框架进行讲解 官网地址&#xff1a;RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 (gitee.com) 2.搭建后端…

centos7|操作系统|低版本的OpenSSH升级到最新版本OpenSSH-9.8.p1

前言&#xff1a; 1、 OpenSSH是什么 OpenSSH 是 SSH &#xff08;Secure SHell&#xff09; 协议的免费开源实现。SSH协议族可以用来进行远程控制&#xff0c; 或在计算机之间传送文件。而实现此功能的传统方式&#xff0c;如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都…

集合复习(java)

文章目录 Collection 接口Collection结构图Collection接口中的方法Iterator 与 Iterable 接口Collection集合遍历方式迭代器遍历增强 for 遍历 List&#xff08;线性表&#xff09;List特有方法ArrayList&#xff08;可变数组&#xff09;ArrayList 底层原理ArrayList 底层原理…

土豆炒肉做法

菜单&#xff1a;土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程&#xff1a; 洗土豆&#xff0c;削皮&#xff0c;擦成条&#xff0c;用凉水过滤两遍淀粉&#xff0c;顺便放个燥里洗肉&#xff0c;切成条&#xff0c;按照生抽、酱油、淀粉、…

【Etabs】【Rhino】Swallow(ESD)软件的ETABS功能介绍

Swallow(ESD)软件的ETABS功能介绍 来源&#xff1a;https://www.food4rhino.com/app/swallowesd 文章目录 Swallow(ESD)软件的ETABS功能介绍1. Load模块1.1 Support节点支座1.2 LoadPattern荷载模式1.3 LoadPattByName引用模型荷载模式1.4 AutoWindChinese自动风荷载参数1.5 R…

【数据结构与算法】插入排序

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

Git仓库介绍

1. Github GitHub 本身是一个基于云端的代码托管平台&#xff0c;它提供的是远程服务&#xff0c;而不是一个可以安装在本地局域网的应用程序。因此&#xff0c;GitHub 不可以直接在本地局域网进行安装。 简介&#xff1a;GitHub是最流行的代码托管平台&#xff0c;提供了大量…

【开放集目标检测】Grounding DINO

一、引言 论文&#xff1a; Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 作者&#xff1a; IDEA 代码&#xff1a; Grounding DINO 注意&#xff1a; 该算法是在Swin Transformer、Deformable DETR、DINO基础上…

STM32崩溃问题排查

文章目录 前言1. 问题说明2. STM32&#xff08;Cortex M4内核&#xff09;的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里&#xff1f;3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…

数据库(表)

要求如下&#xff1a; 一&#xff1a;数据库 1&#xff0c;登录数据库 mysql -uroot -p123123 2&#xff0c;创建数据库zoo create database zoo; Query OK, 1 row affected (0.01 sec) 3&#xff0c;修改字符集 mysql> use zoo;---先进入数据库zoo Database changed …

护网在即,知攻善防助力每一位安服仔~

前言 是不是已经有师傅进场了呢~ 是不是有安服&#x1f412;在值守呢~ 您是不是被网上眼花缭乱的常用应急响应工具而烦恼呢&#xff1f; 何以解忧&#xff1f;唯有知攻善防&#xff01; 创作起源&#xff1a; 驻场、护网等&#xff0c;有的客户现场只允许用客户机器&…

【计组OS】I/O方式笔记总结

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 IO方式&#xff1a;程序查询方式 工作原理 程序查询方式的详细流程&#xff1a; 1. 初始化阶段 2. 发送I/O命令 3. 循环检查状态 4. 数据传输 5. 继续查询 6…