You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NDIS修改过滤驱动Send功能异常,调用NdisFSendNetBufferListsComplete后无响应

NDIS过滤驱动TX路径问题解答

核心问题1:NdisFSendNetBufferListsComplete触发的逻辑

  • 调用该函数的本质是过滤驱动向上层协议栈宣告:已处理完上层下发的发送NBL请求,上层可回收对应的NET_BUFFER、NET_BUFFER_LIST结构体以及关联的报文内存。
  • 若返回的NET_BUFFER_LIST结构体的Status字段设为NDIS_STATUS_SUCCESS,TCP/IP协议栈会判定该报文已被成功发送到网络链路层,无发送错误。
  • 注意:协议栈此处的「发送成功」仅代表报文已脱离协议栈管控,不会再跟踪该原始NBL对应报文的后续链路层、网络层响应,和你克隆后发起的发送请求完全无关联。

核心问题2:TX路径出站报文正常但无响应的根因排查

你当前的问题90%以上概率是克隆注入的NBL元数据配置错误,常见问题点如下:

  • 克隆NBL时未正确拷贝原始NBL的SourceHandle、NetBufferListInfo字段必填项,比如VLAN标签、校验和卸载标记、NBL所属网络适配器上下文。RX路径正常是因为接收注入的元数据要求远低于发送路径,TX路径如果元数据错误,哪怕报文载荷正确,也可能出现网卡/下层驱动校验失败、交换机直接丢弃报文的问题。
  • 调用NdisFSendNetBufferLists时,SendFlags参数未和原始下发的SendFlags对齐,特别是NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK标记如果未开启,协议栈不会将你注入的发送报文和对应的接收响应做关联,就算ICMP响应到达网卡,协议栈也会判定和之前发出的ping请求无关,直接丢弃。
  • 如果你修改了报文的源IP、源MAC或上层端口,未同步更新NetBufferListInfo里的对应卸载参数,会导致校验和计算错误,对端收到报文后直接丢弃,自然不会返回响应。

快速验证方法

可以先关闭测试网卡所有的卸载功能(TCP校验和、UDP校验和、IP校验和、大包发送卸载全部禁用),再做ping测试,如果此时能收到响应,即可确认是NBL的卸载元数据配置错误导致的问题。

内容的提问来源于stack exchange,提问作者Rakoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:15:00