UDP千兆以太网FPGA_verilog实现(四、代码前期准备-UDP和IP协议构建)
发布日期:2021-05-15 10:42:40
浏览次数:24
分类:技术文章
本文共 1839 字,大约阅读时间需要 6 分钟。
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协议使用报头中的校验值来保证数据的安全。校验值首先通过特殊的算法计算得出,在传递到了接收方之后,还需要再重新计算。因此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,17UDPIP报头校验和:是根据IP首部计算的校验和,不对首部后面的数据进行计算,其计算方法为:
在发送数据时候,为了计算IP的校验和,应该按照如下步骤: 1.将校验和字段置0,然后将IP包头按照16bit分为多个单元,如包头长度不是16bit的倍数,则用0bit填充到16bit的倍数。 2.对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段 例如,我们使用IP协议发送一个数据长度为30个字节的数据包,发送端IP为192.168.0.2
,接收端IP为192.168.0.3
则IP包头如下所示: 转载地址:https://blog.csdn.net/ciscomonkey/article/details/84107453 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月08日 15时16分35秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java nio 线程_基于事件的 NIO 多线程服务器
2019-04-21
java 字符串 大括号_字符串解析其中的嵌套大括号
2019-04-21
java内存排序_Java内存模型之重排序
2019-04-21
java 打包边下载_Java实现多文件边压缩边下载,
2019-04-21
java代码移植_移植Java代码到C++的技巧二
2019-04-21
java 下载微信图片_java 微信服务器下载图片到自己服务器
2019-04-21
java mockito respose_java-使用Mockito模拟内部方法
2019-04-21
java sqls.add()_java中向sqlserver执行sql语句问题
2019-04-21
mysql 8.0 直方图_MySQL 8.0 中统计信息直方图的尝试
2019-04-21
java map 结构_Java数据结构总结之Map
2019-04-21
java单词大全_编程常用英语单词大全
2019-04-21
java课设 简单九宫格_[Java教程]简易版九宫格相加数值相等
2019-04-21
Java先拿锁_Java并发包下锁学习第一篇:介绍及学习安排
2019-04-21
php mysql 并发查询_PHP并发查询MySQL
2019-04-21
python中row_values_python rowvalues
2019-04-21
python中textinput_如何使用QML在Python中使用TextInput?
2019-04-21