万兆以太网MAC设计(8)ICMP协议详解以及ICMP层模块设计

news2024/10/7 6:40:06

文章目录

  • 前言:ICMP协议详解
  • 一、ICMP_RX模块
  • 二、ICMP_TX模块
  • 三、仿真
  • 总结

前言:ICMP协议详解

在这里插入图片描述

ICMP (Internet Control Message Protocol) 协议被设计用来向 IP 源端报告差错及其它相关信息, IP 协议本身只设置有 Checksum 机制来保证数据的正确性, 它本身提供不可靠的服务, ICMP 协议可以用来当发送差错时向源端报告相应的问题, 可以一定程度上提高 IP Datagram 交付的可靠性, 其协议的标准文档为 1981 年 9 月发布的 RFC 792, 本文讨论 ICMP 协议的设计,ICMP 不是 IP 协议之上的协议, ICMP 的 PDU 被封装在 IP Datagram 的 Payload 部分, 和 IP Datagram 一同传送。

其各字段的语义如下:

Type, 长度为 8 比特, ICMP 报文的类型, ICMP 报文的类型可以分为两类, 一类用来报告错误, 一类用来询问, 其中用于报告差错的类型值有 3: 终点不可达, 11: 超时, 12: 报文参数错误, 5: 重定向, 询问类的类型值有 8: 请求回显消息 (for echo message), 0: 回显应答消息 (for echo reply message), 13: 请求时间戳消息 (for timestamp message), 14: 时间戳应答消息 (for timestamp reply message)

Code, 长度为 8 比特, Type 字段指示问题的类型, Code 进一步指示在该类型的更具体的问题类型, 以 Type = 3 终点不可达为例, 可以有网络不可达 (net unreachable), 主机不可达 (host unreachable), 协议不可达 (host unreachable), 端口不可达 (port unreachable) 等更具体的错误信息

Checksum, 长度为 16 比特, ICMP 校验和

unused, 长度为 32 比特, 保留字段,大部分用于标识符序号

Internet Header + 64 bits of Original Data Datagram, 长度为 32 比特, 该部分为 ICMP 报文的数据部分, 所有的 ICMP 报文都是由要报告的 IP Datagram 的 Header 加上 8 字节的 IP Payload 构成, 8 字节的 Payload 使得源端可以从中获取诸如 TCP / UDP 端口等信息

ICMP 的一个典型应用是 PING 命令, PING 命令实质是发送 ICMP 询问报文, 如果网络是连通的, 源端可以顺利收到接收方的回复, 并且可以用来测算时延

其次, ICMP 的另一个非常有用的应用是 traceroute, traceroute 特意构造一串不可达的 IP Datagram, IP Datagram 里包含使用非法端口的 UDP Packet, 在 IP Datagram 中依次将 TTL 设置为 1, 2, …, 由于 IP Datagram 每经过一个路由器, TTL 需要减去一, 当 TTL 为 0 时, 路由器需要丢弃 IP Datagram, 并向源端发送 ICMP 差错报文, 根据这一连串的 ICMP 差错通知, 可以跟踪链路上经过的路由器
在这里插入图片描述

一、ICMP_RX模块

模块接口:

ICMP_RX(
    input           i_clk               ,
    input           i_rst               ,

    input  [63:0]   s_axis_ip_data      ,
    input  [55:0]   s_axis_ip_user      ,//用户自定义{16'dlen,3'bflag,8'dtype,13'doffset,16'dID}
    input  [7 :0]   s_axis_ip_keep      ,
    input           s_axis_ip_last      ,
    input           s_axis_ip_valid     ,

    output [15:0]   o_Identifier        ,
    output [15:0]   o_Sequence          ,
    output          o_trigger           
);

该模块用于接收来自IP层的数据,判断是否为ICMP数据,然后进行相应的处理。主要处理工作为:识别该数据包是否为ICMP的ping请求包,如果是,则产生一个o_trigger信号通知ICMP_TX模块产生一个ping回复报文,并且解析接收ICMP报文的标识o_Identifier和序号o_Sequence,然后交由ICMP_TX模块去产生相应的回复报文。

二、ICMP_TX模块

模块接口:

