news 2026/9/26 7:03:10

ESP32/ESP8266网络延迟高?从RTT原理到实战优化全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32/ESP8266网络延迟高?从RTT原理到实战优化全解析

1. 先从一次让人抓狂的“高延迟”说起

如果你做过物联网或者智能硬件开发,大概率遇到过这种场景:ESP8266 或者 ESP32 模块明明连上了路由器,串口监视器里也打印出了 IP 地址,可你在电脑上ping它的时候,延迟数据却高得离谱——几十毫秒、几百毫秒,甚至偶尔直接超时。更奇怪的是,信号满格,距离路由器就两三米,模块也没在跑什么大流量任务,但延迟就是降不下来。

这个“网络延迟高”的问题,几乎成了 ESP 模块开发者的入门必修坑。很多新手第一反应是代码写得有问题,第二反应是模块坏了,第三反应是路由器不行。我在早期调试项目的时候也这么折腾过一轮,最后发现,网络延迟这件事本身,远不止“网络卡不卡”这么简单。它是一整套机制:从路由器到模块、从 Wi-Fi 空口到 TCP/IP 协议栈、从 DNS 解析到 DHCP 租约,每一步都可能给延迟“加点料”。

这篇内容就是想把这些“料”彻底拆开。我不会只丢出“换路由器”“关掉省电模式”之类的万能结论,而是把网络延迟的组成原理、测量方法、ESP 模块高延迟的典型根因,以及亲测有效的优化手段,完整盘一遍。不管你是刚把 ESP8266 点亮屏幕的纯新手,还是被生产环境延迟问题折磨的嵌入式工程师,这篇文章应该都能派上用场。

在进入正文之前,先把一个关键认知立住:延迟和带宽是两码事。带宽决定你“一次能搬多少东西”,延迟决定你“从喊话到听到回应需要多久”。很多人觉得网速快就是延迟低,这是最常见也最致命的误解。后面所有的排查逻辑,都建立在这个区分之上。

2. 网络延迟的构成:一个 RTT 被拆开后能看到什么

2.1 四个分量:传输、处理、排队、传播

“延迟”在专业术语里通常用 RTT(Round-Trip Time,往返时间)来衡量——也就是一个数据包从发送方出发,到达接收方,再回到发送方所花费的总时间。任何一次网络通信的延迟,都不是铁板一块,而是由四个部分叠加出来的:

延迟分量决定因素典型量级(局域网场景)
传播延迟信号在介质中传输的速度,受物理距离和介质影响微秒级,通常可以忽略
传输延迟数据包大小除以链路带宽,也就是“把数据全塞进线路”的时间毫秒级,包越小越快
处理延迟设备(路由器、交换机、模块芯片)检查、转发、封装/解封装数据包的时间数百微秒到几毫秒
排队延迟数据包在设备缓冲区里等待处理的时间,这是波动最大的部分不稳定,高负载时可到几十毫秒

生活里有个特别贴切的类比:你让快递员送一封急件。传播延迟是快递员从 A 地跑到 B 地的路程时间;传输延迟是快递员把信装进背包、从背包里拿出来的动作时间;处理延迟是快递站分拣员看清地址、决定往哪个站点送的时间;排队延迟则是货架上堆满了包裹、你的急件只能排在后面等着。

在局域网里,前两个分量基本是恒定且微小的,问题几乎都出在后面两个。尤其是排队延迟——一旦路由器或者模块的数据缓冲被占满,你的数据包就得老老实实排队,这时候延迟会肉眼可见地飙升。ESP 模块的网络延迟异常,绝大多数时候都是处理延迟和排队延迟在作怪,而不是信号“传得太慢”。

2.2 为什么 Ping 通了不代表体验好

Ping 工具利用的是 ICMP 协议,它发出的探测包体积非常小,通常只有 32 字节或 64 字节。这种小包在网络里几乎是“插队”的存在,优先级很高,不太会在缓冲区里滞留太久。所以你会遇到一种诡异的场景:ping延迟只有 10 毫秒,但真正传输业务数据的时候,延迟高到应用层直接超时重连。

