基于FPGA的UDP 通信(二)

news2025/1/13 17:28:34

引言

前文链接:基于FPGA的UDP 通信(一)

本文继续介绍与以太网数据协议相关的内容。


以太网帧协议

IEEE802.3标准规定了,以太网数据传输的格式:

字段解释:

字段名称

字段长度/(字节)

含义

前导码

7

用于数据帧同步;发送7个字节的 8'h55

帧开始符( SFD)

1

标明下一个字节为目的 MAC 字段;固定为10101011

目的 MAC 地址

6

指明帧的接受者

源 MAC 地址

6

指明帧的发送者

长度 / 类型

2

当这两个字节的值小于 1518 时,那么它就代表其后

数据字段的长度;如果这两个字节的值大于 1518

则表示该以太网帧中的数据属于哪个上层协议(例

如 0x800 ,代表 IP 数据包; 0x806 ,代表 ARP 数据包等。

IP数据报

46~1500

高层的数据,通常为 3 层协议数据单元。对于 TCP/IP是 IP 数据包。

帧校验序列(FCS)

4

对接收网卡提供判断是否传输错误的一种方法,如

果发现错误,丢弃此帧。

对MAC地址的说明:

将这里的6 字节目的地址按照下面的格式来书写,如:00-01-02-03-04-05。这6个字节在以太网中是按照从左到右先发该字段的高字节后发字段的低字节)的顺序发送的,同时对每个字节来说,最先发送的是最低位bit0,最后是最高位bit7

在以太网帧中,目的MAC 地址可以分为三类:单播地址、多播地址和广播地址。单播地址通常与一个具体网卡的 MAC 地址相对应,它要求第一个字节的 bit0 (即最先发出去的位)必须是 0 ;多播地址则要求第一个字节的 bit0 为 1 ,这样,在网络中多播地址不会与任何网卡的 MAC 相同,多播数据可以被很多个网卡同时接收;广播地址的所有 48 位全为 1(即 FF FF FF FF FF FF ),同一局域网中的所有网卡可以接收广播数据包。

帧间距长度为12字节=96bit:

UDP协议

UDP是 User Datagram Protocol 的简称 中文名是用户数据报协议,是 OSI Open System Interconnection ,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务, IETF RFC 768 是 UDP 的正式规范。 UDP 处于 IP 协议的上一层 在IP 报文的协议号是 17 即 0x11 。 UDP 存在 不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户服务器模式的网络应用都需要使用 UDP 协议。 UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。

与所熟知的TCP(传输控制协议)协议一样,UDP 协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP 和TCP 都属于传输层协议。UDP 协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

IP数据格式

IP 是TCP/IP 协议族中最核心的协议,所有的TCP、UDP、ICMP、IGMP 数据都以IP 数据报的格式传输。IP 仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,然后发送ICMP 消息给信源端。

IP 数据报的格式如下,IP 数据报的长度/类型段的数值为0x0800,数据和填充段包括IP 头部数据和IP 数据两个部分。

IP首部字段定义

IP 报头的最小长度为 20 字节,上图中每个字段的含义如下:

1) 版本(version)

占 4 位,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4(4'b0100),即 IPv4。

2) 首部长度(网际报头长度IHL)占 4 位,可表示的最大十进制数值是 15。这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。

数据部分永远在 4 字节的整数倍开始,这样在实现 IP 协议时较为方便。首部长度限制为 60 字节的缺点是,长度有时可能不够用,之所以限制长度为 60 字节,是希望用户尽量减少开销。最常用的首部长度就是 20 字节(即首部长度为 0101),这时不使用任何选项。

3) 区分服务(tos)

也被称为服务类型,占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998 年 IETF 把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。

4) 总长度(totlen)

首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。

5) 标识(identification)

用来标识数据报,占 16 位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。

6) 标志(flag)

占 3 位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。

7) 片偏移(offsetfrag)

占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。

8) 生存时间(TTL)

表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。

9) 协议

表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。

例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。

10) 首部检验和(checksum)

用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。

11) 源地址

表示数据报的源 IP 地址,占 32 位。

12) 目的地址

表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。

13) 可选字段

该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。

14) 填充

由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。

15) 数据部分

表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。

IP首部校验和计算

举例:

UDP数据格式

UDP协议位于 OSI 七层模型中的传输层。数据结构:

UDP 报文中每个字段的含义如下:

源端口:这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。

目的端口:接收端计算机上 UDP 软件使用的端口,占据 16 位。

长度:该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。

校验值:该字段占据 16 位,可以检验数据在传输过程中是否被损坏。16位UDP校验和。UDP计算校验和的方法和计算IP数据报首部校验和的方法相似,但不同的是IP数据报的校验和只检验IP数据报的首部,而UDP校验和包含三个部分:UDP伪首部,UDP首部和UDP的数据部分。伪首部的数据是从IP数据报头和UDP数据报头获取的,包括源IP地址,目的IP地址,协议类型和UDP长度,其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。在大多数使用场景中接收端并不检测UDP校验和,因此这里不做过多介绍。

总体数据格式:

TCP/UDP区别:

参考说明及致谢

【1】IP数据报格式详解

【2】正点原子FPGA实战篇之以太网

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

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

相关文章

【MyBatis】第二篇:核心配置文件常用标签

前提 Mbatis的配置文件中的顺序如下: MyBatis核心配置文件中的标签必须安装指定的顺序配置。 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?…

SweetAlert让消息弹出窗口更加具有个性化!

