一,TCP的流量控制
1)利用滑动窗口实现流量控制:让发送方的速度不要太快,接收方来得及接收
TCP窗口单位为字节,不是报文段。
2)MSS: Maximum Segment Size 最大分段大小最大传输大小是TCP数据包每次能够传输的最大数据分段。
为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以一般MSS值1460
3)糊涂窗口综合症
当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症
比如:TCP 接收端缓存空间已经满,交互式应用程序一次只能从接收空间读取一个字节,然后向发送端发送确认,把窗口设置为1字节。发送端发送41字节传输开销有40字节(20字节的IP头+20字节的TCP头)。
问题解决:让接收端等待一段时间,使得有足够的空闲空间可以容纳一个最长报文段或拥有一半的空闲。
发送方:要积累一定数据段后才发送。
二,TCP 的拥塞控制
拥塞控制是一个全局性过程,防止过多的数据注入到网络中,使网络路由器或链路不至于过载。
流量控制是一个端到端过程,控制发送端,不要发送过快,让接收端来得及处理。
开环控制:设计网络时,事先将有关发生拥塞的因素都考虑清楚。
闭环控制:基于反馈环路的概念
拥塞控制方法:
1)慢开始和拥塞避免
发送方控制窗口的原则:只要网络没有出现拥塞,窗口就增大一些,以便把更多的分组发送出去。一旦出现拥塞,就把窗口减小,减少注入到网络中的分支数。
慢开始和拥塞避免算法必须被TCP发送端用来控制正在向网络输送的数据量。为了实现这些算法,必须向TCP每连接状态加入两个参量。
拥塞窗口(cwnd)是对发送端收到确认(ACK)之前能向网络传送的最大数据量的一个发送端限制,
接收端通知窗口(rwnd)是对未完成数据量的接收端限制。
Min(Cwnd,rwnd)决定了数据传送
另一个状态参量,慢启动阀值(ssthresh),被用来确定是用慢启动还是用拥塞避免算法来控制数据传送
cwnd<ssthresh 慢开始算法
cwnd>ssthresh拥塞避免算法
cwnd和ssthresh 既可以使用慢启动也可以使用拥塞避免
慢开始:cwnd大小指数增加,即每经过一个传输轮次,拥塞窗口加倍。
拥塞避免:cwnd以每个往返(RTT)1满尺寸数据段的速度递增,即每经过一个传输轮次,拥塞窗口增加 1 。(cwnd+=SMSS*SMSS/cwnd)
执行拥塞避免算法时候,网络出现拥塞(没有按时收到确认),讲慢开始门限(ssthresh)设置为出现拥塞时窗口大小的一半,然后讲cwnd重新设置为1,执行慢开始算法。
2)快速重传/快速恢复
快重传:接收方收到一个失序的报文段后就立即发出重复确认(让发送方及早知道有报文段没有到达接收端),而不要等到接收端发送数据时候捎带确认。
收到M1、M2又收到了M4,则M3丢失,如果接下来的几个报文段都不是M3,则发送M2 确认,如果是M5则再次发M2确认,当发送端收到3个重复确认就应该立即重传M3.
快恢复:当收到三个重复确认,执行乘法减小算法,把慢开始门限ssthresh减半。不执行慢开始算法。
此时执行拥塞避免算法,因为网络没有发生拥塞,如果拥塞就不会一连接受到三个报文。
三,随机早期检测RED
1)概述
路由器的分组丢弃策略对TCP拥塞控制影响很大。
如果发生了路由丢弃,说明出现了拥塞。路由丢弃的是IP分组,而一个IP分组有可能包含好几个TCP连接,所以导致许多TCP同时进入慢开始状态。全局同步
2)丢弃策略
最大门限THmax ,如果分组多余THmax则一定丢弃。
处于两门限之间的要以概率p丢弃个别分组,让拥塞控制只在个别TCP连接上进行,因而避免发生全局性拥塞控制。
最小门限THmin,小于THmin的分组不予丢弃
THmax = 2*THmin 是合适的