滑动窗口(通告窗口):接收端根据自己设置的缓存大小决定该窗口的大小, 缓存大小的设置根据BDP(Bandwidth Delay Product) 来设置, BDP = link_bandwidth * RTT
拥塞窗口:发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制
2. TCP有3种基本机制控制报文的发送
2.1 TCP维持一个变量,它等于最大报文段长度MSS?
2.2 应用层指明要求发送报文端, 通过TCP头部的push 字段(急迫比特)
2.3 计时器时间到, 把缓存的数据发送出去
3. Nagle 算法, TCP_NODELAY 可以关闭该算法
1. 发送端应用进程将欲发送的数据逐个字节的送到发送端的TCP缓存, 则发送端就将第一个字符先发送出去,将后面的字符都缓存起来
2. 当收到对前一个报文的确认,将缓存中的所有字符组装成一个报文段发送出去
3. 当缓存的字符达到窗口的一半或者以达到最大报文段长度,就立即发送
4. 糊涂窗口综合症(silly window syndrome) : 可以让接受端等待一段时间
5. 拥塞控制算法
慢开始:由小到大逐渐增大发送端的拥塞窗口数值,初始值是一个MSS值,收到确认后增加至多一个MSS值
拥塞避免算法:拥塞窗口每经过一个返回时延RTT就增加一个MSS的大小
慢开始门限(ssthresh)
当cwnd < ssthresh : 慢开始算法
当cwnd > ssthresh : 拥塞避免双方
当cwnd == ssthresh : 两个都可以
网络出现拥塞处理方法:将慢开始门限ssthresh设置为出现拥塞时的发送窗口值的一半, 将拥塞窗口设置为1,重新执行慢开始算法
快重传:发送端只要一连接收到三个重复的ACK,即可断定有分组丢失
快恢复: cwnd = ssthresh + n* MSS;
乘法减少:ssthresh = cwnd * 0.5
加法增大:cwnd++
6. 随机早期丢弃(Random Early Discard): 路由器采用的算法