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

文章目录

  • 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 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,};
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 structurestruct repeating_timer timer1; // Define the timer structureuint8_t dns_retry_cnt = 0;     // Number of parsingsuint8_t dns_ok = 0;            // Parse success Peugeot/*mcu init*/stdio_init_all();     // Initialize the main control peripherawizchip_initialize(); // spi initialization/*dhcp init*/DHCP_init(SOCKET_ID, ethernet_buf);                                        // DHCP initializationadd_repeating_timer_ms(1000, repeating_timer_callback_DHCP, NULL, &timer); // Add DHCP 1s Tick Timer handlerprintf("wiznet chip dns client example.\r\n");network_init(&net_info);              // Configuring Network Informationprint_network_information(&get_info); // Read back the configuration information and print it/*dns init*/DNS_init(0, ethernet_buf);                                                 // DNS client initadd_repeating_timer_ms(1000, repeating_timer_callback_DNS, NULL, &timer1); // Add  DNS 1s Tick Timer handlerprintf("\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.rhkb.cn/news/179135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex&#xff0c; 将对象作为内联块级弹性伸缩盒显示&#xff0c; 类似与是子元素将父元素撑开&#xff0c;样式就显示出来了

上线项目问题——无法加载响应数据

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端&#xff0c;后端也能正常返回数据&#xff0c;但是在前端页面会显示 以为是跨域问题&#xff0c;但是环境还在本地&#xff0c;排除跨域问题以为是服务器问题&#…

界面控件DevExpress WPF Gauge组件 - 轻松实现个性化商业仪表盘

DevExpress WPF Gauge&#xff08;仪表&#xff09;控件包含了多种圆形仪表类型、水平和垂直线性仪表、分段和矩阵数字仪表以及状态指示器&#xff0c;同时还具有最终用户交互性的集成支持。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至…

免费(daoban)gpt,同时去除广告

一. 内容简介 免费(daoban)gpt&#xff0c;同时去除广告&#xff0c;https://chat18.aichatos.xyz/&#xff0c;也可当gpt用&#xff0c;就是有点广告&#xff0c;大家也可以支持一下 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 …

css中flexbox和grid的区别

css中flexbox和grid的区别 我们是不是被那些不会按预期排列的元素所影响&#xff1f;这篇文章我们将深入探讨css中flexbox和grid的布局。通过了解他们的主要差异&#xff0c;我们会发现这些布局是如何改变我们网站的风格。 理解CSS布局 css布局是网页设计的一个重要方面&…

Proteus仿真--基于51单片机的走马灯实现(仿真文件+程序)

本文主要介绍基于51单片机的走马灯仿真&#xff08;完整仿真源文件及代码见文末链接&#xff09; 本设计中有16个LED灯用于流水走马演示&#xff0c;一位数码管用于显示当前模式状态&#xff0c;3个按键分别用于选择模式及加减速度控制 仿真图如下 其中 K1&#xff1a;用于模…

(免费领源码)java#springboot#MYSQL 电影推荐网站30760-计算机毕业设计项目选题推荐

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个B/S结构的电影推荐网站&#xff1b;电影推荐网站的管理工作系统化、规范化&#xff0c;也会提高平台形象&#xff0c;提高管理效率。 本…

用LibreOffice在excel中画折线图

数据表格如下。假设想以x列为横坐标&#xff0c;y1和y2列分别为纵坐标画折线图。 选择插入-》图表&#xff1a; 选择折线图-》点和线&#xff0c;然后点击“下一步”&#xff1a; 选择&#xff1a;列中包含数据序列&#xff0c;然后点击完成&#xff08;因为图挡住了数据…

大促期间如何监测竞品数据

无论在什么时候&#xff0c;竞品的数据都是品牌非常关注的&#xff0c;大促当然也不例外&#xff0c;所以准确监测到竞品数据应该如何分析也很关键&#xff0c;通过分析竞品&#xff0c;品牌可以获取非常多有价值的内容&#xff0c;如竞品王牌产品的分析、行业分析报告等。 力维…

kotlin中集合操作符

集合操作符 1.总数操作符 any —— 判断集合中 是否有满足条件 的元素&#xff1b; all —— 判断集合中的元素 是否都满足条件&#xff1b; none —— 判断集合中是否 都不满足条件&#xff0c;是则返回true&#xff1b; count —— 查询集合中 满足条件 的 元素个数&#x…

4.多层感知机-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

基于Springboot+MYSQL+Maven实现的宠物医院管理系统(源码+数据库+运行指导文档+项目运行指导视频)

一、项目简介 本项目是一套基于springboot框架实现的宠物医院管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

Selenium3-当元素通过@FindBy获取时,返回元素为null

报错: 在获取元素的js属性时一直获取不到&#xff0c;报空指针&#xff0c;定位到元素时&#xff0c;发现是FindBy的元素没有找到 解决方法: 在page类的构造函数中加上了 界面初始化&#xff0c;让元素先隐式加载&#xff0c;这样就不会出现返回元素为空的情况辣 PageFactory…

易语言软件定制开发爬虫模拟协议填写自动化办公软件开发多人团队

在当今快速发展的信息化时代&#xff0c;企业对于高效、自动化的软件需求日益增长。而易语言软件定制开发爬虫模拟协议填写自动化办公软件开发多人团队&#xff0c;正是为了满足这一需求而诞生的。 一、团队背景 技术顾问、维&#xff1a;Daxiami6789 易语言软件定制开发爬虫模…

大数据相关ERP、CRM、SRM、PLM、HRM、OA

目录 █ ERP&#xff08;企业资源计划&#xff09; █ CRM&#xff08;客户关系管理&#xff09; █ SCRM&#xff08;社会化客户关系管理&#xff09; █ SRM&#xff08;供应商关系管理&#xff09; █ OA&#xff08;办公自动化&#xff09; █ HRM&#xff08;人力资…

ROS分布式演练,多台设备进行通信的配置

1、概述 前面我们做的操作都是在单个设备上进行&#xff0c;也就是分别开启多个终端&#xff0c;在不同终端上启动节点等相关操作&#xff0c;这里我们使用两台设备来控制&#xff0c;一台虚拟机和一台无人车(使用VNC Viewer连上去&#xff0c;也可以看做一台Linux虚拟机) VNC…

Nacos本地修改编译源码2.2.3

下载Nacos源码 由于github访问速度慢&#xff0c;所以在gitee上下载 git clone https://gitee.com/mirrors/Nacos.git切换2.2.3版本 git checkout 2.2.3或者直接下载2.2.3的源码 本地编译 源码导入idea&#xff0c;然后编译 mvn -Dmaven.test.skiptrue -Drat.skiptrue c…

Spring Boot整合Swagger

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

【Unity数据交互】Json序列化你记得几分

ˊˊ &#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1…

数据库事务提交后才发送MQ消息解决方案

项目场景&#xff1a; 在项目开发中常常会遇到在一个有数据库操作的方法中&#xff0c;发送MQ消息&#xff0c;如果这种情况消息队列效率比较快&#xff0c;就会出现数据库事务还没提交&#xff0c;消息队列已经执行业务&#xff0c;导致不一致问题。举个应用场景&#xff0c;…