决定单连接tcp速度的常见机制是
ssthresh(tcp 拥塞控制门限)
cwnd(tcp拥塞窗口) ---- 发送端根据对网络质量的测量决定自己发送的报文大小
slide_windows(滑动窗口大小) ---接收端告诉发送端自己的可接受buffer大小
#两者取较小值作为发送速率限制
在正常的linux机器中,cwnd初始值=10,ssthresh初始值=TCP_INFINITE_SSTHRESH 0x7fffffff
在慢启动阶段, cwnd每一个rtt 会增大一倍。
报文接收端收到out-of-order的分片时会回复duplicated ack,
发送端收到三次相同的序号的dup ack时,进入拥塞避免。(证明有一个报文对端没有收到)
此时 ssthresh = cwnd/2 cwnd=ssthresh
有一种场景是:当tcp_metrics缓存了前一次session的ssthresh,则后续使用到这个IP的tcp管道就会使用之前那个session的ssthresh(可能是一个很小的值,例如300)
ip tcp_metrics show
另一种场景是:在发送端/接收端:人为改小了滑动窗:
https://www.cnblogs.com/zengkefu/p/5749009.html
ss -i -o 可以查看tcp 当前连接的参数
https://www.cyberciti.biz/files/ss.html
另一个监控工具是阿里tsar:
可以查看历史监控丢包率