TCP流量控制
利用滑动窗口实现流量控制。
如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是rwnd = 400”(这里的rwnd表示receiver window)。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意:TCP的窗口单位是字节,不是报文段。TCP连接建立时的窗口协商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文段序号的初始值设为1.大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
TCP拥塞控制
首先是慢开始
1.在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。
2.在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值(一开始窗口大小为1,发送一个,接收一个,增长为2;发送两个,得到两个确认,增长为4…因此,窗口是指数增长的)。
3.用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
4.因为拥塞窗口是指数增长的,为防止后期增长过快,需要另外一个变量—慢开始门限(阈值)ssthres,当cwind == ssthress时,要预防拥塞的产生,开始执行拥塞避免算法,cwnd按线性规律增长
然后是快重传
发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。遇见三个重复的ACK确认包,就说明数据包丢失了,为了防止网络堵塞,就实行快恢复算法,把慢开始门限ssthres值减半
最后是快恢复算法
1.当发送方连续收到三个重复确认时,就执行快恢复算法,把慢开始门限减半,这是为了预防网络发生拥塞(同慢启动)。
2.由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是把cwnd值(拥塞窗口)设置为慢开始门限减半后的值(而不是同慢启动一样从1开始),然后开始执行拥塞避免算法。