AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1894433
Accepted
Kris Rice
Kris Rice
Asked: 2025-04-25 18:30:19 +0800 CST2025-04-25 18:30:19 +0800 CST 2025-04-25 18:30:19 +0800 CST

无法从 WSL 内部与连接到主机的 USB NIC 进行通信

  • 772
悬赏将于4天后到期。回答此问题的玩家可获得+50声望奖励。Kris Rice希望引起更多人对此问题的关注。
这个问题是从 Server Fault迁移过来的,因为可以在超级用户那里找到答案。 迁移时间 是 3 天前。

我的设置:

我有一台装有 USB 网卡的 Windows 11 主机。我 networkMode按照mirrored以下方式配置了 WSL: https://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking。

然后我可以毫无问题地看到 Linux 内部的适配器。

我可以从 Windows 命令行 ping 适配器,但是无法从 Linux ping NIC。

  • 网卡IP:192.168.2.14
  • Windows 主机 IP(在 NIC 上):192.168.2.10
  • 由于镜像,Linux IP(在 NIC 上):192.168.2.10

我尝试过的方法:

使用连接到我的主网络的默认网络适配器,我可以 ping:Linux -> Windows 主机 -> 网络适配器 -> 通过网络 -> 另一台机器

但是,我无法 ping 通:Linux -> Windows 主机 -> NIC

我也尝试设置 Hyper-V 虚拟适配器并使用它,但仍然没有任何效果。

作为最后的手段,我禁用了所有 Linux 和 Windows 防火墙,但仍然没有成功。

更新:

我将网络模式恢复为默认模式(NAT),并改为usbipd允许 Windows 将 USB 适配器直通到 WSL(因为它是 Asix USB->以太网设备)。这让我更进一步。我编译了一个自定义的 WSL 内核,重新启动,然后安装并加载了 Asix 驱动程序的模块。现在我可以看到适配器,并在其上为我的 Linux 环境设置 IP 地址。

在此处输入图片描述

问题是:我可以ping通,但终端里的ping就卡住了。设备上的指示灯闪烁,表示正在接收数据包。

于是我用 Wireshark 扫描了一下,看看到底是怎么回事。Wireshark 显示适配器确实在响应。那么为什么我的终端卡住了?是不是还有其他问题?

更新 2 我捕获了一些日志。在重建之前,我设法在内核中启用了 USB/IP 日志记录。

我不太确定我在这些日志中寻找什么,也许更有经验的人可以发现这里是否存在问题?

日志链接:https://drive.google.com/file/d/1itXr80wWiOkEglgoDIE2OP5bPNuEtjx3/view?usp =sharing

在此处输入图片描述

windows
  • 2 2 个回答
  • 17 Views

2 个回答

  • Voted
  1. Best Answer
    Kris Rice
    2025-04-30T16:24:47+08:002025-04-30T16:24:47+08:00

    因此,经过一周尝试不同的驱动程序、不同的虚拟化技术(Hyper V、VirtualBox、Qemu),甚至编译我自己的 WSL 内核后,事实证明该设备确实运行良好。

    这个问题与……具体相关ping。在分析了Wireshark中的回复数据包后,我发现Linux下的校验和返回错误,但在Windows下却正常。然后我注意到Linux下的ping数据包比Windows下的大得多。于是我联系了制造商,确认设备可以处理的最大数据包大小是50字节。Linux尝试ping的数据包大小是120字节。

    使用以下方法修复从 Linux 发出的 ping 操作:

    ping -s 32 192.168.2.14
    

    这强制 ping 发送 32 字节数据包。校验和正确后,终端就能报告 ping 成功了。

    • 0
  2. MOD
    2025-05-01T02:43:50+08:002025-05-01T02:43:50+08:00

    由于数据包在网络级别正确传输,因此修改套接字缓冲区参数:

    bash# Apply these settings in WSL
    sudo sysctl -w net.core.rmem_max=26214400
    sudo sysctl -w net.core.rmem_default=26214400
    sudo sysctl -w net.core.netdev_max_backlog=2000
    

    替代诊断命令

    如果这不能解决问题,请尝试以下诊断步骤来缩小故障发生的位置:

    bash# Check where in the stack packets are being dropped
    sudo nstat -az | grep IcmpMsg
    

    尝试绕过标准套接字处理的其他 ping 实现

    sudo hping3 -1 -c 4 192.168.2.14
    

    通过直接套接字访问监控数据包流

    sudo tcpdump -i enx001ce5001009 'icmp[icmptype] = icmp-echoreply'
    

    针对基于 ASIX 的适配器的深度修复

    如果您使用的是 ASIX 芯片组(常见于 USB 以太网适配器),请尝试以下特定选项:

    bash# Unload and reload the driver with different buffer parameters
    sudo rmmod asix
    sudo modprobe asix rx_urb_num=16 tx_urb_num=16
    

    从Wireshark捕获的信息中,我们可以看出,这不是网络连接问题,而是WSL内核在处理USB网络适配器时套接字缓冲区处理的问题。上述解决方案或许可以直接解决发生故障的网络堆栈的特定层。

    • 0

相关问题

  • 如何在 Windows Precision 触摸板上禁用鼠标加速?

  • 批量重命名图像文件集

  • Python 的“pass”参数的批处理等价物是什么?

  • 在 Windows 上与 Docker 守护进程通信

  • 资源管理器侧面板中的桌面外壳快捷方式

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve