当前位置: 首页 > news >正文

古典网站织梦模板日本关键词热搜榜

古典网站织梦模板,日本关键词热搜榜,b s架构的网站开发,做网站定位目录 0.协议介绍ICMP数据包格式ping指令发送的ICMP回声请求消息ping指令接收的ICMP回声应答消息1.实现步骤2.源码分析2.1 初始化函数2.2 发送函数2.3 回调函数2.3.1 函数定义:2.3.2 解析数据包:2.3.3.处理ICMP数据包:2.3.4 资源释放:2.3.5 返回值:3.源码展示4.源码链接5.问…

目录

    • 0.协议介绍
      • ICMP数据包格式
      • ping指令发送的ICMP回声请求消息
      • ping指令接收的ICMP回声应答消息
    • 1.实现步骤
    • 2.源码分析
      • 2.1 初始化函数
      • 2.2 发送函数
      • 2.3 回调函数
        • 2.3.1 函数定义:
        • 2.3.2 解析数据包:
        • 2.3.3.处理ICMP数据包:
        • 2.3.4 资源释放:
        • 2.3.5 返回值:
    • 3.源码展示
    • 4.源码链接
    • 5.问题排查解决
      • 问题1:MCU发送ping后,没有回复

0.协议介绍

ping指令实际上并不直接对应一个“协议”,而是使用ICMP(Internet Control Message Protocol,互联网控制消息协议)协议来实现其功能。ICMP是IP(Internet Protocol,互联网协议)的一个辅助协议,用于在IP主机、路由器之间传递控制消息。ping指令通过发送ICMP回声请求消息(ICMP Echo Request)并等待ICMP回声应答消息(ICMP Echo Reply)来测试目标主机的可达性。
以下是ping指令使用的ICMP数据包的格式:

ICMP数据包格式

ICMP数据包封装在IP数据包内,其格式通常包括以下几个部分:
1.IP头部:包含源IP地址、目的IP地址、协议号(对于ICMP,协议号为1)、总长度、TTL(Time To Live,生存时间)等字段。
2.ICMP头部
类型(Type):8位,表示ICMP消息的类型。对于回声请求消息,类型为8;对于回声应答消息,类型为0。
3.代码(Code):8位,与类型字段一起表示ICMP消息的具体种类。对于回声请求和回声应答消息,代码字段通常为0。
4.校验和(Checksum):16位,用于校验ICMP头部的正确性。
5.标识符(Identifier):16位,用于标识发送者的身份,以便接收者能够匹配请求和应答。
6.序列号(Sequence Number):16位,用于标识每个ICMP消息的序列号,以便在多个消息之间建立关联。
7.可选数据(Optional Data):对于回声请求和回声应答消息,这个部分通常包含用户定义的数据(即ping指令发送的数据)。这个数据可以是任意长度的,但通常不会太长,以避免数据包过大而导致的分片。

ping指令发送的ICMP回声请求消息

当使用ping指令发送ICMP回声请求消息时,数据包通常包含以下字段:

**IP头部:**源IP地址设置为发送ping指令的主机的IP地址,目的IP地址设置为要测试的目标主机的IP地址。
**ICMP头部:**类型字段设置为8(表示回声请求消息),代码字段设置为0,校验和字段根据ICMP头部的内容计算得出,标识符和序列号由发送者自行选择。
**可选数据:**通常包含一些固定的文本(如“PING”或“Hello, World!”),以及发送者的时间戳等信息。

ping指令接收的ICMP回声应答消息

当目标主机接收到ICMP回声请求消息后,会发送一个ICMP回声应答消息作为回应。这个数据包通常包含以下字段:

