十、W5100S/W5500+RP2040树莓派Pico<PING(ICMP)检测网络连通性>

2023-10-31 22:12

本文主要是介绍十、W5100S/W5500+RP2040树莓派Pico<PING(ICMP)检测网络连通性>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 前言
  • 2 协议简介
    • 2.1 什么是PING
    • 2.2 PING的优点
    • 2.3 PING的原理
    • 2.4 应用场景
  • 3 WIZnet以太网芯片
  • 4 PING网络设置示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 烧录验证
  • 5 注意事项
  • 6 相关链接

1 前言

   随着网络应用的日益丰富和普及,网络PING的应用场景也将不断扩大。例如,网络安全领域的 发展对网络PING的需求将不断增加,通过网络安全领域的不断扩展和发展,网络PING将会获得更多的机会和挑战。同时,随着物联网的普及,网络PING也将更多的应用到物联网设备的远程管理和监控中。

  W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网PING应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。

2 协议简介

2.1 什么是PING

  PING是一种计算机网络工具,用于测试主机之间的连通性。它通过发送ICMP(Internet Control Message Protocol)回显请求消息到目标主机,并等待目标主机发送回复消息。根据回复消息的接收情况,可以判断目标主机是否可达,以及从本地主机到目标主机的往返延迟时间、丢包率等网络性能指标。这些信息可以帮助程序员诊断网络问题、优化网络性能,以及确保网络连接的稳定性。

2.2 PING的优点

  PING的优点主要有:

  1. 连通性测试:PING工具可以测试两台计算机之间的连通性。通过发送ICMP回显请求到目标主机,并等待目标主机发送回复消息,如果收到回复消息,那么两台计算机之间就存在连通性。
  2. 延迟和丢包率测试:PING工具还可以测试从本地主机到目标主机的往返延迟时间以及丢包率等网络性能指标。这些信息可以帮助用户诊断网络问题、优化网络性能,以及确保网络连接的稳定性。
  3. 使用方便:PING工具不需要任何额外的工具或软件,只需要在终端窗口中输入PING命令即可进行测试。

2.3 PING的原理

在这里插入图片描述

在这里插入图片描述

  PING请求流程中主要有以下几个主要的步骤:

  1. 应用层发起对目标主机(B)的PING请求。
  2. 传输层将数据分段并加上报头。
  3. 网络层将源IP地址为A的IP地址、目标IP地址为B的IP地址,根据ICMP协议封装成数据包。
  4. 根据目标IP地址和子网掩码,检测A、B是否属于同一子网。如果是,则查找本机的ARP缓存,找到目标主机B的MAC地址;如果不是,则根据网关的IP地址,发送ARP请求广播。
  5. 目标主机B收到ARP广播后进行解封装,发现所请求的MAC地址是自己的,于是将发送方的MAC地址写入ARP缓存表中,然后向A发送一个ARP应答单播。
  6. A将B的Mac地址作为目标MAC地址并封装到数据帧中,发送给网络接口层进行传输。
  7. B接收到这个数据帧后,首先在网络接口层中发现目标MAC地址指向自己,于是将帧头去掉,向上传传输。
  8. 传输层接收PING请求报文,去掉报头,向应用层传送。

2.4 应用场景

  PING的应用场景广泛,以下是一些常见的例子:

  1. 网络故障排查:当网络连接出现故障时,通过PING命令可以检测网络连接是否正常。如果目的主机无法访问,可能是网络设备故障、网络连接中断或者其他问题。
  2. 网络性能测试:PING命令可以用于测试网络的延迟、丢包率和带宽等性能指标。通过这些指标,可以对网络的性能有一个全面的了解。
  3. 网络拓扑发现:通过PING命令可以发现网络中的主机和设备,并构建网络拓扑结构。这对于网络管理员来说非常有用,可以帮助他们更好地理解和管理网络。
  4. 网络安全监控:PING命令也可以用于监控网络安全。例如,可以设置一个程序,定时PING特定的主机,如果发现无法访问,则可能是该主机遭受攻击或者出现故障。

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 PING网络设置示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)
  • 通过TTL串口转USB,连接UART0 的默认引脚:
    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040进行接线时
    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

  我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

第一步:ping_client.c文件中加入对应的.h文件。

第二步:定义DHCP配置需要的宏。

第三步:网络信息的配置。

第四步:编写定时器回调处理函数,用于 DHCP 1s滴答定时器处理函数。

第五步:主函数先是对串口和SPI的初始化,然后写入W5100S的网络配置参数,初始化DHCP后开始DHCP获取IP,获取到就打印获取到的IP,获取次数超过最大获取次数时就使用静态IP,然后主循环进行的是PING网关IP的操作,需要传入的参数是所要执行的socket号和所要PING的目标IP。

#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/binary_info.h"
#include "hardware/spi.h"#include "wizchip_conf.h"
#include "bsp_spi.h"
#include "socket.h"
#include "ping.h"
#include "dhcp.h"#define SOCKET_DHCP 1
#define SOCKET_PING 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)
#define DHCP_RETRY_COUNT 5 // DHCP retry timeswiz_NetInfo net_info = {.mac = {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e}, // Define MAC variables.ip = {192, 168, 1, 10},                     // Define IP variables.sn = {255, 255, 255, 0},                    // Define subnet variables.gw = {192, 168, 1, 1},                      // Define gateway variables.dns = {8, 8, 8, 8},                         // Define DNS  variables.dhcp = NETINFO_DHCP};                       // Define the DNCP mode
wiz_NetInfo get_info;
static uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {0,
};
static uint8_t remote_ip[4] = {192, 168, 1, 1}; // The IP to be ping
static uint8_t dhcp_get_ip_flag = 0;            // Define the DHCP acquisition flag/*** @brief   Timer callback processing function, used for dhcp timing processing* @param   repeating :Timer structure* @return  bool*/
bool repeating_timer_callback(struct repeating_timer *t);/*** @brief   Initialization of chip network information* @param   conf_info :Static configuration information* @return  none*/
void network_init(wiz_NetInfo *conf_info);int main()
{struct repeating_timer timer; // Define the timer structure/*mcu init*/stdio_init_all();     // Initialize the main control peripheralwizchip_initialize(); // spi initialization/*dhcp init*/DHCP_init(SOCKET_DHCP, ethernet_buf);                                 // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer); // Add DHCP 1s Tick Timer handlerprintf("wiznet chip ping client example.\r\n");network_init(&net_info);              // Configuring Network Informationprint_network_information(&get_info); // Read back the configuration information and print itwhile (true){do_ping(SOCKET_PING, remote_ip); // Ping the target IP}
}

4.5 烧录验证

在这里插入图片描述

  1. 打开WIZ UartTool,填入参数:选择串口对应的COM Port,波特率115200,8位数据位,1位停止位,无校验位,无流控,填完参数后点击open打开。
  2. 按下复位,可以看到通过DHCP获取到IP之后,获取到了动态的IP,然后用获取到的IP192.168.1.137 PING目标IP192.168.1.1,看到PING成功,并且打印出了PING相关的消息。

5 注意事项

  • 如果是设备直连电脑的情况下,由于获取不到动态IP所以要使用静态IP,就要将静态IP和电脑IP设置为同一个网段,否则不能PING通。
  • 注意PING的socket号和DHCP的socket号不能一样,否则会导致socket号冲突,PING不通的问题发生。
  • 如果想用WIZnet的W5500来实现本章的示例,我们只需修改两个地方即可:

(1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500;

(2)在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。

6 相关链接

WIZnet官网

WIZnet官方库链接

本章例程链接

想了解更多,评论留言哦!

这篇关于十、W5100S/W5500+RP2040树莓派Pico<PING(ICMP)检测网络连通性>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318480

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.