UDP网口(1)概述

news2024/11/23 22:36:22

在这里插入图片描述

文章目录

  • 1.计算机网络知识在互联网中的应用
  • 2.认识FPGA实现UDP网口通信
  • 3.FPGA实现UDP网口通信的方案
  • 4.FPGA实现UDP网口文章安排
  • 5.传送门

1.计算机网络知识在互联网中的应用

以在浏览器中输入淘宝网为例,介绍数据在互联网是如何传输的。我们将要发送的数据包称作A(无论经历了怎么的编码都叫做A)。1.在发送数据之前,主机应该有自己的MAC地址和IP地址才具备发送的条件,每一块网卡上都有一个唯一的MAC地址,IP地址使用DHCP动态主机配置协议统一管理。2.打开浏览器,输入淘宝网址(又称域名),在浏览器缓存中查找是否保存有这个域名对应的IP地址,如果没有。将采用DNS(域名解析协议)解析ip地址,具体过程为:网络客户端PC输入www.baidu.com问本地DNS服务器,该网址的ip地址是多少,本地服务器查看缓存列表,缓存中没有就去问根(13台)DNS服务器,根回复去问.com区域管理,.com回应,由163.com管理,由163.com服务器返回ip地址,完成域名解析。3.已知对端IP之后,此时由浏览器(应用层)打包http协议找到传输层的对应端口,传输层使用UDP、TCP之一打包到网络层(UDP面向报文主要用于高速数据的实时传输,TCP面向连接,区别于UDP最大的特点是在传输数据之前先要建立连接(这是数据之外的开销,就是常说的三次握手),传输结束后要结束连接(四次挥手),而UDP可能随时的发送报文)。此时A在主机中的网络层。4.互联网分三个区域,接入层(用户主机所在一级,或大或小的局域网),汇聚层(运营商管理的交互机与数据链路),核心网。A要通过自己所处的局域网必须经过该局域网的路由器(指的是实验室多台主机共用的那个路由器,或者家里的路由器),路由器去寻找接入层与汇聚层之间的交换机。那么此时A应该打包MAC头,到达数据链路层,此时数据在向前传输首先应该知道该路由器的MAC地址,用到了ARP地址解析协议(广播ARP报文),已知对端的ip地址,获取对端的MAC地址,已知对端MAC之后,A打包MAC头,在以太网中传输到路由器上。注:以太网中传输是用到MAC地址的,而以太网是局域网的组网协议(类似的协议还有WLAN!),也就是说对于发送端,MAC地址或者说以太网协议,仅在本地主机到那个直连的路由器之间应用。5.A到达路由器之后,将寻找最短路径(路由)找对端,将采用到RIP路由信息协议和OSFP开放式最短路径优先协议找下一跳的路径,当A到达核心网中时,由于AS域自治,可能还需使用AS之间的边界网关协议BGP,最终A到达淘宝服务器。6.淘宝服务器响应A的请求,返回数据将经历A来时经历的动作到达A。这种交互方式称之为C/S交互,常见的如访问网址;与之对应的另一种交互方式是P2P,例如微信聊天(发消息不去找服务器,而是找某个客户端)。
上述是计算机网络知识在互联网中的应用,涉及各种互联网中的设备与转发。根据冯诺依曼关于计算机架构的理论,具有中央处理器,存储器,输入输出设备,控制器的设备就是计算机,因此计算机网络知识适用于FPGA应用场景。基于不同网络设备实现不同应用的场景很多,TCP/IP协议架构十分庞杂,计算机网络知识很丰富。FPGA实现UDP网口通信系列文章将阐述FPGA与PC如何实现点对点通信。

2.认识FPGA实现UDP网口通信

