网站建设所需技术,vi设计的基本原则,天津网站建设方案维护,天河网站建设报价DHCP协议介绍
什么是DHCP#xff1f; 动态主机配置协议DHCP#xff08;Dynamic Host Configuration Protocol#xff09;是一种网络管理协议#xff0c;用于集中对用户IP地址进行动态管理和配置。 DHCP于1993年10月成为标准协议#xff0c;其前身是BOOTP协议。DHCP协议由…DHCP协议介绍
什么是DHCP 动态主机配置协议DHCPDynamic Host Configuration Protocol是一种网络管理协议用于集中对用户IP地址进行动态管理和配置。 DHCP于1993年10月成为标准协议其前身是BOOTP协议。DHCP协议由RFC 2131定义采用客户端/服务器通信模式由客户端DHCP Client向服务器DHCP Server提出配置申请DHCP Server基于请求的客户端DHCP Client的mac地址为它动态分配IP地址、子网掩码、默认网关地址域名服务器DNS地址和其他相关配置参数以便可以与其他IP网络通信。 与静态IP地址相反的而关于静态IP和动态IP地址一直以来都是网络技术人员们热议的话题动态IP地址是一个不断变化的地址若是要创建动态IP地址网络必须配置并运行DHCP服务器。DHCP服务器为连接到网络的所有设备分配了一个空闲的IP地址。DHCP是一种向物理网络上的网络设备自动分配动态IP地址的方法它能自动为网络设备分配或更新IP地址以及其他配置信息。 静态IP地址允许网络设备始终保持相同的IP地址网络管理员必须跟踪每个静态分配的设备从而避免再次使用该IP地址。由于静态IP地址需要手动配置因此若是对TCP/IP协议不太了解则可能会出现网络问题。 DHCP是用于自动分配IP地址的协议对网络管理员来说是非常有利的因为它能避免网络上的每台设备分配多个IP地址也就是重复分配IP地址。通常配置可能只需要一分钟但是当您配置数百个网络设备时确实比较麻烦。当网络中接入无线接入点时可利用DHCP自动获取动态IP地址无需再做配置。对于无线接入点PoE交换机通常可支持用户定义进行动态绑定为连接在一起的各个设备分配IP地址。此外相对于静态IP地址而言DHCP维护较少且便宜对于用户而言具备吸引力
动态ip优点
1、成本低。由于静态IP数量有限所以价格相对而言高一些。由于动态ip可以循环使用所以使用动态IP更加经济。
2、自动配置。使用动态IP地址服务器会自动为设备分配可用的IP地址非常适合家庭使用。
3、更安全。每一次用户登录都会为设备分配一个新的IP地址相对而言比较安全。
动态ip缺点
1、不太准确的地理定位。很难找到设备的准确位置因为动态ip地址会变化。
2、限制远程访问。如果您使用动态IP地址您的程序可能无法连接。 硬件准备
W5500-EVB-Pico开发板网线Micro USB数据线 注意需将W5500-EVB-Pico通过RJ45网口接入到路由器上电脑也接入到同一路由器下。路由器必须开启DHCP服务
软件环境
Visual Studio Code
W5100S-EVB-Pico使用DHCP协议获取IP地址
步骤1找到dhcp_client示例程序并打开
主要引用到dhcp.h中的几个函数
void DHCP_init(uint8_t s, uint8_t * buf);
void DHCP_time_handler(void);
uint8_t DHCP_run(void);
void reg_dhcp_cbfunc(void(*ip_assign)(void), void(*ip_update)(void), void(*ip_conflict)(void));修改网络信息结构体内容将.dhcp的内容改为NETINFO_DHCP
uint8_t wizchip_version 0x00;wiz_NetInfo net_info {.mac {0x00, 0x08, 0xdc, 0x1e, 0xed, 0x2e},.ip {192, 168, 1, 235},.sn {255, 255, 255, 0},.gw {192, 168, 1, 1},.dhcp NETINFO_DHCP // DHCP enable/disable};定时器函数
bool repeating_timer_callback(struct repeating_timer *t) {DHCP_time_handler();return true;
}DHCP运行函数
int main()
{/* Initialize */uint8_t retval 0;uint8_t dhcp_retry 0;stdio_init_all();gpio_config();// Enable SPI 0 at 8 MHz and co,nnect to GPIOsspi_init(SIP_ID, 8 * 1000 * 1000);struct repeating_timer timer;add_repeating_timer_ms(1000, repeating_timer_callback, NULL, timer);wizchip_version getVER();printf(wizchip_version %02X\r\n, wizchip_version);sleep_ms(1000);if (net_info.dhcp NETINFO_DHCP) // DHCP{wizchip_dhcp_init();}else // static{wizchip_setnetinfo(net_info); // apply from DHCPprintf(mac: %02X%02X%02X%02X%02X%02X\r\n, net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);printf(ip: %d.%d.%d.%d\r\n, net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);printf(mask: %d.%d.%d.%d\r\n, net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);printf(gw: %d.%d.%d.%d\r\n, net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);}while (1){if (net_info.dhcp NETINFO_DHCP){retval DHCP_run();if (retval DHCP_IP_LEASED){if (g_dhcp_get_ip_flag 0){printf( DHCP success\n);g_dhcp_get_ip_flag 1;}}else if (retval DHCP_FAILED){g_dhcp_get_ip_flag 0;dhcp_retry;if (dhcp_retry DHCP_RETRY_COUNT){printf( DHCP timeout occurred and retry %d\n, dhcp_retry);}}if (dhcp_retry DHCP_RETRY_COUNT){printf( DHCP failed\n);DHCP_stop();while (1) ;}wiz_delay_ms(1000); // wait for 1 second}}
}IP地址请求和更新回调函数
static void wizchip_dhcp_assign(void)
{getIPfromDHCP(net_info.ip);getGWfromDHCP(net_info.gw);getSNfromDHCP(net_info.sn);getDNSfromDHCP(net_info.dns);net_info.dhcp NETINFO_DHCP;/* Network initialize */wizchip_setnetinfo(net_info); // apply from DHCPprintf(mac: %02X%02X%02X%02X%02X%02X\r\n, net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);printf(ip: %d.%d.%d.%d\r\n, net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);printf(mask: %d.%d.%d.%d\r\n, net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);printf(gw: %d.%d.%d.%d\r\n, net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);printf( DHCP leased time : %ld seconds\n, getDHCPLeasetime());
}步骤2编译烧录 选择编译器选择编译项目为dhcp_client点击Build进行编译 编译之后按住boot按钮把开发板连接到电脑上此时电脑将开发板识别为大容量存储器我们将build/examples/dhcp_client文件夹下面的uf2文件拖入开发板的大容量存储器中就烧录好了。 步骤3验证测试 此时串口会打印获取到的IP地址信息我们也能直接ping通获取到的IP地址 示例下载链接
例程下载WIZnet-EVB-PICO资源 本期内容到此结束谢谢大家的观看下期我们将对W5100S-EVB-PICO解析域名这一知识点进行讲解。