客户端没有响应 TCP SYN-ACK 数据包以太网驱动程序

客户端没有响应 TCP SYN-ACK 数据包以太网驱动程序

我正在开发以太网驱动程序并实现 TCP 交换代码。为了测试我的 TCP 代码,以下是场景(在 wireshark 上监控):

服务器:自定义以太网设备

客户端:PC

  1. 我从 hercules 实用程序打开了 TCP 客户端套接字。
  2. 我能够看到来自以太网设备和大力神的 ARP 请求和响应交换。
  3. 在 ARP 请求被处理后,客户端发送 TCP SYN 数据包,服务器使用 SYN-ACK 进行响应。
  4. 为了完成三次握手,客户端应该在最后发送 ACK,但我没有收到,而 Hercules 说 TCP 连接超时。

我需要诊断客户端不确认 SYN-ACK 以完成三次握手的可能问题。

TCP SYN ACK 数据包交换图像

答案1

你在哪里捕获,在客户端还是在服务器上?如果你在客户端捕获,请尝试通过以下方式启用 IP 标头校验和验证“编辑 -> 首选项 -> 协议 -> IPv4 -> 如果可能,验证 IPv4 校验和”

在我看来,服务器的 SYN/ACK 数据包的 IP 头校验和为 0,因此无效,如果是这种情况,您必须计算它;否则客户端机器将丢弃该 IP 数据包,因为它无效。

请注意,如果您在客户端上捕获并且客户端的 SYN 数据包的 IP 头校验和为 0,那么正如 Wireshark 所指示的,这可能是因为客户端计算机配置为“IP 校验和卸载”,并且 Wireshark 在硬件计算校验和之前接收数据包。

如果你真的想要查看发生了什么,您应该使用 SPAN 端口或 TAP 在单独的机器上进行捕获;这样,您将收到计算了正确校验和的数据包。有关捕获的更多信息,您可能需要查看 Wireshark 的以太网捕获设置wiki 页面,或者 Jasper Bongertz 的非常有用的 6 部分网络捕获手册,从第 1 部分 - 以太网基础知识其中引用了他的另一篇文章,本地数据包捕获的缺点

相关内容