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

2023-11-02 17:45
文章标签 树莓 dns pico w5100s rp2040 w5500

本文主要是介绍八、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官方库链接

本章例程链接

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

这篇关于八、W5100S/W5500+RP2040树莓派Pico<DNS>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

1-8 图像腐蚀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel=np.ones((2,2),np.uint8) _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) eroded_image=cv2.erode(binary_image,kernel,iterations=1) eroded_image2=cv2.ero

逗比学树莓派之lcd1602显示

通过树莓派GPIO连接LCD1602,使用wiringPi库和其附带的LCD库进行显示树莓派的CPU温度和内存使用情况。 1.首先按下图连接好硬件电路图: 2.然后在终端使用命令 sudo apt-get install git 安装版本管理软件Git 。

树莓派wiringPi常用的函数介绍

 1.void pinMode (int pin, int mode) ; 这个函数式设置pin脚的输入和输出模式以及PWM的输入和输出模式。在wiringPi中只有 pin 1 (BCM_GPIO 18)是支持PWM的输出的。 2.void digitalWrite (int pin, int value) ; 这个函数式用来设置pin脚的高低电平的,当我们写HIGH or LO

linux配置DNS解析设置之配置文件“/etc/resolv.conf “

在 Linux 系统中,/etc/resolv.conf 文件用于配置系统的 DNS 解析设置。它定义了如何将主机名(例如 www.example.com)转换为 IP 地址。主要功能包括: 主要功能 DNS 服务器地址:指定系统用于查询域名的 DNS 服务器。你可以在该文件中列出一个或多个 DNS 服务器的 IP 地址。 示例内容: conf 复制代码 nameserver 8.

RasberryPi 3B树莓派基本配置

RaspberryPi 3B树莓派基本配置 文章目录 RaspberryPi 3B树莓派基本配置一、准备工作1.1 硬件准备:1.1.1 树莓派和电源适配器:1.1.2 USB转TTL模块:1.1.3 读卡器和TF卡: 1.2 软件准备:1.2.1 下载 Raspberry Pi OS:1.2.2 SD Card Formatter:1.2.3 下载系统镜像刻录软件:1.2.4 MobaX

树莓派使用WiringPi库配合时间函数实现超声波测距

树莓派使用WiringPi库配合时间函数实现超声波测距 文章目录 树莓派使用WiringPi库配合时间函数实现超声波测距一、HR-04超声波模块原理1.1 超声波测距原理:1.2 超声波时序图: 二、树莓派与超声波模块硬件连接三、时间函数3.1 时间函数gettimeofday()原型和头文件: 四、实现超声波测距4.1 使用wiringOP库和时间函数实现超声波测距: 五、实现超声波测距

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel = np.ones((3, 3), np.uint8) _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image = cv2.dilate(binary_image, kernel, iterations=1) 三、运行现象 四