module ICMP_TX(
    input           i_clk               ,
    input           i_rst               ,

    output [63:0]   m_axis_ip_data      ,
    output [55:0]   m_axis_ip_user      ,//用户自定义{16'dlen,3'bflag,8'dtype,13'doffset,16'dID}
    output [7 :0]   m_axis_ip_keep      ,
    output          m_axis_ip_last      ,
    output          m_axis_ip_valid     ,
    input           m_axis_ip_ready     ,

    input  [15:0]   i_Identifier        ,
    input  [15:0]   i_Sequence          ,
    input           i_trigger           
);

该模块则是在ICMP_RX模块接收到一个ping请求的ICMP报文的时候产生一个相应的ping回复报文,过程非常简单。由于是在FPGA上实现,暂时不支持主动ping的功能。

三、仿真

仿真设计:产生一个ping请求报文发送到ICMP_RX模块,于是ICMP_RX模块会产生一个回复触发信号o_trigger,ICMP_TX模块会产生一个回复ping报文。

接收端:接收到了ping请求报文,并且拉高了o_trigger信号

在这里插入图片描述

发送端:接收到了o_trigger信号并产生一个ping回复报文。

在这里插入图片描述

总结

完成工程代码参考:https://github.com/shun6-6/Tri_Eth_UDP_pro_stack

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

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

相关文章

个人搭建alist网盘的经验记录备忘

1、搭建宝塔LINUX面板,安装Docker 2、添加仓库 3、从镜像拉取xhofe/alist:latest 4、添加容器 5、新建一个网站,别忘记申请个SSL证书,重要的是反向代理 6、新建个mysql数据库 7、修改alist数据库的链接地址,方便自己备份&a…

机器学习和深度学习 -- 李宏毅(笔记与个人理解)Day 23

Day 23 Self - Atention 变形 关于很多个former 的故事 痛点: 在于做出注意力矩阵之后的运算惊人 由于self - attention 一般都是在big model 的一部分,所以,一般不会对模型造成决定性的影响, 只有当model 的输入较长的时候&am…

第一讲 - Java入门

第一讲 - Java入门 文章目录 第一讲 - Java入门1. 人机交互1.1 什么是cmd?1.2 如何打开CMD窗口?1.3 常用CMD命令1.4 CMD练习1.5 环境变量 2. Java概述1.1 Java是什么?1.2下载和安装1.2.1 下载1.2.2 安装1.2.3 JDK的安装目录介绍 1.3 HelloWor…

python——飞机大战游戏(下载模块,知识点,图片)

飞机大战——准备工作 这篇文章我们只有关于pygame模块的下载,和一些知识点,还有飞机大战我们需要用到的图片。下一篇文章我们进行代码的详细解析。 1.1安装pygame模块 方法一: 在pycharm中打开命令行下载,输入pip install py…

Axure设计美观友好的后台框架页

使用Axure设计后台框架页 优点介绍: **1、使用中继器灵活配置菜单项; 2、二级菜单面板跟随一级菜单位置显示; 3、菜单链接打开后,联动添加tab标签; 4、标签页与iframe内容联动,可关闭; 5、左侧…

linux 定位进程文件路径

有时候用top 打开任务管理器时知道某个任务的进程的存在&#xff0c;但不知道是哪个文件&#xff0c;只需两条指令只可定位进程的可执行文件路径 使用 ls -l /proc/<PID>/cwd 命令来查找该进程的当前工作目录。使用 cat /proc/<PID>/cmdline 命令来查看该进程的命…

富集分析不求人,零代码可视化GO/KEGG分析结果

01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://www.igenebook.com&#xff1b;点击菜单栏最右侧“云平台”按钮。 弹出云平台界面&#xff08;下图&#xff09;&#xff0c;输入账号、密码和验证码方可登录&#xff1b;进入云平台&#xf…

ThingsBoard服务端使用RPC通过网关给设备发送消息

一、概述 1、发送服务器端网关RPC 二、案例&#xff1a; 1、建立设备与网关之间的通讯 2、查看设备和网关是否在线状态啊 3、通过 仪表盘&#xff0c;创建设备A的模拟RPC调用的窗口链接 4、在客户端的网关设备上订阅RPC网关的主题信息 5、通过服务端的窗口&#xff0c;发…