FPGA实现UDP网口点对点通信,首先要讨论三个问题,第一,数据交互的双方都是FPGA(或PC)里面的谁(具体指哪一个协议)?通过解决这个问题,明白当前要建立的数据链路通道从哪里来到哪里去;第二,指明设备硬件的环境,例如,什么接口,什么芯片等,了解应用基于的硬件环境,搞清每一个硬件部分发挥的作用;第三,不同的硬件环境应该采用不同的技术方案,并且明确基于这样的数据链路和硬件环境创建什么样的应用。本节将回答第一个问题,下一节回答第二第三个问题。
OSI网络模型有七层,但更为人熟知的是五层网络模型。如下图所示左半部分,上层的协议对于下层协议而言只是一个“数据段”。以FPGA到PC上行数据为例,FPGA将用户数据(应用层数据)打包,添加传输层协议信息形成传输层数据,依次类推网络层数据和链路层数据(这几个步骤都是要FPGA完成的)。通过物理层传输到PC设备上,PC上边的接收流程对开发者不可见,或者说使用QT中的Socket开发无需关注底层数据,直接在传输层获取应用层数据即可。如图右半部分,这是一个TCP/IP协议簇的简要示意,下面关注在这个数据链路中到底要实现什么协议?在PC与FPGA连接的场景中,大多是通过网口下发设备运行所需数据,或者通过网口接收设备采集的数据,并不做网络应用,而是偏向于工业控制和数据采集,因此应用层通常是设备的数据,而不去实现某应用层协议。对于传输层通常是TCP和UDP两种,TCP使用单FPGA架构实现的案例很少,主要原因是协议复杂,硬件资源有限,即便实现可靠性和稳定性无法保证。可通过在FPGA内部搭建软核或者使用Soc实现TCP协议,但这种做法与其他的处理器相比不占优势,因此实际应用也不多见。在多数与PC相连用作数据采集的场景中,实现UDP协议能够传输数据即可。网络层将实现ip协议,这是因为UDP协议在ip数据包中打包。此外还可根据应用场景实现ARP协议和ping通信。ARP可以根据已知的对端的ip地址广播(指对端mac地址设置为广播地址)ARP请求报文,网络中所有设备收到ARP请求,匹配IP的设备将返回ARP应答包,以此告知自己的MAC地址。实现ARP协议的好处是,PC给FPGA发送数据,需要知道FPGA板卡的MAC地址,FPGA也需要知道PC的MAC地址,实现ARP协议,当切换不同的PC与FPGA通信时,FPGA可识别不同主机的MAC地址(否则需要在命令提示符对话框中使用arp -s命令手动绑定)。在链路层将按照以太网数据帧格式将网络层数据打包即可。
在这里插入图片描述

3.FPGA实现UDP网口通信的方案

实际上,任何设备实现计算机网络的某个功能就是要在对应的协议层实现相应的协议。FPGA实现UDP网口通信就是要在传输层实现UDP协议,在网络层实现IP(大部分都需要ARP协议),在物理层实现以太网协议,数据链路层没有什么协议。具体为在PHY层实现物理信号的传输和接收,如编码、解码、串行化、解串行化、介质连接管理等。数据链路层中的MAC(Media Access Control)子层负责帧封装和解封装,将上层协议的数据包封装成以太网帧,添加以太网头部和尾部(如源MAC地址、目标MAC地址、以太网类型字段等);负责帧校验和:计算和验证以太网帧的校验和(Frame Check Sequence,FCS);负责帧过滤:根据MAC地址过滤帧,只接收发给本设备的帧或广播帧;负责流量控制:实现流量控制机制(如基于IEEE 802.3x的流控)等。此外数据链路层的LLC(Logical Link Control)子层提供逻辑链路控制服务,使得上层协议能够通过一个统一的接口访问数据链路层。网络层的IP协议负责数据包的寻址和路由,处理IP头部生成和解析;ARP协议将IP地址映射为MAC地址,必要时发送ARP请求和处理ARP回复。UDP协议提供无连接、不可靠的传输服务,负责UDP头部的生成和解析。
对于实现计算机网络的设备,具体是设备中的哪些部分实现哪一层是无关紧要的,也正因为如此,形成了不同的方案,不同方案之间也有不同优缺点适用于不同的应用场景。此外,以太网方案现在用的最多的是千兆网口和万兆网口,本系列介绍不同的方案实现这两种接口。
方案一,使用FPGA组包实现MAC层及以上的层+外部的PHY芯片实现物理层。这种方案FPGA只需要按照与PHY芯片一致的通信接口,按照不同层的通信要求传输数据即可。这类通信接口常见的有RGMII、GMII等(二者都适配)千兆以太网口。这种方案灵活性高,可根据自己的需求定制满足特定场景需求,也不需要购买额外的IP核,成本相对较低。但需要对MAC层的协议和实现有深入的了解,相对的开发难度大,调试成本较高。
方案二,使用xilinx 三态以太网 IP核实现mac层+外部的phy芯片实现物理层。这种方案使用Xilinx提供的IP核已经经过验证,使用方便,降低了开发难度,开发效率会高,与此同时它依赖于IP核的功能,灵活性相对较低。
方案三,使用三态以太网IP核+PCS/PMA实现物理层(通过SFP与PC连接)它的有点是集成度高:通过IP核实现MAC和PCS/PMA层,简化了设计。高性能:可以支持更高的传输速率,通常用于千兆或万兆以太网通信。缺点:成本较高:需要额外购买PCS/PMA的IP核。硬件要求高:需要使用SFP模块进行光电转换,增加了硬件成本和复杂性。这种方案需要使用光电转换模块与PC的网卡相连,或者PC端配备相应的SFP光纤网卡或具备SFP接口的交换机。
方案四,使用10G Ethernet Subsystem IP核实现UDP通信的所有层与协议,进而实现万兆以太网通信。该方案同样需要PC端配备相应的SFP光纤网卡。

