我有一个需要大量无线漫游的用例,并且遇到了一个问题,即漫游大约 1 秒后发送数据包有延迟,但我几乎可以立即接收数据包(<100 毫秒)。
查看 netlink 流量,我可以看到请求者正在将接口设置为 IF_OPER_UP,并且它按预期返回 IF_UP。查看 tcpdump,我可以看到漫游后发送流量存在间隙,并且发送流量在 ARP 请求/响应后恢复。我对 Linux 网络不太熟悉,所以我有点迷失可能导致这种情况的原因。我认为 ARP 缓存正在被清除,但我不知道这是原因还是症状,甚至不知道漫游中会发生什么。
我尝试了多个不同的内核版本,iwd 和 wpa_supplicant,以及 ubuntu 和 kali,都得到了相同的结果。
最后,这似乎是从运行 4.15 内核的 ubuntu 16.04 升级后才开始的。
有谁知道我接下来可以在哪里查看以缩小正在发生的事情的范围?还有其他人看到这个吗?
答案1
为了解决这个问题,问题是在内核 4.20 中引入了一项更改,该更改始终会清除漫游时的 ARP 缓存,从而导致大约 1 秒的发送延迟。
iwd 请求者在此处添加了一个补丁来使用这个新选项,这是修复的另一半: https://git.kernel.org/pub/scm/network/wireless/iwd.git/commit/?id=873924a027ad2166436b8117a6bb84ce980ad7f3
commit 873924a027ad2166436b8117a6bb84ce980ad7f3
Author: James Prestwood <[email protected]>
Date: Wed Nov 3 15:15:01 2021 -0700
station: set evict_nocarrier sysfs option during roaming
If the kernel supports evict_nocarrier set this during the roam
to prevent packet delays post roam.