JavaEE >> Spring(2)

前面已经介绍了 Spring 的基本使用以及创建&#xff0c;本文将介绍使用注解的方式实现对 Spring 更简单的存储对象和读取对象. 将对象存储到 Spring 中 创建 Spring 项目 前面已经做过详细步骤&#xff0c;此处不再赘述. 链接在此 Spring 基本使用及创建 pom.xml 和 Spring…

机器学习模型效果不好及其解决办法

当训练出来的机器学习模型效果不佳时&#xff0c;可能涉及多个方面的原因。为了改善模型的效果&#xff0c;需要系统地检查和分析问题的根源&#xff0c;并采取相应的措施进行优化。 一、数据问题 数据质量 检查数据是否干净、完整&#xff0c;是否存在噪声、异常值或缺失值。…

【后端】python2和python3的安装与配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、python是什么二、python环境的安装与配置Python 2的安装与配置Python 3的安装与配置注意事项 三、总结 前言 随着开发语言及人工智能工具的普及&#xff0…

C++ //练习 13.17 分别编写前三题中所描述的numbered和f,验证你是否正确预测了输出结果。

C Primer&#xff08;第5版&#xff09; 练习 13.17 练习 13.17 分别编写前三题中所描述的numbered和f&#xff0c;验证你是否正确预测了输出结果。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*************************…

git提交注释规范插件

1、前言 为什么要注重代码提交规范&#xff1f; 在团队协作开发时&#xff0c;每个人提交代码时都会写 commit message。 每个人都有自己的书写风格&#xff0c;翻看我们组的git log, 可以说是五花八门&#xff0c;十分不利于阅读和维护。 一般项目开发都是多分支共存&#x…

浅涉ROS世界中的坐标系及其他

声明&#xff1a;文中图片素材均采用了其他博主文章&#xff08;文末参考来源&#xff09;&#xff0c;如有侵权或不妥&#xff08;确有不妥和不安&#xff0c;奈何苦于佳图难觅&#xff09;&#xff0c;还望告知&#xff0c;立即删除&#xff01; 坐标系统 ROS中的…

影视后期特效合成:DaVinci Fusion Studio19 激活版

DaVinci Fusion Studio是一款功能强大的影视后期特效合成软件&#xff0c;可广泛应用于视觉效果、广播电视设计、动态图形设计、3D动画设计等领域。 如综合的绘图、动态掩蔽、遮片、图层叠加、字幕等工具&#xff0c;结合高效的粒子生成系统&#xff0c;通过它可以创建各种精细…

51单片机入门_江协科技_35~36_OB记录的自学笔记_AD与DA转换(XPT2046)

35. AD_DA 35.1. AD/DA介绍 •AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号 •DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

【Word中如何对比文档修改前后的不同之处】

1、准备两个word文档&#xff08;一个是修改前文档&#xff0c;一个是修改后文档&#xff09; 2、双击打开两个文档&#xff0c;点击【审阅】-【比较】-选择修改前的文档和修改后的文档-【确定】&#xff0c;进入文档比较界面。 3、在比较结果文档中&#xff0c;可以查看修改前…

杰出贡献!51Sim助力ASAM新版本智驾标准发布

日前&#xff0c;ASAM&#xff08;德国自动化及测量系统标准协会&#xff09;正式发布了自动驾驶仿真场景标准OpenSCENARIO XML V1.3.0和OpenSCENARIO DSL V2.1.0&#xff0c;这两项标准是自OpenSCENARIO标准版本V1及V2拆分为两个独立标准以来首次正式发布。 作为ASAM会员单位…

stripe.js踩坑日记

stripe.js踩坑日记 先附上代码【选择支付方式并唤起对应支付后重定向到支付结果页面】 先安装依赖包 npm install stripe/stripe-js代码【vue3语法】 <template><div class"stripe-pay-ment-box"><div id"payment-element"></div…

shopify二次开发在首页调用最新的博客文章

在section分区里面新建一个 article.json {"type": "header","name": "Group name","sections": {"blog-posts": {"type": "blog-posts","disabled": true,"settings":…