![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kernel
卢纳尔多
这个作者很懒,什么都没留下…
展开
-
tcp头部分析
tcp头部如下图依次是源端口号:16位目标端口号:16位seq号:32位ack号:32位首部长度:4位,最大值为15。单位为4字节,即首部最大长度为60字节.保留字段:4位标志位: CWR:Congestion Window Reduced (the sender reduced its sending rate) ECE:ECN Echo (the sender received an earlier congestion notification) URG:U...原创 2020-05-12 18:35:52 · 789 阅读 · 0 评论 -
tcp拥塞分析七(scalble)
本文分析linux-4.19.12代码的scalble拥塞算法hstcp相对reno算法,通过两个固定的值TCP_SCALABLE_AI_CNT和TCP_SCALABLE_MD_SCALE改变了拥塞避免阶段窗口增长速度,以及丢包后ssthresh的设置./* These factors derived from the recommended values in the aer: * ...原创 2019-03-27 14:30:29 · 310 阅读 · 0 评论 -
tcp拥塞分析六(HSTCP)
本文分析linux-4.19.12代码的hstcp拥塞算法hstcp相对reno算法,通过一个与发送窗口相关的固定数组hstcp_aimd_vals,改变了拥塞避免阶段窗口增长逻辑,以及丢包后ssthresh的设置.也就是改了AIMD (Additive Increase Multiplicative Decrease)的发送窗口.根据当前发送窗口snd_cwnd,找到数组位置i满足hst...原创 2019-03-27 11:59:26 · 607 阅读 · 0 评论 -
tcp拥塞算法分析五(vegas)
本文分析linux-4.14.69代码的vegas拥塞算法传统的基于丢包的拥塞算法(例如cubic,reno)都是(填满网络直到)有丢包了就认为出现拥塞.vegas会根据rtt来计算网络吞吐量和当前实际传输量,来判断是否出现拥塞.关键变量介绍/* Vegas variables */struct vegas { u32 beg_snd_nxt; /* right edge dur...原创 2019-03-17 23:19:40 · 4401 阅读 · 3 评论 -
tcp拥塞算法分析四(bbr)
本文分析linux-4.14.69代码的bbr拥塞算法bbr算是一个完全独立的拥塞算法,具有自己的拥塞状态机.tcp_cong_control函数已经被bbr_main函数接管了.()/* The "ultimate" congestion control function that aims to replace the rigid * cwnd increase and decre...原创 2019-03-14 10:38:50 · 3078 阅读 · 2 评论 -
BBR: Congestion-based congestion control
BBR: 基于拥塞的拥塞控制关键术语RTT: round-trip-timeRTprop: round-trip propagation timeBtlBw: bottleneck bandwidth。 路径上最小带宽。data in flight: data sent but not yet acknowledgedBDP: bandwidth-delay product...翻译 2019-03-08 20:01:38 · 2503 阅读 · 0 评论 -
tcp拥塞算法分析二(bic)
本文分析linux-4.14.69代码的bic拥塞算法首先回顾下基础的慢启动和拥塞避免函数,慢启动阶段(tcp_slow_start)更新窗口的速度是加acked,acked就是这个ack包对应确认的包个数;拥塞避免阶段(tcp_cong_avoid_ai)更新窗口的速度是加acked/w, w一般情况下就是当前的窗口大小.(在bic中,相当与一个权重,bic会根据当前窗口到最大窗口的差距动态...原创 2019-02-21 22:30:18 · 1870 阅读 · 0 评论 -
tcp拥塞算法分析一(拥塞避免和慢启动)
最近需要研究tcp拥塞算法,决定通过写博客的方式加深理解.这是第一篇,记录下拥塞避免和慢启动算法拥塞避免阶段:以1/cwnd的速度增长.即每次收到一个ack(如果每个包都对应一个ack,不考虑延迟ack等复杂情况),就会将snd_cwnd_cnt加1,如果snd_cwnd_cnt超过了当前窗口大小,就会将发送窗口加1,snd_cwnd_cnt重新重置为0.其中snd_cwnd_cnt就是用来统...原创 2019-02-16 01:20:51 · 1069 阅读 · 0 评论