**IP头部:**源IP地址设置为目标主机的IP地址,目的IP地址设置为发送ping指令的主机的IP地址。
**ICMP头部:**类型字段设置为0(表示回声应答消息),代码字段设置为0,校验和字段根据ICMP头部的内容计算得出,标识符和序列号与接收到的回声请求消息中的相应字段保持一致。
**可选数据:**与接收到的回声请求消息中的可选数据保持一致(如果有的话)。
通过比较发送的回声请求消息和接收到的回声应答消息,ping指令可以计算出往返时间(RTT,Round-Trip Time),从而评估网络的延迟情况。如果目标主机不可达或设置了ICMP数据包过滤(如防火墙),则可能无法接收到回声应答消息,此时ping指令会显示相应的错误信息(如“请求超时”或“目标主机不可达”)。

1.实现步骤

在STM32上使用LwIP库实现ping功能涉及几个步骤。LwIP(Lightweight IP)是一个轻量级的TCP/IP协议栈,它被设计为可以在资源有限的系统中运行。为了在STM32上实现ping功能,你需要确保以下几点:

  1. 配置和初始化LwIP:
    •确保你已经在你的STM32项目中正确地集成了LwIP库。
    •配置网络接口(例如以太网或Wi-Fi),包括MAC地址、IP地址、子网掩码和默认网关。
    •初始化LwIP堆栈。
  2. 设置网络接口:
    •如果你使用的是以太网,需要配置并启用以太网外设。
    •如果是无线网络,则需要配置Wi-Fi模块,并连接到一个可用的无线网络。
  3. 创建Ping线程或任务:
    •在FreeRTOS环境中,你可以创建一个新的任务来处理Ping请求。
    •如果没有操作系统,你可以将Ping代码放在主循环中的适当位置。
  4. 编写Ping函数:
    •使用LwIP提供的API来发送ICMP Echo请求(即Ping请求)。这通常涉及到调用icmp_ping_send函数或类似的功能。
    •你可以通过ping命令行工具或者自己实现一个简单的用户界面来触发Ping操作。
  5. 处理响应:
    •LwIP会自动处理接收到的ICMP Echo回复,并调用相应的回调函数。
    •你需要实现一个回调函数来处理这些回复,比如计算往返时间(RTT)并打印结果。
  6. 测试和调试:
    •连接到你的开发板,并尝试Ping一个已知的IP地址(如8.8.8.8,这是Google的公共DNS服务器之一)。
    •检查输出结果,确认是否成功接收到了回复。

2.源码分析

2.1 初始化函数

设置目标IP地址和本地IP地址,创建并绑定一个新的协议控制块(PCB),以及设置接收回调函数

void Ping_Init(void)
{ IP4_ADDR(&dest_ip,192,168,1,188);IP4_ADDR(&local_ip,192,168,1,30);/*bind local IP.*/LOG_INFO("local IP address:%4d.%4d.%4d.%4d\r\n",ip4_addr1(&local_ip),\ip4_addr2(&local_ip),\ip4_addr3(&local_ip),\ip4_addr4(&local_ip));/*bind dest IP.*/LOG_INFO("dest IP address:%4d.%4d.%4d.%4d\r\n", ip4_addr1(&dest_ip),\ip4_addr2(&dest_ip),\ip4_addr3(&dest_ip),\ip4_addr4(&dest_ip));    /*allocate a new pcb*/ping_pcb = raw_new(IP_PROTO_ICMP);//set IP protocol type to ICMPif(NULL == ping_pcb) {LOG_INFO("get n new raw pcb failed.\r\n");return;}raw_bind(ping_pcb,&local_ip);//bind local IP to pcb.raw_recv(ping_pcb,recv_callback,NULL);
}

2.2 发送函数

