UDP网口(1)概述

文章目录
- 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论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。
相关文章:
UDP网口(1)概述
文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例,介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…...
Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级
进程基本概念 课本概念:在编程或软件工程的上下文中,进程通常被视为正在执行的程序的实例。当你启动一个应用程序时,操作系统会为这个程序创建一个进程。每个进程都有自己的独立内存空间,可以运行自己的指令序列,并可能…...
Gradle依赖报告:项目依赖树的X光机
Gradle依赖报告:项目依赖树的X光机 在复杂的软件项目中,依赖管理是确保应用正常构建和运行的关键。Gradle作为一个强大的构建工具,提供了依赖报告功能,帮助开发者分析和理解项目的依赖树。本文将详细介绍如何在Gradle中使用依赖报…...
开源XDR-SIEM一体化平台 Wazuh (1)基础架构
简介 Wazuh平台提供了XDR和SIEM功能,保护云、容器和服务器工作负载。这些功能包括日志数据分析、入侵和恶意软件检测、文件完整性监控、配置评估、漏洞检测以及对法规遵从性的支持。详细信息可以参考Wazuh - Open Source XDR. Open Source SIEM.官方网站 Wazuh解决…...
从零开始:构建基于深度学习的实时跌倒检测系统(UI界面+YOLO代码+数据集)
注意看文末的结局与声明 一、引言 1. 项目背景与动机 在老年人和高危职业环境中,跌倒是一种常见的事故,可能导致严重的伤害甚至致命。实时跌倒检测系统可以及时发现并报警,提供紧急救助。通过深度学习技术,可以提高跌倒检测的准…...
【策略模式在项目中的实际应用】
业务场景 最最近项目中有这样的一个业务场景: 用户下单->管理员审核->配送员接单->配送中->送达–>签收->完成 整个业务以这种流程的形式存在,每个流程状态的业务不一样,考虑到多种状态如果直接写一个接口肯定会嵌套太多…...
昇思25天学习打卡营第14天|计算机视觉
昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…...
将json数组格式转成数组
start cmd [ 27 01 f7 01 24 38 02 b7 42 6e ee 2f 69 46 72 21 74 44 c4 22 7a 92 d8 6a de 66 61 b1 1e 2f de ee 5c 31 57 db df 01 31 2d c9 01 01 c0 FB ] set_ulpk {“jsonrpc”:“2.0”,“type”:2,“id”:0,“method”:“method”,“message”:{“VALUE”:[56,2,183,66…...
接口测试之测试原则、测试用例、测试流程详解
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、接口的介绍 软件测试中,常说的接口有两种:图形用户接口(GUI,人与程序的接口)、应用程序编程接口&…...
证书上的服务器名错误解决方法
方法 win r ,输入mmc 点击文件——>添加/删除管理单元 找到证书——> 添加 根据自己的存放选择存放位置 点击控制台根节点——> 受信任的根证书颁发机构——>导入 若还出现问题,则参考https://blog.csdn.net/mm120138687/article/details/…...
前端:上传2进制图片
1、let formData new FormData(); 2、添加要传的字段:formData.append("avatarfile", data); (key,value) 3、上传文件 function uploadImg() {// 1定义FormDatalet formData new FormData();// 2添加字段formData.append("…...
web前端 React 框架面试200题(三)
面试题 65. 在使用 React Router时,如何获取当前页面的路由或浏览器中地址栏中的地址? 参考回答: 在当前组件的 props中,包含 location属性对象,包含当前页面路由地址信息,在 match中存储当前路由的参数等…...
交流负载箱:电力系统的节能利器
交流负载箱是模拟电网中实际负载的装置,它能够精确地模拟各种电器设备的耗电情况,为电力系统的节能提供了重要的工具。在电力系统中,交流负载箱的应用非常广泛,它可以用于电力系统的设计、运行和维护,以及电力设备的测…...
【思科】链路聚合实验配置和背景
【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…...
使用 vue-element-plus-admin 框架遇到的问题记录
项目打包遇到的问题: 打包语句:pnpm run build:pro 报错信息: Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…...
从零开始手写STL库:List
从零开始手写STL库–List部分 Github链接:miniSTL 文章目录 从零开始手写STL库–List部分List是什么?List需要包含什么函数1)基础成员函数2)核心功能3)其他功能 基础成员函数的编写核心功能的编写其他功能编写总结 List是什么&am…...
蒙特卡洛采样
目录 蒙特卡洛采样的计算逻辑计算步骤:1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计期望值或积分值6. 计算误差具体示例:1. 定义问题2. 确定采样范围3. 生成随机样本点4. 计算函数值5. 估计积分值6. 计算误差总结蒙特卡洛采样是一种通过随机生成样本点来…...
Apache虚拟主机VirtualHost配置项详解
在Apache中,VirtualHost容器用于定义一个虚拟主机的配置,它允许在单一的物理服务器上托管多个不同的网站,每个网站可以有自己的域名、文档根目录、错误日志等。VirtualHost内的配置项非常灵活,可以包含从基本的网站信息到高级的URL重写和安全设置。 以下是一些常见的Virtu…...
OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介
OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介 一、引言 在人工智能领域,OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步,OpenAI推出了多个版本的GPT模型,包括视觉增强的GPT-4V(GPT-4 with Vision&…...
从人工巡检到智能防控:智慧油气田安全生产的新视角
一、背景需求 随着科技的飞速发展,视频监控技术已成为各行各业保障安全生产、提升管理效率的重要手段。特别是在油气田这一特殊领域,由于其工作环境复杂、安全风险高,传统的监控方式已难以满足实际需求。因此,基于视频监控AI智能…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
