esp32等网络设备 初始化、联网、发出一个http请求全程简述
用esp32 qemu模拟器实验的,但是原理适用于多数网络设备,因为协议通用。

esp32硬件里内置mac和wlan的phy,没有内置以太网phy,真实使用时需要外接dp83848这类的phy,数据通过RMII接口发送到PHY。
MII RMII是类似SDIO的一种接口,专门用于以太网phy

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都可以用同一套代码配置。
读写这几个寄存器即可实现基本配置。
除了协议规定的,不同phy厂家还另外个性化的配置,不多说。
第二步:初始化协议栈:
esp32使用了lwip,基本是初始化后,给数据收、发新建独立的线程,做好异步收发准备。
第三步:获取自己的ip 网关 dns:
动态IP

参考 https://www.bilibili.com/video/BV1Gd4y1n7Xz
3.1 发一个dhcp discover包,请求分配局域网IP地址,询问网关和DNS信息。家庭场景,网关就是路由器,访问外网的包都先发到网关。DNS是dns服务器的地址,解析域名要用。
3.2 路由器回复给你分配的ip,看你是否接受
3.3 设备向路由器确认IP
3.4 路由器确认
-----------------------------------------------------------
静态IP

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 - 博客园

-----------------------------------
本文只说一个很少有文章讲的事情: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地址决定下一跳路径。
路由器们怎么组网,就是另一个话题了。
浙公网安备 33010602011771号