![未接收大于 1472 的 UDP 数据包](https://linux22.com/image/1613182/%E6%9C%AA%E6%8E%A5%E6%94%B6%E5%A4%A7%E4%BA%8E%201472%20%E7%9A%84%20UDP%20%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我有 1 个# 客户端应用程序。它使用 UDP 将数据发送到我的服务器。
但是,在我升级到 Windows 2019 Server 后,它就停止工作了。
它停止工作的原因包含在此链接中:
本质上,它说的是:
我的结论是,此优化(UDP 校验和卸载)在 1809 版本中已损坏,并且在 1903 版本中仍然损坏。要暂时解决此问题,需要禁用此优化(默认情况下似乎已启用)。这可以在设备管理器中完成。在列表中找到您的网络适配器卡,然后进入“高级”选项卡。我们只处理 IPv4,但 IPv6 也可能受到影响,因此您可能需要禁用两者。
这对我来说不起作用,因为:
我们刚刚测试了最新的 Windows 10 版本 1903,但仍然无法解决这个问题。
因此,对于我的产品,我需要能够通过单工机制发送。我正在查看 TCP,但我看不到单工“设置”?
有什么建议吗?
额外的
因此,我想使用单工的原因是我想使用连接到 Raspberry Pi 的 GSM 调制解调器将字节数组数据发送到我的服务器。我更喜欢使用 UDP,因为它确实会等待服务器的任何响应,因为没有给出任何响应,即收到有关帧的信息。
我发现 GSM 调制解调器确实像双工连接并且总是重置其 DHCP 地址,从而使应用程序无用。
所以,就像我说的,它适用于旧版 Windows 操作系统,但不适用于新版操作系统。
我还是更喜欢使用 UDP。该链接中的建议不起作用。
因此,我在 Google 上搜索了 TCP 连接 - 知道它不适合我的应用程序结构 - 但想知道是否可以将其设置为单工协议而不是双工协议,从而避免“需要握手”。
关于单纯形法,Google 搜索结果为零。
因此,由于我无处可去,我出于绝对的绝望,在这里提出了这个问题,
答案1
TCP 是全双工连接,但您可以通过它发送单工数据。在较低层,tcp 将建立连接并发送数据包。接收方将为收到的每个段发送确认,但除非您使用原始套接字,否则应在网络堆栈中处理该问题。
只需确保启用窗口缩放并在客户端上使用较大的接收窗口,这将防止出现 TCP 窗口已满问题。如果发送方和接收方位于同一网络上,则默认设置不会出现此问题。
如果您需要跨 WAN 链路或互联网,则可能需要计算 BDP 或带宽延迟乘积。这将使用您要发送的带宽和往返时间来计算所需的接收窗口。