4.FPGA实现UDP网口文章安排

本文作为概述介绍要做的哪些事情以及相互之间的关系。方案一用两篇文章介绍,其篇名与链接是UDP网口(2)逻辑组包(上)、UDP网口(3)逻辑组包(下);随后在方案一的基础上做了一个应用,篇名与链接是UDP网口(4)ROM存储网口转发Qt显示;方案二篇名与链接是UDP网口(5)TEMAC IP核组包。方案三的代码开发工作已经完成,相关硬件在采购中,将在验证后第一时间发布。方案四的篇名与链接是UDP网口(6)10G subsystem Ethernet IP实现万兆以太网通信。

5.传送门

  • 我的主页
  • FPGA通信接口专栏汇总导航
END

🔈文章原创,首发于CSDN论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


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

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

相关文章

人工智能AI合集:1、嵌入式LinuxAI开发套件OrangePI AIPRO初体验

前言 随着人工智能技术的飞速发展,AI已经不再是遥不可及的高科技概念,而是逐渐融入到我们的日常生活中。从智能手机的语音助手到家庭中的智能音箱,再到工业自动化和医疗诊断,AI的应用无处不在。然而,要想真正掌握并应用…

数学建模学习(111):改进遗传算法(引入模拟退火、轮盘赌和网格搜索)求解JSP问题

文章目录 一、车间调度问题1.1目前处理方法1.2简单案例 二、基于改进遗传算法求解车间调度2.1车间调度背景介绍2.2遗传算法介绍2.2.1基本流程2.2.2遗传算法的基本操作和公式2.2.3遗传算法的优势2.2.4遗传算法的不足 2.3讲解本文思路及代码2.4算法执行结果: 三、本文…

基于java的设计模式学习

PS :以作者的亲身来看,这东西对于初学者来说有用但不多,这些东西,更像一种经验的总结,在平时开发当中一般是用不到的,因此站在这个角度上用处不大。 1.工厂模式 1.1 简单工厂模式 我们把new 对象逻辑封装…

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件…

【Linux】信号(signal)

目录 一、信号概念: 二、信号的常见状态: 信号递达: 信号未决: 阻塞信号: 忽略信号: 信号在内核中的表示: 三、信号相关函数: sigset_t (类型)&…

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…

基于51单片机的步进电机控制系统proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1jFlIJ9I5qxjW8sYKd6vrBQ?pwd9d6q 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMic…

阿里开源的音频模型_原理与实操

英文名称: FunAudioLLM: Voice Understanding and Generation Foundation Models for Natural Interaction Between Humans and LLMs 中文名称: FunAudioLLM: 人与LLMs之间自然互动的语音理解和生成基础模型 论文地址: http://arxiv.org/abs/2407.04051v3 相关论文&#xff1a;…

1、springboot3 vue3开发平台-后端-项目构建

文章目录 1. 创建项目1.1 前置环境条件1.2 项目创建 2. 模块配置2.1 父工程配置概述2.2 配置启动模块2.3 父工程相关依赖管理 1. 创建项目 1.1 前置环境条件 idea2023, jdk17 1.2 项目创建 创建父工程并删除不需要的文件目录&#xff1a; 右键父工程依次创建其他模块 最…

