delphi – 谁将TCP窗口大小设置为0,Indy或Windows?
我们有一个应用程序服务器,当网络拥塞时(在客户端的站点),已经观察到发送带有TCP窗口大小为0的标头.
我们想知道是否是Indy或底层Windows层负责根据标称64K调整TCP窗口大小以适应可用吞吐量. 因此,欢迎任何信息,链接,指向Indy代码的指针…… 免责声明:我不是网络专家.请保持答案可以理解为平均我;-) 更多血腥细节: 所以核心问题是谁将窗口大小设置为0以及在哪里? 解决方法
TCP标头中的窗口大小由TCP堆栈软件正确设置,以反映可用缓冲区空间的大小.如果您的服务器正在发送窗口设置为零的数据包,则可能是因为客户端发送数据的速度比服务器上运行的应用程序正在读取数据的速度快,并且与TCP连接关联的缓冲区现已满.
如果客户端发送数据的速度快于服务器可以读取的速度,则这是TCP协议的完全正常操作.客户端应该避免发送数据,直到服务器发送非零窗口大小(没有任何意义,因为它无论如何都会被丢弃). 这可能会也可能不会反映客户端和服务器之间的严重问题,但如果条件仍然存在,则可能意味着服务器上运行的应用程序已停止读取接收的数据(一旦开始读取,这将释放TCP的缓冲区空间,并且TCP堆栈将发送一个新的非零窗口大小). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |