八、W5100S/W5500+RP2040树莓派Pico<DNS>

news2025/7/22 22:02:16

文章目录

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


1 前言

  为了更好地支持应用程序的性能和可用性,DNS优化技术将会得到进一步发展。这些技术可以帮助用户更快地访问其所需的网站或应用程序,从而提高用户体验。

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

2 协议简介

2.1 什么是DNS

  DNS是域名系统(Domain Name System)的缩写,它是由域名解析服务器和域名服务器组成的。

  域名解析服务器靠它把要访问的网址找到然后把信息送到电脑上。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

  在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。DNS 命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

2.2 DNS的优点

  DNS的优点主要包括:

  1. 域名易记:DNS可以将难以记忆的IP地址转化为容易记忆的域名,使得在网络访问中使用域名成为可能,方便用户的使用。
  2. 监管方便:DNS可以配合服务器进行域名解析,提供监管和辨识度,方便网站管理员对网站进行管理和维护。
  3. 不依赖单个IP:DNS技术使得用户只需要访问网站域名,不需要知道网站的IP地址,这样可以使网络访问更加灵活。
  4. 容易实现负载均衡和容灾备份:DNS可以解析相同的域名到不同的IP地址,从而实现负载均衡。同时,不同的DNS服务器可以实现容灾备份,确保网络可靠性和稳定性。
  5. 可以解析其他服务:除了将域名解析为IP地址,DNS还可以解析为其他服务,如MX记录(邮件交换记录)、CNAME记录(别名记录)等,这使得网络管理更加方便和灵活。

2.3 DNS工作原理

在这里插入图片描述

  1. 客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
  2. 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
  3. 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
  4. 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,
  5. 如果没有该纪录,则返回相关的下级的域名服务器的地址。
  6. 重复前面的操作,直到找到正确的纪录。
  7. 本地域名服务器把返回的结果保存到缓存,以备下一次使用。
  8. 结果返回给客户机。

2.4 应用场景

在这里插入图片描述

1.容灾切换—全局流量管理

(1)多线路智能优化解析服务

  使用加权轮询、GeoDNS 等 DNS 路由技术,以及结合应用程序健康检查实现服务的自动故障屏蔽和 failover

(2)解决的问题:

  分布式健康检查、 多线路负载均衡、故障地址自动屏蔽

2. DNS 抗 DDOS 攻击

(1)具防御大流量 DDOS 攻击能力

  对于直播、视频、游戏、社交类型的用户,可以通过云解析内置高防DNS + 高防 IP 配合使用,在解析请求和网站站点两个方面都添加了防护措施,网站会更安全

(2)解决的问题:

  DDOS 攻击防御、宽带耗尽型的 DNS 反弹式拒绝服务攻击、10亿 + QPS 的解析请求

3.移动解析

(1)高效、流畅的 APP 访问体验

  为手游、手淘、移动 APP 业务,提供了移动低延迟解决方案,可让移动用户享有更高效更安全的解析请求体验。

(2)解决的问题:

  防劫持、 解析延迟、 本地解析生效慢

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 DNS网络设置示例概述以及使用

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层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

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

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

第三步:网络信息的配置定义所要解析的域名。

#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 "dns.h"
#include "dhcp.h"
#include "socket.h"

#define ETHERNET_BUF_MAX_SIZE (1024 * 2)
#define  DNS_RET_FAIL         0
#define  DNS_RET_SUCCESS      1
#define  DNS_RETRY            3                /* 3 times */
#define SOCKET_ID 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)
#define DHCP_RETRY_COUNT 5               // DHCP retry times

wiz_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,};
uint8_t Domain_name[] = "www.baidu.com";           // The domain name that needs to be resolved 
uint8_t Domain_IP[4] = {0,};
static uint8_t dhcp_get_ip_flag = 0;         // Define the DHCP acquisition flag

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

第五步:主函数先是对串口和SPI的初始化,然后写入W5100S的网络配置参数,初始化DHCP后开始DHCP获取IP,获取到就打印获取到的IP,获取次数超过最大获取次数时就使用静态IP,然后进行判断DNS解析状态,解析成功则打印解析成功的IP,解析失败则继续解析,解析次数大于最大解析次数则解析失败。

