在tcp文件传输中,以下状态之间的区别是什么?
TCP_CA_Recovery和TCP_CA_Loss ?!
传输的状态何时设置为这些值?丢包leads=到恢复、丢失还是两样都没有?
谢谢
发布于 2018-01-15 20:18:26
TL;DR -当检测到重复的acks或选择性的acks时达到恢复.数据包丢失会导致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)
};见这里。
因此,所有异常(非打开)状态都是TCP实现“感觉到”链路拥塞后恢复的步骤。
TCP_CA_Open - ACK处理的正常状态(正常调节拥塞窗口)。TCP_CA_Disorder -检测/接收重复ACK(DUPACK)或选择性确认(SACKS)。TCP_CA_CWR -拥塞窗口减少状态。在这种状态下,Linux堆栈开始减少拥塞窗口。此状态可由TCP_CA_Recovery或TCP_CA_Loss中断。TCP_CA_Recovery状态.发送方处于恢复状态,直到成功地确认输入恢复状态时未完成的所有段。在此之后,发送方返回到Open状态。重传超时也可以中断恢复状态。
(资料来源如下)。
TCP_CA_Loss -在TCP RTO (重传超时)过期时输入状态。https://stackoverflow.com/questions/48269542
复制相似问题