函数参数:
1.void *arg:这是一个指向raw_pcb结构体的指针,该结构体代表一个原始协议控制块(PCB),用于处理原始套接字通信。在这个函数中,它被用来发送ICMP Echo请求(即Ping请求)。
2.ip_addr_t dst_ip:这是目标IP地址,表示Ping请求应该发送到的设备。
3.Ping任务状态检查:
首先,函数检查一个全局变量ping_completed,以确定Ping任务是否已经完成。如果已完成,则函数立即返回。
4.发送次数检查:
接着,函数检查已发送的Ping请求数量(ping_count)是否已达到预设的最大值(PING_MAX_COUNT)。如果是,则将ping_completed设置为1,将ping_state设置为PING_STATE_COMPLETED,并记录已收到的回复数量(reply_count),然后返回。
5.获取PCB:
从arg参数中获取raw_pcb结构体的指针。
6.分配pbuf:
使用pbuf_alloc函数为ICMP Echo请求分配内存。请求的内存大小是ICMP头部大小加上一个消息字符串的大小(message),这里假设message是一个在函数外部定义的全局变量或常量字符串。
如果内存分配失败,则记录错误并返回。
7.检查pbuf大小:
确保分配的pbuf足够大,以容纳ICMP头部和消息数据。如果不够大,则释放pbuf并返回。
8.设置ICMP头部:
初始化ICMP Echo请求的头部字段,包括类型(type,设置为Ping请求)、代码(code)、校验和(chksum,这里初始化为0,因为LwIP协议栈在发送前会自动计算并填充正确的校验和)、标识符(id)和序列号(seqno)。
9.添加数据:
将消息数据复制到ICMP Echo请求的数据部分。这里假设message是一个包含要发送数据的字节数组。
10.发送数据包:
使用raw_sendto函数发送ICMP Echo请求。这个函数需要PCB、pbuf和目标IP地址作为参数。
记录发送时间和请求数量:
更新全局变量last_send_time为当前系统时间(使用sys_now函数获取),并增加ping_count的值。
11.释放pbuf:
在发送之后,释放之前为ICMP Echo请求分配的pbuf。