int main()
{
    struct repeating_timer timer;  // Define the timer structure
    struct repeating_timer timer1; // Define the timer structure
    uint8_t dns_retry_cnt = 0;     // Number of parsings
    uint8_t dns_ok = 0;            // Parse success Peugeot

    /*mcu init*/
    stdio_init_all();     // Initialize the main control periphera
    wizchip_initialize(); // spi initialization

    /*dhcp init*/
    DHCP_init(SOCKET_ID, ethernet_buf);                                        // DHCP initialization
    add_repeating_timer_ms(1000, repeating_timer_callback_DHCP, NULL, &timer); // Add DHCP 1s Tick Timer handler

    printf("wiznet chip dns client example.\r\n");
    network_init(&net_info);              // Configuring Network Information
    print_network_information(&get_info); // Read back the configuration information and print it

    /*dns init*/
    DNS_init(0, ethernet_buf);                                                 // DNS client init
    add_repeating_timer_ms(1000, repeating_timer_callback_DNS, NULL, &timer1); // Add  DNS 1s Tick Timer handler
    printf("\r\n===== DNS Client Example =====\r\n");
    printf("> Example Domain Name : %s\r\n", Domain_name);

    while (true)
    {

        if ((dns_ok == 0) && (dns_retry_cnt < DNS_RETRY)) // Determine whether the parsing is successful or whether the parsing exceeds the number of times
        {
            switch (DNS_run(net_info.dns, Domain_name, Domain_IP)) // Read the DNS_run return value
            {
            case DNS_RET_FAIL: // The DNS domain name is successfully resolved
            {
                dns_retry_cnt++;
                printf("> DNS Failed\r\n");
            }
            break;
            case DNS_RET_SUCCESS: // DNS domain name resolution failed
            {
                dns_ok = 1;
                printf("> Translated %s to %d.%d.%d.%d\r\n", Domain_name, Domain_IP[0], Domain_IP[1], Domain_IP[2], Domain_IP[3]);
            }
            break;
            }
        }
    }
}

4.5 烧录验证

在这里插入图片描述

  1. 打开WIZ UartTool,填入参数:选择串口对应的COM Port,波特率115200,8位数据位,1位停止位,无校验位,无流控,填完参数后点击open打开。
  2. 按键复位键后,可以看到通过DHCP获取到IP之后,获取到了动态的DNS服务器。
  3. 用其对百度的域名进行解析。
  4. 可以看到成功解析出域名的IP,证明DNS解析域名成功。

5 注意事项

  • 解析的域名可能同时拥有多个IP地址,所以每次解析也不一定是完全一样的IP地址。
  • 如果想用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官方库链接

本章例程链接

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

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

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

相关文章

RuoYi若依源码分析1 - security

Security springsecurity配置文件夹 security springsecurity总配置类 SecurityConfig.java SecurityConfig 总配置分析 首先看一下总配置&#xff0c;我们可以从总配置项里面大体的总结出springsecurity鉴权在ruoyi框架里面是如何执行的 自动装配关键处理类以及过滤器等…

爬虫 | 【实践】百度搜索链接爬取,生成标题词云 | 以“AI换脸”为例

目录 &#x1f4da;链接爬取 &#x1f407;流程梳理 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;词云生成 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;链接爬取 &#x1f407;流程梳理 总体流程是&#xff1a;构建搜索链接 -> 发送HTTP请求…

解决Linux Debian12系统中安装VirtualBox虚拟机无法使用USB设备的问题

Debian12系统中安装VirtualBox&#xff0c;再VirtualBox虚拟机中无法使用 USB设备。如下图所示&#xff1a; 解决方法如下&#xff1a; 1.安装 Virtualbox增强功能。如下图所示&#xff1a; 2.添加相关用户、用户组&#xff08; Virtualbox 装完成后会有 vboxusers 和 vboxs…

初学编程学什么语言,中文编程系统化教程课程之自定义图形窗口自定义标题栏编程,零基础学编程轻松学编程

初学编程学什么语言&#xff0c;中文编程系统化教程课程之自定义图形窗口自定义标题栏编程&#xff0c;零基础学编程轻松学编程 该编程工具开发的系列管理软件 编程系统化课程总目录及明细&#xff0c;零基础学编程视频教程&#xff0c;点击进入了解详情。 https://blog.csdn.n…

无法ping通ECS服务器公网IP的排查方法

无法ping通ECS实例的原因较多&#xff0c;您可以参考九河云编辑的文章进行排查。 问题现象 本地客户端无法ping通目标ECS实例公网IP&#xff0c;例如&#xff1a; 本地客户端为Linux系统&#xff0c;ping目标ECS实例公网IP时无响应&#xff0c;如下所示&#xff1a; 本地客…

Java日志组件之三Log4j2漏洞剖析及重现

一、前言 这一篇我们来介绍一下史上第二严重的安全漏洞是个什么情况&#xff0c;原理是什么&#xff0c;如何重现。 二、Log4j2 Lookup机制 Log4j2 Lookup机制最重要的功能就是提供一个可扩展的方式让你可以添加某些特殊的值到日志中。你调用logger.info(name);这样的语句&a…

【赠书第1期】零基础学无人机航拍与短视频后期剪辑实战教程

文章目录 前言 1 购买前须知 2 准备工作 3 飞行控制 4 拍摄技巧 5 安全提示 6 推荐图书 7 粉丝福利 前言 随着科技的不断发展&#xff0c;无人机已经不再是军事装备的专属&#xff0c;它已经成为了消费级无人机的主流产品。作为国内领先的无人机生产商&#xff0c;大疆…