原因在于,Ping 测的是 ICMP 包的往返时间,而你跑 MQTT、HTTP 请求用的是 TCP 数据包。TCP 包有序列号、确认号、窗口大小,还要经过分段、重组、校验,处理链路比 ICMP 复杂得多。再加上 ESP 模块的 TCP/IP 协议栈是精简过的(特别是 ESP8266 上的 lwIP 协议栈),小包和正常业务包的处理时间差距会被进一步放大。

所以,在排查 ESP 模块延迟问题时,不要只盯着 ping 的结果。ping 只是第一道筛查工具,真正能暴露问题的是带业务负载的测试——这后面我会专门讲到。

2.3 抖动的含义:比平均延迟更重要的指标

除了 RTT,网络里还有一个高频出现的词:抖动(Jitter)。抖动指的是连续多次测量中,延迟数据的波动程度。假设你测了 10 次 ping,平均延迟是 50 毫秒,但每次震荡在 20 毫秒到 120 毫秒之间,这种场景比“每次都稳定在 50 毫秒”要糟糕得多。

对 ESP 模块这种弱终端来说,抖动是最伤人的。因为模块的 TCP 超时重传定时器往往设置得比较保守(通常在 1 秒以上),一旦抖动导致某个数据包没及时收到 ACK,模块就会误判丢包,触发重传。重传会加倍占带宽,又进一步加剧抖动,形成恶性循环。很多设备“隔三差五掉线”的元凶,就是抖动而不一定是真的断网。

在 Linux 或者 Windows 下执行ping时,输出里会附带一个mdev(平均偏差)指标,很多新手根本不看它。mdev 越大,说明抖动越严重,这个数值有时候比平均延迟更能说明问题。

3. ESP 模块延迟高的典型根因:从硬件到协议栈逐层排查

3.1 廉价的晶振与射频前端硬件瓶颈

ESP8266 和 ESP32 模组之所以便宜,很大一部分成本省在了前端射频电路和晶振上。晶振的频率精度直接影响 Wi-Fi 信号的载波同步质量。如果晶振偏差偏大,模块在和路由器通信时就需要反复做频率校正,导致接收灵敏度下降,进而表现为“信号显示很好,但数据交互很慢”。

这个问题在兼容性差的模组上尤其明显。市面上的 ESP 模组品牌五花八门,不同厂家的射频调校水平差距极大。同一个固件烧进 A 厂和 B 厂的同型号模块,实测延迟可能差出 20 毫秒以上。所以如果你在批量项目中遇到延迟异常,先怀疑模块批次和封装来源,别急着改代码。

另一个从硬件层面容易被忽略的点是天线。PCB 天线、外置天线、陶瓷天线,三种天线的增益和方向性各不相同。模块工作时如果天线附近有金属外壳或者大面积覆铜,射频信号会被吸收和反射,Wi-Fi 在空口上反复重传,延迟自然就上去了。我这里踩过一个很实在的坑:把 ESP32 塞进金属接线盒后,ping 延迟从 15 毫秒直接飙到 200 毫秒,后来把天线引到盒外才恢复正常。

3.2 Wi-Fi 空口环境:2.4GHz 频段的拥挤与干扰

ESP 模块几乎都跑在 2.4GHz 频段,而这个频段本身就是重灾区。蓝牙、无线鼠标、微波炉、隔壁路由器,全挤在 1 到 13 信道上。Wi-Fi 是半双工共享介质,同一信道里同时传输的数据帧越多,每个设备等待空口空闲的时间就越长,排队延迟直接膨胀。

我之前在办公区做过一次实测:把 ESP32 放在固定位置,分别连接 1 信道路由器和 6 信道路由器,在同样距离下延迟差达到 30 到 40 毫秒。原因就是 6 信道在这个办公区被至少五个路由器占满,空口竞争太激烈。这是极其常见的延迟放大因素,也恰恰是最容易被新手忽略的因素,因为物理环境是看不见的。

调路由器信道要注意,2.4GHz 频段里只有 1、6、11 这三个信道是互不重叠的,其他信道之间都会互相干扰。你还需要把周边邻居的路由器信道摸清楚,选一个相对空闲的。手机装个 Wi-Fi 分析仪类的 App,五分钟就能扫出来。

3.3 lwIP 协议栈参数与内存分配的影响

ESP8266 默认用的 lwIP 协议栈(ESP32 上则有 lwIP 和 esp-netif 两层结构)为了在几十 KB 内存里跑通 TCP/IP,做了大量取舍。这些取舍直接影响延迟表现,有几个点是特别值得注意的:

第一是TCP 发送缓冲区和接收窗口。ESP8266 的 lwIP 默认发送缓冲区往往只支持几个 TCP 分段,窗口很小。当业务数据超过缓冲区大小时,协议栈必须等收端 ACK 腾出空间才能继续发,这个过程每走一个 RTT,吞吐就受限一次,表现上就是“数据发不快,延迟下不来”。

在 Menuconfig 或者代码里会发现TCP_SND_BUF和TCP_WND这两个参数。如果你跑 MQTT 或者 HTTPS,适当调大这两个值能明显减少等待 ACK 的时间。但要注意 ESP8266 的内存只有 80 多 KB 可用,调大的代价是可能 OOM,需要平衡。

第二是Nagle 算法与延迟 ACK 的交互。Nagle 算法会把多个小数据包合并发送,延迟 ACK 是接收方故意等待一段时间再回确认。两者叠加时,可能出现额外的几十毫秒等待。对实时性要求高的场景,可以关闭 Nagle(设置 TCP_NODELAY),让数据包即时发送。代价是空口上的小包数量会增加,可能带来一定的吞吐损失。

第三是协议栈任务优先级。ESP32 上 lwIP 是在单独的 FreeRTOS 任务里跑的,如果其他任务占用 CPU 时间片过长,协议栈任务就会被饿着,延迟对应拉高。我在一个项目里把 ADC 采样任务优先级调到很高,结果 TCP 延迟跟着涨了十几毫秒,查了很久才发现是任务调度问题。

3.4 DHCP 与 DNS:隐藏在网络连接中的时间黑洞

很多人排查延迟只看链路通不通,却忘记设备连上网络后还会发生很多“周期性”的工作。DHCP 租约刷新就是典型例子。ESP 模块默认的 DHCP 租期一般是一个小时左右,每次租约到期前,模块会发起续租请求。如果路由器上没有正确记录租约,或者模块在深度睡眠后重新连接,续租过程可能反复拉锯,导致那几秒内网络响应极慢。

DNS 解析则是另一个隐蔽的延迟来源。ESP 模块每次发起 HTTP 请求时,如果目标地址是域名,就必须先解析 DNS。默认配置下,模块用的 DNS 服务器是路由器下发的,如果这个 DNS 服务器响应慢,或者解析过程需要递归查询多个节点,一次域名解析就要几秒钟。很多“设备偶尔卡一下”的灵异现象,最后查出来都是 DNS 解析在捣乱。

规避思路有两个:一是把高频访问的 IP 直接硬编码或缓存到 flash 里,不走每次解析;二是在路由器端设置一个解析快、支持缓存的本地 DNS,减少重复递归查询。对于生产环境的 ESP 设备,强烈建议接入层就把“设备到云”的链路做成长连接,把 DNS 消耗控制在连接建立阶段,而不是每次请求都解析一次。

4. 测量网络延迟的常用手段:从 Ping 到带负载实测

4.1 Ping 的进阶用法与参数解读

Ping 是最基础的延迟测量工具,但很多人并没有把它用透。默认ping通常是连续发 4 个包,这个样本量太少,抖动和偶发问题根本暴露不出来。建议在 Windows 上用ping -t,在 Linux 上用ping -c 100,持续发更多的探测包,再看综合统计。

下面这些参数是我在实际排查中常用的:

参数作用典型命令
包大小通过增大包体积测试承载能力ping -s 1000(Linux)
发送频率加大压力观察排队延迟ping -i 0.2(Linux,200ms 一次)
超时时间调整等待响应的时间阈值ping -W 1000(Linux,1 秒超时)
记录路由查看每一跳的延迟分布ping -R(Windows)

解读结果时,有一个参数常年被忽略:丢包率。对 ESP 这种弱终端来说,哪怕丢包率只有 1%,实际体验都可能雪崩。因为模块自身的重传机制不完善,加上 Wi-Fi 空口本来就存在 CRC 错误重传,MAC 层的重传叠加 TCP 层重传,会让有效延迟放大很多倍。挂机 ping 20 分钟,如果丢包率超过 0.5%,这个链路就要重点查了。

4.2 Traceroute 定位延迟瓶颈在哪一跳

