TCP声明TCP_CA_Recovery与TCP_CA_Loss

时间:2018-01-15 19:33:03

标签: sockets tcp tcp-ip

在tcp文件传输中,以下状态之间的差异何时?

TCP_CA_Recovery和TCP_CA_Loss?!!

什么时候传输状态设置为这些值?数据包丢失是导致恢复,丢失还是两者都没有?

由于

1 个答案:

答案 0 :(得分:2)

TL; DR - 检测到重复的ack或选择性ack时达到恢复。数据包丢失会导致TCP_CA_Recovery状态,如果达到重传超时,则可能导致TCP_CA_Loss

这两个标志是Linux中TCP拥塞避免实现的5种状态之一。

enum tcp_ca_state
{
    TCP_CA_Open = 0,
#define TCPF_CA_Open    (1<<TCP_CA_Open)
    TCP_CA_Disorder = 1,
#define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
    TCP_CA_CWR = 2,
#define TCPF_CA_CWR (1<<TCP_CA_CWR)
    TCP_CA_Recovery = 3,
#define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
    TCP_CA_Loss = 4
#define TCPF_CA_Loss    (1<<TCP_CA_Loss)
};

请参阅here

因此,在TCP实现'感知'链路拥塞后,所有异常(非开放)状态都是恢复步骤。

  • TCP_CA_Open - 正常的ACK处理状态(正常调节拥塞窗口)。

  • TCP_CA_Disorder - 检测到/接收到重复的ACK(DUPACK)或选择性确认(SACKS)。

  • TCP_CA_CWR - 拥塞窗口减少状态。 Linux TCP堆栈开始在此状态下减少拥塞窗口。此状态可能会被TCP_CA_RecoveryTCP_CA_Loss

  • 中断
  • TCP_CA_Recovery - 在开始重新发送数据包时输入状态。

  

发件人一直处于恢复状态,直到所有段   输入恢复状态成功时未完成   确认。在此之后,发件人返回打开状态。一个   重传超时也可以中断恢复状态。

(下文提到的来源)。

  • TCP_CA_Loss - 当TCP RTO(重新传输超时)到期时输入状态。

您可以阅读更多相关信息here。还有this书。