SweetAlertSweetAlert是指可对JavaScript标准功能alert()和confirm()进行个性化定制的库。SweetAlert的要点官网上有很多示例,看了这些基本上就OK了。但是,在kintone上使用时,【弹出消息后更新页面】这个处理只参照示例来写的话,一…

微信小程序分包

1.什么是分包? 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 2.分包的好处对小程序进行分包的好处主要有以下两点: 可以优化小程序首次启动的下载时间在多…

Elasticsearch 核心技术(四):索引管理、映射管理、文档管理(REST API)

❤️ 个人主页:水滴技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 🌸 订阅专栏:大数据核心技术从入门到精通 文章目录一、索引管理1. 创建索引创建一个索引索引设置映射字段别名2. 获取索引3. 删除索…

阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]

阿拉伯数转中文与英文前言一、阿拉伯数字转换1、阿拉伯数字转中文a、案例b、解决方案2、阿拉伯数转英文a、案例b、解决方案总结参考文献前言 如果思考算法的解法方案是一种模拟,那么这一般不是个好的解决方案。对于一个复杂的问题,挖掘其中的规律&#…

制造业管理系统如何帮助企业快速应对品质异常问题?

在企业生产制造过程中,成品发生品质异常问题是不可避免的。当成品出现问题,为了有效防范批量品质事故,品管需要快速判断可能是哪个材料引起的,需要知道这批成品是谁做的,什么时候做的,提供材料的分别是哪个…

MySQL基础篇语句--DDL语句

SQL简介 当面对一个陌生的数据库时,通常需要一种方式与它交互,以完成用户所需要的各种工作,这个时候,就要用到SQL语言了。 SQL是Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由…

传统推荐模型(一)协同过滤算法_UserCF和ItemCF

传统推荐模型(一)协同过滤算法_UserCF 1、UserCF 协同过滤就是协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。 物品1物品2物品3物品4物品5用户131233用户243435用户333154用户41552…

OneNote(或印象笔记)迁移到Joplin的方法

2023年1月10日实操记录简介背景是必须卸载OneNote,所以要迁移笔记。告别了用了23年的Outlook ,和10年左右的OneNote,小伤感,自此一别 就不能用练就的VBA技能在Excel和Access中处理数据了。。。基本前提Joplin支持.enex格式文件的导…

总结述职报告撰写方法,报告目的、对象、内容、技巧等

导语 又到年末时,述职报告再一次席卷而来。这篇文章将带来干货满满的述职报告撰写方法,包括述职目的、对象、内容、技巧等多个方面。 一、述职目的 有多少人认为,述职只是走个形式,走个过场的? 如果你这样认为&#x…

2023济南制药机械展|中国(济南)国际制药机械与包装技术展览会

2023中国(济南)国际制药机械与包装技术展览会将于2023年3月30-4月1日在山东国际会展中心(济南市槐荫区日照路1号)同期举办:2023第11届国际生物发酵展2023国际生化仪器与实验室装备展2023国际生物技术与生物制药展支持单…

以太网链路聚合与交换机堆叠、集群

网络的可靠性 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力网络的可靠性可以从单板、设备、链路多个层面实现 一般重要的核心设备都有一定的冗余 s12700E-8机框正面结构 框式交换机由机框、电源模块、风扇模块、主控板、交换网板&#xff…

CSS入门六、常用技巧

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

人工智能-linux高级操作命令

目录1、 重定向命令2、查看文件内容命令3、链接命令3.1 软链接4、查找文件内容命令5、查找文件命令6、压缩和解压缩文件7、文件权限命名8、获取管理员权限的相关命令9、远程登陆、远程拷贝10、软件安装与卸载11、vim介绍1、 重定向命令 将目录下的文件名全部写入新文件 touch …

场景编程集锦 - BMI指数与健身达人

1. 场景描述 BMI指数(身体质量指数,英文Body Mass Index)是用体重公斤数除以身高米数的平方得出的数字,是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准。“身体质量指数”这个概念,是由19世纪中期的比利时…

马蹄集 宽度与对齐

宽度与对齐 难度:白银 时间限制:1秒巴占用内存:64M 输出455、-123、987654,宽度为5,分别左对齐和右对齐 格式 输入格式:无 输出格式:输出为整型,空格分隔。每个数的输出占一行 #inc…

[34]. 在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置题目算法设计:二分查找题目 算法设计:二分查找 进行两次二分查找(定制版本),第一次先查找【第一个大于等于target的数】,第二次再查找【第一个大于target的数】…

Mac安装python3并配置环境变量

文章目录homebrew 安装 python3配置 python3 环境变量homebrew 安装 python3 可以用 homebrew 安装,也可以官网下载安装,我这里选择使用 homebrew 安装,没有装 homebrew 的小伙伴请自行百度 brew install python3我们执行下 python3 发现可…

Centos7安装高版本zshzim框架安装powerlevel10k

1. 安装高版本zsh 1.1 卸载低版本zsh sudo yum remove zsh -y1.2 下载源码 源码:https://zsh.sourceforge.io/Arc/source.html # 下载 wget https://jaist.dl.sourceforge.net/project/zsh/zsh/5.9/ # 解压 $ tar xvf zsh-5.9.tar.xz1.3 编译安装 yum install …

新应用——养老院管理应用,信息化的多功能管理应用

养老院管理系统专门为医养结合的养老机构量身打造的信息化管理系统,还适用于社区医院,包含诊断、病历、财务、物资、照护记录、处方等功能点。此应用分为经营管理、长者管理、物资库存、财会综合等四个大模块,全方面打造适用于养老院&#xf…