如果局域网内 ping 延迟正常,但访问公网延迟很高,问题可能出在中间链路的任何一跳。Traceroute 的思路是“逐跳探测”,每次发出一个 TTL 为 1 的数据包,经过第一跳后 TTL 减为零,第一跳设备返回超时信息,然后依次递增 TTL,直到到达目的地。

Windows 用tracert,Linux 用traceroute -n,建议加上-n参数跳过 DNS 反向解析,否则工具本身会花大量时间在解析每一跳的路由器域名上,拖慢整体输出,而且容易误判成“某一跳很慢”。

输出结果里,如果某一跳的延迟时间突然跳升几十毫秒,而后续跳数基本保持这个水平,那带宽瓶颈或运营商级转发产生的排队延迟就集中在这一跳。对局域网内的 ESP 调试来说,traceroute 主要用于确认你有没有被路由器“截胡”——比如模块应该直连主路由,结果被某个 Mesh 节点或者中继设备转发了,延迟自然会翻倍。

4.3 真实业务负载才是最终判断标准

刚才提到过,ping 测的是 ICMP 小包,结果不能完全代表业务数据。想真正评估 ESP 模块在高延迟环境下的表现,必须用真实协议做压力测试。这里给出两种方式:

第一种是 TCP 吞吐测试。让 ESP 模块循环向服务器发送固定大小的数据,服务器端记录每个包的接收时间戳,然后计算端到端的每包延迟均值。写个简单的 Python 脚本最长不超过一百行,能跑出比 ping 靠谱十倍的数据。

第二种是应用层 RTT 测试。比如用 MQTT,在设备端发布消息后立刻订阅同一个主题的回包,测量从发布到收到回包的耗时。这个方法测量的是完整业务链路,包含协议处理、网络栈、服务器回包时间,是用户真实感知的延迟,而不是底层 ICMP 的指标。

我自己调试 ESP32 时写过一个测试固件:ESP32 每隔 500ms 发一个 UDP 包给上位机,包里带本地时间戳,上位机收到后马上计算单程延迟。跑一晚上,把数据存下来画曲线,哪个时段抖动大、什么时候出现尖峰,一目了然。工具链不复杂,关键是有没有这个测试意识。

5. 优化 ESP 网络延迟的实践经验:不换硬件也能见效

5.1 关闭省电模式:最简单也最容易被忽略的一步

Wi-Fi 省电模式(Wi-Fi Power Save)的工作原理是让模块周期性睡眠,醒来时集中处理帧。这个机制省电,但对延迟极不友好:模块可能几十到几百毫秒都在打盹,数据来了也只能排队等它醒。到醒来那一刻,积压的数据帧一起处理,表现就是延迟忽高忽低,抖动巨大。

在 Arduino 环境里,ESP8266 可以调用wifi_set_sleep_type(NONE_SLEEP_T)来关闭省电;ESP32 则通过esp_wifi_set_ps(WIFI_PS_NONE)实现。实测下来,关闭省电后,延迟抖动通常能降一个量级。

代价是功耗上升。如果设备是电池供电且对延迟不敏感(比如每天上报一次数据的传感器),其实不用关,毕竟省电模式几十毫秒的延迟在超低频上传场景里根本不是事。但如果你做的是智能开关、遥控小车这类需要即时响应的项目,关掉省电是第一步。

5.2 调整 Wi-Fi 协议参数:缩短空口竞争时间

Wi-Fi 空口上有几个协议参数对延迟有直接影响,只是多数人不怎么碰它们。比如 RTS/CTS 阈值(RTS Threshold)和分片阈值(Fragmentation Threshold)。当数据包大小超过分片阈值时,会被切分成多个小帧传输,一定程度上降低单个大帧出错后整体重传的代价,但增加帧数量和空口开销。

而 RTS/CTS 机制是发送方先发一个 RTS 控制帧,申请占用信道,接收方回 CTS 确认后才开始传数据。这个机制在“隐蔽终端”场景(两个设备都能看到路由器,但互相听不到对方)下能显著减少碰撞重传,代价是每次传输多握两次手。

在 ESP-IDF 下你可以用esp_wifi_set_protocol配合配置参数去调整。但对于绝大多数家用环境,不建议乱动这两个值,默认配置通常是合理折中。这个知识点最大的实际价值是给“为什么换了路由器后延迟变好了”提供一个解释——很多高端路由器的出厂设置里,自动启用了更激进的重传优化和帧聚合策略。

