esp32等网络设备 初始化、联网、发出一个http请求全程简述

用esp32 qemu模拟器实验的,但是原理适用于多数网络设备,因为协议通用。

image

esp32硬件里内置mac和wlan的phy,没有内置以太网phy,真实使用时需要外接dp83848这类的phy,数据通过RMII接口发送到PHY

MII RMII是类似SDIO的一种接口,专门用于以太网phy

image

esp32 qemu接了一个虚拟的dp83848,模拟了通过RMII配置PHY的过程。是一个完整的模拟器。

PHY属于物理层

mac属于数据链路层

 

第一步:初始化网卡:

初始化mac没有看,目前mac多数芯片内置,硬件固化,配置某些寄存器而已。

主控通过RMII接口MDIO总线,读取的phy 的寄存器,获取速度支持等基本信息,components\esp_eth\include\eth_phy_802_3_regs.h 

IEEE802.3有协议规范:PHY必须有某些寄存器,偏移地址也必须是几,这样所有PHY都可以用同一套代码配置。

BMCR(Basic Mode Control Register)
BMSR(Basic Mode Status Register)

读写这几个寄存器即可实现基本配置。

除了协议规定的,不同phy厂家还另外个性化的配置,不多说。

 

第二步:初始化协议栈:

esp32使用了lwip,基本是初始化后,给数据收、发新建独立的线程,做好异步收发准备。

 

第三步:获取自己的ip 网关 dns:

 动态IP

image

参考 https://www.bilibili.com/video/BV1Gd4y1n7Xz

3.1 发一个dhcp discover包,请求分配局域网IP地址,询问网关和DNS信息。家庭场景,网关就是路由器,访问外网的包都先发到网关。DNS是dns服务器的地址,解析域名要用

3.2 路由器回复给你分配的ip,看你是否接受

3.3 设备向路由器确认IP

3.4 路由器确认

-----------------------------------------------------------

静态IP

image

https://www.bilibili.com/video/BV1ji4y1S7nC

用ARP协议,过程类似DHCP。如图

先广播,检查是否有IP重复,互相更新自己的arp表。ARP协议用来在局域网里互相认识和通信。

网关和dns可以设备用自己静态配置的,也可以再通过dhcp协议动态获取。

 

​​另外,ICMP协议是用来查询局域网状态的,本场景不一定发。 

 

第四步:DNS 域名解析:

此时我们打算访问某个网址了,上层应用程序给出一个域名,比如 example.com,然后通过lwip等协议栈获取example.com服务器的IP地址,不获取mac。

协议栈将采用dns协议

https://www.bilibili.com/video/BV1uL4y1B7aE

dns服务器地址可以本地提前手写,固定配置一个,后续直接用。不过通常是动态获取:

第2步从路由器得到了一个dns服务器的地址,后续直接使用它,发送dns包给dns服务器,让它给你返回example.com的ip地址和mac

 

第五步:HTTP三次握手,发送HTTP包:

HTTP握手、UDP、TCP知识不罗嗦,这些比我讲的好:

https://www.bilibili.com/video/BV1854teHE2d 理解TCP和UDP协议的核心原理和区别

一个http请求的全过程是怎样的? - justloving - 博客园

image

 -----------------------------------

本文只说一个很少有文章讲的事情:IPV4,不可能每个家庭用户都有唯一外网(公网)IP,数据包怎么在设备用户和服务器之间流转?

 当用户设备没有公网IP(仅拥有内网私有IP,如 192.168.x.x)时,服务器响应仍能精准到达用户设备,核心依赖 ​​NAT(网络地址转换)技术​​。这一过程通过地址映射与端口转换实现。

 

通俗的说,就是三大运营商那里用NAT表做了映射,每个家庭光猫映射到一个端口,相当于一个大的局域网,不过是靠端口区分大家的。

再往外大家公用一个公网IP,发请求出去。返回的数据再查NAT表,返回给某个路由器。

路由器再根据设备IP,把数据包返回给某个设备。

 

​​广域网路由转发​​:
每经过一个路由器:
​​重写MAC地址​​:源MAC替换为当前路由器出口MAC,目标MAC替换为下一跳路由器入口MAC。
​​IP地址保持不变​​:源IP(服务器IP)和目标IP(用户IP)始终不变
路由决策依赖路由表(如BGP协议跨AS转发)。
​​到达用户所在局域网​​:
最后一跳路由器(用户网关)通过ARP根据用户IP,查询用户设备的MAC地址,将目标MAC替换为用户设备的MAC

 

IP不变,MAC变。MAC地址是数据链路层(二层)的物理标识,仅在同一局域网内有效,无法跨网络传递。

数据包每经过一个路由器(一跳),其数据链路层帧头(含源/目的MAC地址)都会被​​丢弃并重新封装​​。路由器仅根据网络层(三层)的​​IP地址​​决定下一跳路径

路由器们怎么组网,就是另一个话题了。

 

posted @ 2025-08-10 15:31  园友1683564  阅读(49)  评论(0)    收藏  举报