linux tcp超时重传实现分析
kernel version 3.18.20
1.函数调用关系
tcp_ack->
tcp_clean_rtx_queue->
tcp_ack_update_rtt->
tp->ops->set_rto(sk);
TCP中RTT的测量和RTO的计算 - zhangskd的专栏 - 博客频道 - CSDN.NET
2.指数退避代码
net/ipv4/tcp_timer.c
retransmits_timed_out
if (boundary <= linear_backoff_thresh)
timeout = ((2 << boundary) - 1) * rto_base;
else
timeout = ((2 << linear_backoff_thresh) - 1) * rto_base +
(boundary - linear_backoff_thresh) * TCP_RTO_MAX;
RTO的计算方法(基于RFC6298和Linux 3.10) | 天赋 无与伦比的坚持
3.相关配置参数
/proc/sys/net/ipv4/tcp_retries1 (integer; default: 3)
/proc/sys/net/ipv4/tcp_retries2 (integer; default: 15)
TCP/IP重传超时--RTO - 一个故事@MySQL DBA