我对在应用程序中增加 TCP 窗口大小有一些疑问。在我的 C++ 软件应用程序中,我们使用 TCP/IP 阻塞套接字从客户端向服务器发送大小约为 1k 的数据包。最近我遇到了这个概念 TCP Window Size。所以我尝试使用 和setsockopt()将值增加到 64K 。增加此值后,WAN 连接的性能得到了一些改进,但 LAN 连接没有。SO_SNDBUFSO_RCVBUF
根据我对 TCP Window Size 的理解,
客户端将数据包发送到服务器。达到此 TCP 窗口大小后,它将等待确保从服务器接收到窗口大小中第一个数据包的 ACK。在 WAN 连接的情况下,由于 RTT 中大约 100 毫秒的延迟,ACK 会从服务器延迟到客户端。因此在这种情况下,增加 TCP 窗口大小可以补偿 ACK 等待时间,从而提高性能。
我想了解我的应用程序的性能如何提高。
在我的应用程序中,即使setsockopt在套接字级别使用 TCP 窗口大小(发送和接收缓冲区)增加了,我们仍然保持 1k 的相同数据包大小(即,我们在单个套接字发送中从客户端发送到服务器的字节)。我们还禁用了 Nagle 算法(将小数据包合并为大数据包的内置选项,从而避免频繁的套接字调用)。
我的疑惑如下:
由于我使用的是阻塞套接字,对于每个 1k 的数据包发送,如果 ACK 不是来自服务器,它应该阻塞。那么仅在 WAN 连接中提高 TCP 窗口大小后性能如何提高呢?如果我误解了 TCP Window Size 的概念,请纠正我。
为了发送 64K 的数据,我相信我仍然需要调用套接字发送函数 64 次(因为我通过阻塞套接字每次发送 1k),即使我将 TCP 窗口大小增加到 64K。请确认。
使用 RFC 1323 算法启用窗口缩放的 TCP 窗口大小的最大限制是多少?
我的英语不太好。如果您无法理解以上任何内容,请告诉我。