Java | Leetcode Java题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; class Solution {public int[] singleNumber(int[] nums) {int xorsum 0;for (int num : nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));int type1 0, type2 0;for (int n…

vue2.0结合使用 el-scrollbar 和 v-for实现一个横向滚动的元素列表,并且能够自动滚动到指定元素(开箱即用)

效果图&#xff1a; 代码&#xff1a; <div class"gas-mode-item-body"><el-scrollbar style"width: 300px;height: 100%;" wrap-style"overflow-y:hidden" ref"scrollbarRef"><div style"display: flex&quo…

python-最小公倍数(PythonTip)

[题目描述] 编写一个程序&#xff0c;找出能被从1到给定数字n&#xff08;包括n&#xff09;的所有数字整除的最小正数(即最小公倍数)。 定义函数smallest_multiple()的函数&#xff0c;参数为n。 在函数内&#xff0c;返回能被从1到给定数字n&#xff08;包括n&#xff09;的…

珈和科技完成全国首个农险服务类数据产品入表,实现数据资产化

近日&#xff0c;珈和科技与东湖大数据合作&#xff0c;完成全国首个保险服务类数据产品入表&#xff0c;标志着我国商业卫星遥感应用领域迈出了数据资产化的关键一步。 此次入表的数据产品为“华北农业保险服务数据集数据产品”&#xff0c;是珈和科技融合卫星遥感与无人机等…

数据结构----栈

前言 Hello&#xff0c;小伙伴们&#xff0c;今天我们继续数据结构的学习&#xff0c;前面我们学习了顺序表和链表的实现&#xff0c;今天的栈知识也是和前面的知识相辅相成。 如果你喜欢我的内容的话&#xff0c;就请不要吝啬自己手中的三连哟&#xff0c;万分感谢&#xff…

# Redis 入门到精通(七)-- redis 删除策略

Redis 入门到精通&#xff08;七&#xff09;-- redis 删除策略 一、redis 删除策略–过期数据的概念 1、Redis 中的数据特征 Redis 是一种内存级数据库&#xff0c;所有数据均存放在内存中&#xff0c;内存中的数据可以通过TTL指令获取其状态。 XX &#xff1a;具有时效性…

Android Studio引入ndk编译的so库, 通过jni给Java程序使用

前言 工作要求将一个C老项目的函数用ndk打包成库给安卓同事的java程序调用。 这个任务我debuff拉满&#xff1a; 自己之前从来没接触过安卓开发&#xff0c;问了老板为什么不让安卓开发来干&#xff0c;老板说安卓开发不懂c&#xff0c;公司就我一个是懂c的。。。项目开发年…

【STM32嵌入式系统设计与开发---拓展】——1_10矩阵按键

这里写目录标题 1、矩阵按键2、代码片段分析 1、矩阵按键 通过将4x4矩阵按键的每一行依次设为低电平&#xff0c;同时保持其它行为高电平&#xff0c;然后读取所有列的电平状态&#xff0c;可以检测到哪个按键被按下。如果某列变为低电平&#xff0c;说明对应行和列的按键被按下…

day2 单机并发缓存

文章目录 1 sync.Mutex2 支持并发读写3 主体结构 Group3.1 回调 Getter3.2 Group 的定义3.3 Group 的 Get 方法 4 测试 本文代码地址&#xff1a; https://gitee.com/lymgoforIT/gee-cache/tree/master/day2-single-node 本文是7天用Go从零实现分布式缓存GeeCache的第二篇。 …

go 实现websocket以及详细设计流程过程,确保通俗易懂

websocket简介&#xff1a; WebSocket 是一种网络传输协议&#xff0c;可在单个 TCP 连接上进行全双工通信&#xff0c;位于 OSI 模型的应用层。WebSocket 协议在 2011 年由 IETF 标准化为 RFC 6455&#xff0c;后由 RFC 7936 补充规范。 WebSocket 使得客户端和服务器之间的数…

昇思学习打卡-21-生成式/Diffusion扩散模型

文章目录 Diffusion扩散模型介绍模型推理结果 Diffusion扩散模型介绍 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;除了本文介绍的离散时间视角外&#xff0c;还有连续时间视角、概率分布转换视角、马尔可夫链视角、能量函数视角、数据增强…