5.3 提高时钟频率与调整 CPU 频率:别让计算成为瓶颈

ESP32 默认 CPU 主频是 240MHz,但有些低功耗模式或者特定 SDK 配置下,主频会被降到 80MHz 或者 160MHz。Wi-Fi 协议栈要做加解密、校验和数据拷贝,主频降一半,处理延迟几乎也直接翻倍。在断电电池类项目中,厂商往往默认选择降频保功耗,导致用户感觉“网络卡”。

如果你的设备不需要极端省电,建议把 CPU 频率拉到上限:Arduino 环境里设置setCpuFrequencyMhz(240),ESP-IDF 里在 menuconfig 中直接选 240MHz。这个调整对延迟的改善是“立竿见影”的。但要提醒一句,降频和延迟并不是严格的线性关系,240MHz 对比 160MHz 在纯 Wi-Fi 吞吐场景下提升可能没那么明显,不过对 TLS 加密通信的帮助会很大。

此外,ESP32 是双核架构,默认情况下 Wi-Fi 协议栈跑在 PRO_CPU,而 Arduino 的loop()也跑在同一个核上。如果你的loop()里有大段的阻塞操作,比如delay()或者复杂的计算,Wi-Fi 协议栈任务就会被拖慢。解决办法是用xTaskCreatePinnedToCore把 Wi-Fi 相关或者主业务逻辑迁移到 APP_CPU 上,和协议栈任务做核心隔离。

5.4 网络拓扑与天线位置:改变物理布局获得秩序感

针对延迟高的问题,换硬件不是唯一办法,很多时候调整物理布局比调整代码更有效。给 ESP 模块供电时要注意电源质量——Wi-Fi 发射瞬间的电流尖峰可能达到 300mA 以上,如果电源芯片动态响应不足,射频前端供电会被拉垮,导致发送功率不达标甚至 CRC 错误,大量帧需要重传,延迟飙升。

在天线端,尽量让天线垂直朝上且周围 10 厘米内没有金属物体。模组天线预留的净空区(keep-out area)下方不要铺铜,这在画板阶段就要确定好。另外,中等距离下优先用 5GHz 频段。虽然 ESP8266 不支持,但 ESP32 的部分型号能跑 5GHz。同一位置实测,5GHz 下的延迟普遍比 2.4GHz 低 20% 以上,因为 5GHz 频段干扰源少、空口干净。

如果项目允许多设备组网,还可以考虑把路由器设置为“仅 802.11n”模式,关闭 b/g 协议的兼容性支持。兼容模式打开时,路由器为了保证老设备能通信,每个帧里都会加额外的保护间隔,Wi-Fi 空口效率反而下降,这种开销叫“保护机制开销”。关掉后,新协议设备的延迟会受益,代价是 802.11b/g 老设备无法连接。

5.5 关于 TCP_NODELAY 与 KeepAlive 的实测记录

前面提到 Nagle 算法和延迟 ACK 的交互问题。在 ESP-IDF 中,对每个 TCP socket 可以执行:

int flag = 1; setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));

这样设置后,发送端不再合并小包,有数据就立刻发出。我在同一个局域网下做过一组对比测试:开启 TCP_NODELAY 后,MQTT 协议的端到端往返延迟平均降了 15 到 20 毫秒。代价是数据包数量增加,网络利用率稍微变差,但对我来说这个交换是值的。

与 TCP_NODELAY 配套的是 KeepAlive 参数。ESP 设备往往长时间保持空闲连接,如果路由器或者运营商把空闲会话回收了,下一次发数据时连接已经失效,模块要先经过 TCP 超时重传才发现连接断了,再重建,这个恢复过程动辄几十秒。合理配置SO_KEEPALIVE,周期性发送探测包,能有效防止空闲连接被回收。Arduino 环境下的 WiFiClient 库一般没有直接开放这个接口,需要走底层 socket。

5.6 设备端周期性重启与固件升级的“土办法”

