热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UDP千兆以太网FPGA_verilog实现(四、代码前期准备UDP和IP协议构建)

UDP:userDatagramprotocol用户数据报协议无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC76

UDP:user Datagram protocol 用户数据报协议
无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17(0x11)
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含包头信息,剩余字节则用来包含具体的传输数据。
UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0------65535

熟知端口号(well-known prot number)

数值为0-1023,这些数值可以在网址www.iana.rog查到,IANA把这些端口号指派给TCP/IP最重要的一些应用程序,让所有的用户都知道。
在这里插入图片描述
登记端口号

数值在1024-49151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须在IANA按照规定的手续登记,防止重复。

客户端使用的端口号

数值在49152-65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫短暂端口号。这类端口号是留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程使用的端口号,因此可以把数据发送个客户进程。通信结束后,刚才已使用过的客户端端口号不复存在,这个端口号就可以供其他客户进程使用。

在这里插入图片描述
----UDP的长度是指包括包头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。理论上,包含报头在内的数据报的最大长度为65535字节。

---- UDP协议使用报头中的校验值来保证数据的安全。校验值首先通过特殊的算法计算得出,在传递到了接收方之后,还需要再重新计算。因此UDP协议可以检测是否出错。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,知识简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。
‘’’’’'由于每次需要发送的数据都不相同,而且校验和内容在发送数据段之前就需要计算出来,不像MAC层是在所有数据都发送完成之后才发送CRC校验值,因此在UDP组包时,校验值的计算是一个不太好处理的地方,在UDP要求不是很严格的地方校验和其实是可以忽略的,因此,在使用verilog实现,为了提升效率并节约FPGA资源,将校验和字段忽略。这样一来,UDP数据包的组包就百年的非常简单了。
’ -----------------------------------------------------------------------------------------------------------------------------------------------------‘
IP协议的介绍
在这里插入图片描述
IP首部:20个固定字节+可选字段
每一行32位bit
4字节的32bit值按照以下次序来传输,首先0-7bit,其次8-15比特,然后16-23bit,最后是24-31bit。(这种传输次序称之为big—endian)
在这里插入图片描述
首部长度,说明了首部必须为4的倍数,最大值15(说明IP首部长度最大为60bit)。当IP首部长度为20时(无可选字段),该值为5.(5*4=20)
总长度指整个IP数据报的长度,包括首部和数据部分,16bit,最长可达65535

服务类型:指示了报文的优先权等,默认全部0
片标识:是否属于同一个数据段,IP报文的分片ID。全0即可
片偏移:全0即可
生存周期:TTL,典型值32or64
上层协议类型:指封包所使用的网络协议类型,常用协议号:00IP,01ICMP,06TCP,17UDP

IP报头校验和:是根据IP首部计算的校验和,不对首部后面的数据进行计算,其计算方法为:
在发送数据时候,为了计算IP的校验和,应该按照如下步骤:
1.将校验和字段置0,然后将IP包头按照16bit分为多个单元,如包头长度不是16bit的倍数,则用0bit填充到16bit的倍数。
2.对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段
例如,我们使用IP协议发送一个数据长度为30个字节的数据包,发送端IP为192.168.0.2,接收端IP为192.168.0.3 则IP包头如下所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


推荐阅读
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 首部|接口类型_OSI 7层模型 & TCP/IP协议首部封装格式解析
    首部|接口类型_OSI 7层模型 & TCP/IP协议首部封装格式解析 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上安装和配置 MySQL、Tomcat 和 JDK 的步骤。通过本文,您将了解如何顺利安装这些组件,并确保它们能够正常协同工作。 ... [详细]
  • 本文详细介绍了在Mac平台上安装和配置MySQL的步骤,包括下载安装包、卸载MySQL以及解决命令行中找不到mysql命令的问题。 ... [详细]
  • DNS服务一、概述1.全称:Domainnamesystem(域名系统)2.作用:1)正向解析: ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
author-avatar
手机用户2502939545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有