gpt4 book ai didi

sockets - SO_RCVBUF 怎么会小于 TCP 接收窗口呢? (Windows XP)

转载 作者:可可西里 更新时间:2023-11-01 02:43:11 30 4
gpt4 key购买 nike

我有一个在 Windows XP 上使用 TCP 的应用程序。当我使用 SO_RCVBUF 选项调用 getsockopt 时,它报告 8192 字节。但是,Wireshark 显示该应用程序通告 64K 的接收缓冲区。这怎么可能?要有64K的接收窗口,难道不需要64K的缓冲区吗?是否有两种不同的缓冲区?

最佳答案

我正在研究这个,我认为 SO_RCVBUF 和 TCP 窗口不一定是同一件事。

如果你看http://msdn.microsoft.com/en-us/magazine/cc302334.aspx“Windows NT 和 Windows 2000 套接字体系结构” 部分,您会看到 Windows 内核套接字驱动程序 Afd.sys 位于传输协议(protocol)之上。它有自己的 socket SND/RCV 缓冲区,这些缓冲区是您在套接字选项 SO_SNDBUF 中设置的,SO_RCVBUF 或通过 Afd 注册表项。然后 TCP 传输协议(protocol)有它自己的 TCP 窗口缓冲区,这是每个人都熟悉的,要么在注册表 Tcpip 参数中设置,要么自动确定困惑从何而来。 http://msdn.microsoft.com/en-us/library/ms819736.aspx

所以我相信数据会根据需要从传输层读取到 afd.sys 套接字缓冲区 SO_RCVBUF 中,等待应用程序读取数据。您可能希望 SO_RCVBUF 至少与您希望一次读取的数据一样大。

但是我不知道 SO_RCVBUF 和 TCP 窗口将如何相互作用。 TCP 会等到 ACK 数据被读入 SO_RCVBUF 吗?我不清楚。

关于sockets - SO_RCVBUF 怎么会小于 TCP 接收窗口呢? (Windows XP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655057/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com