听起来不高级,但确实是实战必备的兜底手段。ESP 模块的内存碎片化问题在长时间运行后几乎无法避免。lwIP 协议栈频繁分配和释放缓冲块,堆碎片越积越多,新的连接可能分配不到连续内存,被迫等待或直接失败。短时间看不出问题,运行一周之后延迟和稳定性就会恶化。

我的处理方式是:在固件里做一个周期检查——统计异常延迟或者连接失败的次数,达到阈值就软重启。虽然不如彻底修复内存管理优雅,但对无人值守的 IoT 设备来说,稳定性优先。与其让设备在碎片化里苟延残喘,不如每 48 小时主动重启一次,换来的是长期稳定的延迟表现。

固件升级同理,很多 ESP 厂商早期固件的 lwIP 配置和射频驱动存在明显缺陷,后续版本会针对特定路由器兼容性问题做修复。遇到延迟异常时,去官网查一下有没有同型号的新固件,先把底层补丁打上再排查上层逻辑。

6. 把延迟当作系统问题来治理,而不是单点指标

网络延迟从来不是某一个单项因素能解释的。它像一条链子,任何一环松动,都会让端到端的体验滑坡。ESP 模块的延迟问题之所以特别顽固,是因为这个链子的环节特别多:模组射频、天线布局、路由器信道、协议栈参数、任务调度、供电纹波、DNS 配置,甚至外壳材质都会插一脚。

我个人的体会有三点:第一,遇到延迟高先别急着改代码,先把环境变量排清楚,确定物理层和链路层没有大问题,再进协议层;第二,测量手段一定要多样,ping 只是最快的一步,真实业务负载下的 RTT 曲线才是你优化的标尺;第三,延迟优化是均衡的艺术,关省电、提频率、开 TCP_NODELAY 这些操作都会带来功耗或资源上的代价,关键要看你项目的真实场景。

最后分享一个我一直在用的小技巧:给测试固件里埋一个“延迟日志”功能,每次 MQTT 收发包都记录 RTT 到 SPIFFS 或者通过串口输出。这样即使设备已经部署到现场,返回来也能直接分析历史延迟曲线。排查网络问题最怕的其实不是不知道怎么办,而是手里连数据都没有。有一份连续的延迟记录,大多数疑难杂症都能定位得八九不离十。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 7:01:29

Django+协同过滤:构建音乐推荐系统与可视化大屏

每年到这个时间点,总有一批同学为毕业设计选题挠头。如果你懂一点 Python,又不想做烂大街的图书管理系统或商城,那我强烈建议你看看这个方向:做一个基于 Django 协同过滤的音乐推荐系统,再配一套 Echarts 可视化大屏。…

作者头像 李华
网站建设 2026/9/26 7:00:46

Vue Router多URL映射组件页面:从路由机制到工程化实践

Vue Router 多URL映射组件页面:从路由机制到工程化实践做Vue开发的朋友大概率都碰到过这个场景:项目里有两个入口链接,域名后缀不一样,点进去要渲染的却是不同的业务页面。有人第一反应是“我复制一套组件,分别挂到两个…

作者头像 李华
网站建设 2026/9/26 7:00:21

基于Django与Flask的雪具租赁系统实战:库存、权限与部署

1. 项目背景与核心需求拆解:我在雪场蹲了三天才动手滑雪场雪具租赁服务系统这个项目,最早其实是被一线员工“逼”出来的。我在北方一个中型滑雪度假区做技术顾问时发现,租赁部的工作方式还停留在手工台账阶段:上午九点到十一点是取…

作者头像 李华
网站建设 2026/9/26 6:58:42

Seedance 2.5 Draft模式:480P草稿加速视频生成API迭代

1. 从"抽卡式生成"到"草稿先行":Seedance 2.5 的 Draft 模式到底改了什么做视频生成这行的朋友应该都有体会,最让人肉疼的不是模型效果不好,而是"效果不确定的时候就得烧钱"。以前用视频生成 API,你…

作者头像 李华
网站建设 2026/9/26 6:58:37

多跳WSN硬件损伤下物理层安全仿真:路径选择与保密容量分析

这篇博客记录我在做“多跳收集-传输无线传感器网络性能增强”仿真项目时的完整思路。项目本身并不算复杂:一个多跳WSN,源节点要把传感器采集的数据经过若干中继送到sink,但此时有一个被动窃听者躲在附近,而且每个节点的收发机并不…

作者头像 李华