当前位置: 首页 > 知识库问答 >
问题:

什么计时器可以防止TCP窗口更新数据包丢失

贾俊喆
2023-03-14

下面是我在连接末尾看到的数据包序列(需要更多数据):

No.     Time            Source                Destination           Protocol Length Info
 122160 21:24:37.421824 192.168.15.121        72.21.81.253          TCP      60     41200 > http [ACK] Seq=462 Ack=2984241 Win=5152 Len=0
 122162 21:24:37.445528 72.21.81.253          192.168.15.121        TCP      1514   [TCP segment of a reassembled PDU]
 122163 21:24:37.445796 72.21.81.253          192.168.15.121        TCP      1514   [TCP segment of a reassembled PDU]
 122164 21:24:37.446087 72.21.81.253          192.168.15.121        TCP      1514   [TCP segment of a reassembled PDU]
 122171 21:24:37.481802 192.168.15.121        72.21.81.253          TCP      60     41200 > http [ACK] Seq=462 Ack=2988621 Win=784 Len=0
 122184 21:24:37.744838 72.21.81.253          192.168.15.121        TCP      838    [TCP Window Full] [TCP segment of a reassembled PDU]
 122185 21:24:37.745048 192.168.15.121        72.21.81.253          TCP      60     [TCP ZeroWindow] 41200 > http [ACK] Seq=462 Ack=2989405 Win=0 Len=0
 122190 21:24:38.014841 72.21.81.253          192.168.15.121        TCP      60     [TCP Keep-Alive] http > 41200 [ACK] Seq=2989404 Ack=462 Win=15872 Len=0
 122191 21:24:38.014993 192.168.15.121        72.21.81.253          TCP      60     [TCP ZeroWindow] 41200 > http [ACK] Seq=462 Ack=2989405 Win=0 Len=0
 122232 21:24:38.534437 72.21.81.253          192.168.15.121        TCP      60     [TCP Keep-Alive] http > 41200 [ACK] Seq=2989404 Ack=462 Win=15872 Len=0
 122233 21:24:38.534599 192.168.15.121        72.21.81.253          TCP      60     [TCP ZeroWindow] 41200 > http [ACK] Seq=462 Ack=2989405 Win=0 Len=0
 122314 21:24:39.564525 72.21.81.253          192.168.15.121        TCP      60     [TCP Keep-Alive] http > 41200 [ACK] Seq=2989404 Ack=462 Win=15872 Len=0
 122315 21:24:39.564680 192.168.15.121        72.21.81.253          TCP      60     [TCP ZeroWindow] 41200 > http [ACK] Seq=462 Ack=2989405 Win=0 Len=0
 122361 21:24:43.403052 192.168.15.121        72.21.81.253          TCP      60     [TCP Window Update] 41200 > http [ACK] Seq=462 Ack=2989405 Win=119904 Len=0
 122892 21:25:45.161896 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 122902 21:25:45.373289 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 122927 21:25:45.813267 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 122936 21:25:46.693275 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 122956 21:25:48.453337 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 123009 21:25:51.983392 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 123061 21:25:59.033566 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 123262 21:26:13.153852 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0
 123460 21:26:41.394469 192.168.15.121        72.21.81.253          TCP      60     41200 > http [FIN, ACK] Seq=462 Ack=2989405 Win=186720 Len=0

接收者在21:24:43重新打开窗户,再也没有听到发送者的声音。一分钟后,接收器超时连接(关闭由应用程序启动),并发送一系列未确认的FIN-ACK。

看起来与发送方的通信就这样丢失了(捕获是在接收方的网络上进行的)。如果不是,那么是否应该一直期待对Fin-ACK的确认,即使在一段足够长的时间使对等体忘记了连接之后也是如此?

共有1个答案

惠凯歌
2023-03-14

正如您注意到的,一旦接收窗口中的空间可用,接收方就会发送一个新的ACK并更新窗口大小。

为了处理ACK丢失的情况,发送方保留一个“持久定时器”,该定时器偶尔会重新发送一个数据包(“窗口探测”),以便测试水并查看是否确实存在未报告的接收空间。

持久定时器的值不是显式指定的,而是计算的往返时间的函数以及一些指数回退。RFC1122第4.2.2.14节提供了完整的详细信息,请访问:http://tools.ietf.org/html/RFC1122#page-92

 类似资料:
  • 问题内容: 我正在为Java游戏制作自己的自定义服务器软件(游戏和原始服务器软件都是用Java编写的)。没有可用的协议文档,因此我必须使用Wireshark读取数据包。 客户端连接时,服务器将以Gzip格式将其发送到级别文件。在发送大约94个数据包时,我的服务器通过ArrayIndexOutOfBoundsException使客户端崩溃。根据原始服务器的捕获文件,它大约在该点发送一个TCP窗口更新

  • 所以,这可能是一个愚蠢的问题,但据我所知,如果我通过TCP或UDP发送数据,如果组成该TCP/UDP数据包的任何一个IP数据包被丢弃,整个TCP/UDP数据包将被重传,但我的问题是为什么我们不能只发送丢失的部分数据吗?目前,我对此的唯一推理是,如果我们要为收到的每个IP数据包发送确认字符,这将增加网络拥塞。这是正确的,还是有其他原因,当只有一个或几个IP数据包被丢弃时,我们必须重新发送TCP/UD

  • Google数据丢失预防API支持.pdf还是.docx?我正在尝试在Java中对*.pdf文件做缩减,以隐藏敏感数据。 多谢!EMI

  • 我正在创建聊天应用程序,我想每秒刷新一次数据,但问题是recyclerview scroll重置了它们的第一个位置。如何摆脱这个。提前感谢:) 我使用MySql sserver添加和获取数据。

  • 本文向大家介绍JS打开新窗口防止被浏览器阻止的方法,包括了JS打开新窗口防止被浏览器阻止的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给大家供大家参考。具体分析如下: 用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法还是有的,这里我们就来分析一下如何解决这个问题

  • 与其他包管理器(如)相比,我发现当更新与给定项目相关的包时,有一种奇怪的行为。 还根据留档,和选项 根据composer.json将依赖项升级到最新版本,并更新composer.lock文件。 事实上,正确地更新了新的包版本号。但是没有被修改,并且列出了旧的版本过低的包。 为什么会发生这种情况?是我做错了什么,还是这就是应该怎么做的?如果是这样的话,为什么两个文件中的一个是最新的,而另一个不是最新