栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么是TCP窗口更新?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是TCP窗口更新?

TCP窗口用于连接上对等方之间的流控制。对于每个ACK数据包,主机将发送“窗口大小”字段。该字段表示主机在数据满之前可以接收多少字节的数据。发送方发送的数据量不应超过该数量。

如果客户端接收数据的速度不够快,则该窗口可能已满。换句话说,当应用程序关闭时,除了从套接字读取数据外,TCP缓冲区可能已满。发生这种情况时,客户端将发送一个“窗口已满”位设置的ACK数据包。此时,服务器应该停止发送数据。发送到具有完整窗口的计算机的任何数据包都
不会
被确认。(这将导致行为不端的发送方重新传输。行为良好的发送方将仅缓冲传出的数据。如果发送方的缓冲区也填满,则发送应用程序在尝试向套接字写入更多数据时将阻塞!)

这是一个TCP停顿。发生这种情况的原因有很多,但最终它仅意味着发送方的传输速度快于接收方的读取速度。

一旦接收端的应用程序恢复到从套接字读取数据,它将耗尽一些缓冲的数据,从而释放一些空间。然后,接收方将发送“窗口更新”数据包,以告诉发送方它可以传输多少数据。发送方开始传输其缓冲的数据,流量应正常流动。

当然,如果接收器持续缓慢,您可能会反复停顿。

我说的这句话好像发送方和接收方不同,但实际上,两个对等方都在与每个ACK数据包交换窗口更新,并且任何一方都可以填充其窗口。

总的信息是您不需要直接发送窗口更新数据包。欺骗一个人实际上不是一个好主意。

关于您看到的异常……它不太可能是由窗口更新数据包引起或阻止的。但是,如果客户端读取速度不够快,则可能会丢失数据。在服务器中,应检查Socket.write()调用的返回值。它可能少于您要写入的字节数。如果发送方的发送缓冲区已满,则会发生这种情况,这可能在TCP停顿期间发生。您可能正在丢失字节。

例如,如果您尝试在每次调用时写入8192字节,但是其中一个调用返回5691,则您需要在下一个调用中发送剩余的2501字节。否则,客户端将看不到该8K块的其余部分,并且您的文件在客户端比在服务器端短。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号