【腾讯云 HAI域探秘】StableDiffusionWebUI一小时搞定100张设计图

目录 前言一、选择 HAI部署的优势二、HAI 搭建AI绘图服务实现思路三、生成设计图操作流程1、新建HAI应用2、StableDiffusionWebUI&#xff08;1&#xff09;功能介绍&#xff08;2&#xff09;页面转中文&#xff08;3&#xff09;线稿生成图 四、部署StableDiffusionWebUI服务…

通讯网关软件033——利用CommGate X2OPC实现PI数据写入OPC Server

本文推荐利用CommGate X2OPC实现从PI服务器读取数据并写入OPC Server。CommGate X2OPC是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现从PI实时数据库获取数据并写入OPC Server。 【解决…

maven环境变量的配置

windows系统 1. win键 r&#xff0c;输入sysdm.cpl打开系统属性界面&#xff0c;选择高级栏目&#xff0c;点击环境变量菜单打开环境变量界面。 2. 选择系统变量下的新建菜单&#xff0c;变量名输入MAVEN_HOME&#xff0c;变量值输入maven的安装目录&#xff0c;例如&#xff…

CNN卷积神经网络模型的GPU显存占用分析

一、参考资料 浅谈深度学习:如何计算模型以及中间变量的显存占用大小 如何在Pytorch中精细化利用显存 二、相关介绍 0. 预备知识 为了方便计算&#xff0c;本文按照以下标准进行单位换算&#xff1a; 1 G 1000 MB1 M 1000 KB1 K 1000 Byte1 B 8 bit 1. 模型参数量的计…

基于构件的开发(CBD)

基于构件的开发&#xff08;Component-Based Development&#xff0c;简称CBD&#xff09;或基于构件的软件工程&#xff08;Component-Based Software Engineering&#xff0c;简称CBSE&#xff09;是一种软件开发新范型&#xff0c;它是在一定构件模型的支持下&#xff0c;复…

FPGA与ASIC有什么差异?二者该如何选用?

前言 对于一个数字电路的新手来说&#xff0c;这可能是会经常遇到的一个问题&#xff1a;FPGA和ASIC之间的区别是什么? 接下来本文将尝试讲解 “什么是FPGA&#xff1f;” 和 “什么是ASIC&#xff1f;”&#xff0c;然后讲述一些关于FPGA和ASIC的问题&#xff0c;例如它们之间…

【【FIFO to multiplier to RAM的 verilog 代码 和 testbnench 】】

FIFO to multiplier to RAM的 verilog 代码 和 testbnench 只完成了单个数据的传输 大数据需要修改 tb 或者基本连线 FIFO.v //synchronous fifo module FIFO_syn #(parameter WIDTH 16, // the fifo wideparameter DEPTH 1024, …

【MATLAB】全网唯一的7种信号分解+ARIMA联合的时序预测算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有7种信号分解ARIMA组合的时序预测算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算…

【三方登录-Apple】iOS 苹果授权登录(sign in with Apple)之开发者配置一

记录一下sign in with Apple的开发者配置 前言 关于使用 Apple 登录 使用“通过 Apple 登录”可让用户设置帐户并使用其Apple ID登录您的应用程序和关联网站。首先使用“使用 Apple 登录”功能启用应用程序的App ID 。 如果您是首次启用应用程序 ID 或为新应用程序启用应用程序…

加速计算卡设计方案:389-基于KU5P的双路100G光纤网络加速计算卡

基于KU5P的双路100G光纤网络加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm KU5P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x8智能加速计算卡&#xff0c;该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…

SpringBoot配置文件yml文件基础知识

yaml简介 YAML&#xff08;YAML Aint Markup Language&#xff09;&#xff0c;一种数据序列化格式 优点&#xff1a;容易阅读容易与脚本语言交互以数据为核心&#xff0c;重数据轻格式 YAML文件扩展名.yml&#xff08;主流&#xff09;.yamlyaml语法规则 大小写敏感 属性层级…

10.1 am62x平台怎么从ospi启动uboot

本文主要内容: 1 背景(硬件原理图与分区信息) 2 AM62x平台bootloader组成 3 设置SK-AM62B启动方式 4 烧录镜像到OSPI分区 5 解决Message not acknowledgedAuthentication failed!问题 1 背景 Ti的SK-AM62B评估板,通过OSPI接口,连接了一个Nor Flash:S28HS512TGABHM01…

聊天室系统源码 匿名聊天系统源码 在线聊天室系统源码 可发语音 图片 适用PC+WAP

PHP匿名在线聊天室系统源码&#xff0c;适用于PC和WAP端&#xff0c;支持语音和图片传输 通过修改数据库config\settings.php&#xff0c;可以将其用于搭建客户聊天专用的网站 要搭建一个专门用于与客户聊天的网站&#xff0c;您可以使用这个PHP匿名在线聊天室系统源码 该源码…