本文主要是介绍八、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的优点主要包括:
- 域名易记:DNS可以将难以记忆的IP地址转化为容易记忆的域名,使得在网络访问中使用域名成为可能,方便用户的使用。
- 监管方便:DNS可以配合服务器进行域名解析,提供监管和辨识度,方便网站管理员对网站进行管理和维护。
- 不依赖单个IP:DNS技术使得用户只需要访问网站域名,不需要知道网站的IP地址,这样可以使网络访问更加灵活。
- 容易实现负载均衡和容灾备份:DNS可以解析相同的域名到不同的IP地址,从而实现负载均衡。同时,不同的DNS服务器可以实现容灾备份,确保网络可靠性和稳定性。
- 可以解析其他服务:除了将域名解析为IP地址,DNS还可以解析为其他服务,如MX记录(邮件交换记录)、CNAME记录(别名记录)等,这使得网络管理更加方便和灵活。
2.3 DNS工作原理
- 客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
- 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,
- 如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 重复前面的操作,直到找到正确的纪录。
- 本地域名服务器把返回的结果保存到缓存,以备下一次使用。
- 结果返回给客户机。
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 主流硬件协议栈以太网芯片参数对比
Model | Embedded Core | Host I/F | TX/RX Buffer | HW Socket | Network Performance |
---|---|---|---|---|---|
W5100S | TCP/IPv4, MAC & PHY | 8bit BUS, SPI | 16KB | 4 | Max.25Mbps |
W6100 | TCP/IPv4/IPv6, MAC & PHY | 8bit BUS, Fast SPI | 32KB | 8 | Max.25Mbps |
W5500 | TCP/IPv4, MAC & PHY | Fast SPI | 32KB | 8 | Max 15Mbps |
- W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
- W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
- 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 烧录验证
- 打开WIZ UartTool,填入参数:选择串口对应的COM Port,波特率115200,8位数据位,1位停止位,无校验位,无流控,填完参数后点击open打开。
- 按键复位键后,可以看到通过DHCP获取到IP之后,获取到了动态的DNS服务器。
- 用其对百度的域名进行解析。
- 可以看到成功解析出域名的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>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!