【问题标题】:C++ How to retrieve ACK from a TCP Socket (windows)C++ 如何从 TCP 套接字中检索 ACK (windows)
【发布时间】:2017-05-25 22:55:26
【问题描述】:

我在获取有关 TCP 连接确认的信息时遇到了一些问题。

我已经使用 Windows 套接字实现了一个基本的 TCP 套接字服务器(socket()、listen()、bind()、accept()、send())。通信工作正常,但现在我想检索并观察 TCP 数据包的传入确认。

有谁知道我如何以编程方式获取这些信息?

【问题讨论】:

  • 您可以使用Wireshark 来观察传入/传出的数据包。
  • 这些正在由您使用的网络层为您处理。正如@ymonad 所说,您可以使用wireshark 捕获和查看它们。我不相信 Windows 套接字允许您访问它们。
  • 你不能,除非你使用原始套接字。为什么你认为你需要这个?通常,TCP 中的确认仅通过没有后续故障来检测。
  • 感谢您的支持。我已经想出了如何通过原始套接字嗅探连接。我也考虑过 Wireshark 但不幸的是我需要在 Windows 下分析通过 WLAN 和蓝牙的通信,并且不支持蓝牙。

标签: c++ windows sockets tcp


【解决方案1】:

如果您的应用程序需要知道何时接收到数据,甚至在失败的情况下,多少 已收到,您需要应用程序级确认。

TCP ACK 不属于应用层,它是纯粹的第四层簿记信息。如果第 7 层需要 ACK,您需要在第 7 层添加一个。

相关,keep-alives 也是如此:Asyncsockets and "silent" disconnections

【讨论】:

  • 谢谢本!对于我的分析,我在第 7 层发送添加了一个 ACK​​,因为我找不到适用于 Windows 下的蓝牙和 WLAN 套接字的解决方案。
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 2022-12-10
  • 2013-10-21
  • 2011-09-18
  • 1970-01-01
  • 2012-02-02
  • 2010-10-05
相关资源
最近更新 更多