拥塞处理相关概念
拥塞窗口:
含义:
拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化.发送方让自己的发送窗口等于拥塞窗口.如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口
发送方控制拥塞窗口的原则:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去.但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数
乘法减小:
是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5
加法增大:
是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞
快重传:
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认.这样做可以让发送方及早知道有报文段没有到达接收方,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段
快恢复:
当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半.但接下去不执行慢开始算法
发送窗口的上限值:
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
发送窗口的上限值 Min [rwnd, cwnd]
·
· 当 rwnd < cwnd 时,是接收方的接收能力限制发送窗口的最大值
· 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值
避免拥塞具体实现
慢开始算法:
· 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值
· 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值
· 使用慢开始算法后,每经过一个传输轮次(往返时间 RTT),拥塞窗口 cwnd 就加倍
拥塞避免算法:
拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,使拥塞窗口 cwnd 按线性规律缓慢增长
慢开始门限ssthresh的用法:
· 当 cwnd < ssthresh 时,使用慢开始算法
· 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法
· 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法
网络出现拥塞时(其根据就是没有按时收到确认):
· 就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)
· 然后把拥塞窗口 cwnd 重新设置为 1.执行慢开始算法
TCP 的有限状态机
说明:
· TCP 有限状态机的图中每一个方框都是 TCP 可能具有的状态
· 每个方框中的大写英文字符串是 TCP 标准所使用的 TCP 连接状态名.状态之间的箭头表示可能发生的状态变迁
· 箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作
· 图中有三种不同的箭头
· 粗实线箭头表示对客户进程的正常变迁
· 粗虚线箭头表示对服务器进程的正常变迁
· 另一种细线箭头表示异常变迁
一个TCP对等端经过的连接状态依赖于TCP对等端是TCP连接建立的初始化方还是TCP连接终止的初始化方。
TCP连接图和终止图