c# - 如何在高度可靠的批量传输期间减少 TCP ACK 的数量

标签 c# sockets tcp winsock tcpclient

我有一个应用程序,其中两台计算机距离非常近 - 通常彼此相距几英尺。

我在两台计算机上的应用程序之间建立了 TCP 连接。服务器在 Linux 上用 C 语言编写,Windows 上的客户端使用 C# 和 TCPClient。

通过这个套接字,我正在传输非常大的有效载荷,一次通常是千兆字节。

当我使用 Wireshark 监控通信时,我注意到传输的 数据包 中大约有 66% 是 ACK。每个有效负载数据包往往约为 5k。所以 ACK 中的数据百分比非常低,只有一两个百分点。

我应该关心 ACK 的数量吗?我不关心数据包丢失,我希望连接在数据包丢失方面具有高质量。

有什么我可以(或应该?)做的来减少 ACK 的数量吗?

最佳答案

您可能看到的是接收方确认发送方的传输。接收方必须使用 ACK-only 数据包,因为它没有其他任何东西要发送(发送方也发送 ACK——每个 TCP 数据包都包含一个 ACK​​)。

我认为您不必为 ACK 的数量而烦恼——如果窗口大小足够大,发送方就不会等待它们。您应该问自己的问题是 - 我是否获得了我在 LAN 速度上应该获得的吞吐量?

关于c# - 如何在高度可靠的批量传输期间减少 TCP ACK 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221875/

相关文章:

c# - 在 C# 脚本 Azure Function 中使用 ServiceBus 作为输出参数

c# - .NET 线程/接受 TCP 连接中导致 NullReferenceException 的原因是什么?

c# - Windows Phone 8 推送通知空 channel uri

C# ssl 流在发送前不会停止缓冲

c# - 如何在表单中编辑和保存设置?

java - 如何在 Java 服务器上接受多个套接字连接

c - 套接字编程权限被拒绝

vb.net - 如何在在线RTS游戏中同步主机和客户端的游戏? (VB.NET)

ruby - 在 Ruby 中使用 TCP 交换大型 JSON 对象

c - 检测断开的客户端套接字连接(跨平台适用性)