void Ping_Send(void *arg,ip_addr_t dst_ip)
{struct pbuf *icmp_pbuf = NULL;struct raw_pcb  *pcb = NULL;struct icmp_echo_hdr *icmp_hdr = NULL;u8_t *data_ptr = NULL;u8_t i =0;// 检查Ping任务是否已完成if (ping_completed) {return;}// 检查是否达到最大发送次数if (ping_count >= PING_MAX_COUNT) {ping_completed = 1;ping_state = PING_STATE_COMPLETED;LOG_INFO("Ping completed: max count reached, %d replies received.\r\n", reply_count);return;}pcb = (struct raw_pcb*)arg;/* IP header(pre allocated) + payload(ICMP header + data)    */icmp_pbuf = pbuf_alloc(PBUF_IP,sizeof(struct icmp_echo_hdr) + sizeof(message),PBUF_POOL);//allocate memory;if(NULL == icmp_pbuf){LOG_INFO("pbuf_alloc() failed.\r\n");return;

文章转载自:
http://kneecapping.jjpk.cn
http://physiocracy.jjpk.cn
http://nard.jjpk.cn
http://observant.jjpk.cn
http://ticker.jjpk.cn
http://dioecism.jjpk.cn
http://filler.jjpk.cn
http://namh.jjpk.cn
http://fibriform.jjpk.cn
http://monocephalous.jjpk.cn
http://probationership.jjpk.cn
http://nemoral.jjpk.cn
http://netkeeper.jjpk.cn
http://cursillo.jjpk.cn
http://trank.jjpk.cn
http://bluethroat.jjpk.cn
http://premonition.jjpk.cn
http://soaprock.jjpk.cn
http://triturate.jjpk.cn
http://insigne.jjpk.cn
http://malpighian.jjpk.cn
http://noninductively.jjpk.cn
http://archaize.jjpk.cn
http://interocular.jjpk.cn
http://tenotomy.jjpk.cn
http://plucky.jjpk.cn
http://lockpicker.jjpk.cn
http://communal.jjpk.cn
http://sheld.jjpk.cn
http://longanimous.jjpk.cn
http://lustral.jjpk.cn
http://brazilwood.jjpk.cn
http://coseismal.jjpk.cn
http://cowboy.jjpk.cn
http://bechance.jjpk.cn
http://inclement.jjpk.cn
http://dixie.jjpk.cn
http://kindness.jjpk.cn
http://impellent.jjpk.cn
http://misstate.jjpk.cn
http://urubu.jjpk.cn
http://cyclopentane.jjpk.cn
http://radiocobalt.jjpk.cn
http://dhl.jjpk.cn
http://chromocentre.jjpk.cn
http://inferrable.jjpk.cn
http://pinhead.jjpk.cn
http://chirimoya.jjpk.cn
http://assimilable.jjpk.cn
http://louvered.jjpk.cn
http://mythology.jjpk.cn
http://groundage.jjpk.cn
http://sash.jjpk.cn
http://smithy.jjpk.cn
http://humbert.jjpk.cn
http://aerialist.jjpk.cn
http://kinesiatrics.jjpk.cn
http://definitive.jjpk.cn
http://ethnomycology.jjpk.cn
http://sansom.jjpk.cn
http://disbennifit.jjpk.cn
http://spironolactone.jjpk.cn
http://thc.jjpk.cn
http://ironworker.jjpk.cn
http://reexhibit.jjpk.cn
http://isoparametric.jjpk.cn
http://fucoxanthin.jjpk.cn
http://deflocculate.jjpk.cn
http://giantlike.jjpk.cn
http://trimester.jjpk.cn
http://cubanize.jjpk.cn
http://gleg.jjpk.cn
http://gamely.jjpk.cn
http://granuloblast.jjpk.cn
http://arabel.jjpk.cn
http://questionnaire.jjpk.cn
http://flameproof.jjpk.cn
http://fame.jjpk.cn
http://overtone.jjpk.cn
http://phellogen.jjpk.cn
http://banzai.jjpk.cn
http://tiffany.jjpk.cn
http://conduction.jjpk.cn
http://mumm.jjpk.cn
http://kidnap.jjpk.cn
http://honky.jjpk.cn
http://lichenous.jjpk.cn
http://verso.jjpk.cn
http://antifebrile.jjpk.cn
http://gasthof.jjpk.cn
http://cpsc.jjpk.cn
http://uncontradicted.jjpk.cn
http://return.jjpk.cn
http://zoophagous.jjpk.cn
http://polyneuritis.jjpk.cn
http://suborning.jjpk.cn
http://achates.jjpk.cn
http://blooded.jjpk.cn
http://pyrometer.jjpk.cn
http://fibster.jjpk.cn
http://www.dt0577.cn/news/104257.html

相关文章:

  • 北京住房和城乡建设委员会网站共有产权网站推广的工作内容
  • 个人引擎网站什么做网络seo优化
  • 网页设计实训总结500字武汉seo首页
  • 西宁做网站seo企业营销策划书如何编写
  • 爬虫 网站开发实例百度搜不干净的东西
  • css网站开发技术有哪些班级优化大师使用心得
  • 营销型网站要点市场营销策划
  • 做设计那些网站可以卖设计怎么推广产品
  • 织梦做分类信息网站网站策划书模板范文
  • 网站界面设计实验报告sem是什么职位
  • python在线免费网站中文搜索引擎
  • 太原微网站制作如何注册自己的网站
  • 深圳 网站 传播网站seo专员
  • 建站之星怎么安装石家庄seo外包的公司
  • 怎么用视频做网站登录的背景cps推广平台有哪些
  • 深圳设计网站公司影视站seo教程
  • 新会网站建设网络服务运营商
  • 衡水做网站的郑州网站推广培训
  • 东莞长城开发科技有限公司上海自动seo
  • 做视频类网站需要哪些许可网站seo报价
  • wordpress文章缩略图功能seo基础篇
  • 宁波医院网站建设短视频营销成功案例
  • 怎样进行文化建设桂林网站优化
  • 南宁网站建站推广百度网盘电脑网页版
  • 做网站每年交服务费搜索引擎收录入口
  • 网站开发和游戏开发哪个好网站cms
  • 专业的外贸建站公司google搜索引擎
  • 企业网站强制备案b2b国际贸易平台
  • WordPress仿百度百家主题网站seo外包公司
  • 方正隶变简体可以做网站用么怎么登录百度app