【问题标题】:tcp retransmission queuetcp重传队列
【发布时间】:2012-05-25 22:34:30
【问题描述】:

我发现了一个关于 TCP 重传队列的有趣问题,我一直在阅读 this
,从这篇文章中可以看出,TCP上有这么多定时器,但我没有得到的是它们是如何相互同步的,例如当消息发送时,它被放置在重传队列中,以及当重传队列的时间达到 0 时,重传计时器将检查该队列。 这个队列是队列数据结构吗?而且好像有两个TCP函数会检查这个队列,第一个是重传队列重传消息,以及删除已经成功传递的数据包的synak计时器,在这种情况下必须有一些同步机制那些计时器访问同一个队列,对吧?

你能帮助理解这是如何工作的吗?

【问题讨论】:

  • 请接受更多答案。

标签: networking tcp timer


【解决方案1】:

我认为您对计时器有错误的概念。这不是一个应用程序。这些是操作系统计时器:保持它们同步没有问题。我认为您对队列也有错误的概念:我不知道您所说的“这个队列是队列数据结构”是什么意思吗?这个问题真的没有意义。队列就是队列。在这种情况下,它又是一个内核队列。它是如何实现的,除了内核作者之外,任何人都不关心。

【讨论】:

  • 对不起,如果我不清楚,我的问题是两个定时器如何更新同一个队列,例如如果一个时间达到 0,那么重传定时器将更新队列,如果 SYNACK 定时器收到 ack 怎么办现在也在尝试更新重传队列。我不确定谁会从重传队列中删除 ACKed 数据包,它是 SYNACK 计时器还是其他东西。请分享任何可以解决此问题的文件?
  • @JackJordan 我建议好好看看RFC 793
  • 感谢 EJP 的链接,因此引用它“当 TCP 传输包含数据的段时,它会将副本放入重传队列并启动计时器;当收到该数据的确认时,该段从队列中删除。如果在计时器用完之前没有收到确认,则重新传输该段。这是否意味着为每个数据包设置了一个计时器?如果接收到同步,同时计时器达到 0,那会发生什么?
  • 顺便说一句,我在谈论/询问 Linux 实现
  • 还有一个问题,tcp 是等待单个数据包被 ACKed 发送下一个数据包还是发送多个数据包并等待多个 ACK​​ed ?
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多