TCP的流量控制与拥塞控制
5.4 TCP的流量控制
大写ACK
是tcp报文段首部中的标志位
,取值1表示这是一个TCP确认报文段。
小写ack
是TCP报文段首部中的确认号字段
。取值201表示201之前的数据已全部正确接收,希望收到后续数据.
rwnd代表接收窗口字段
,代表接收窗口大小
为300。
问题:若rwnd在过程中丢失了,发送方接收不到窗口大小,会造成死锁,如何解决?
当发送窗口被调控为0后,发送方启动持续计时器,若rwnd在过程中丢失了,等到持续计时器时间到了,会向接收方发送零窗口探测报文。若返回的rwnd仍为0,则重启持续计时器,但如果不是0,就可以打破死锁的局面。
问题:若rwnd本身已经是0了,要怎么接收零窗口探测报文并对其发回确认呢?
TCP规定,即使接收窗口为0,也必须接收零窗口报文段、确认报文段、紧急数据报文段。
问题:若零窗口探测报文丢失还能打破死锁吗?
可以,因为该报文有重传计时器。
例题
总结
5.5 TCP的拥塞控制
TCP四种拥塞算法
慢开始
当cwnd<ssthresh
时,使用该算法。
开始cwnd=1
传输轮次+1时,cwnd=1+1=2
传输轮次再次+1时,cwnd=2+2=4
以指数级增长,以此类推。
当慢开始门限值等于拥塞窗口值时改用拥塞避免算法。
拥塞避免
当cwnd>=ssthresh
时,使用该算法,cwnd不再以指数级增长,而是以线性加一的方式进行拥塞避免。
若部分报文段丢失,会导致超时重传,误认为产生了拥塞
。
需进行以下工作:
快重传算法可以提升传输速率。
快重传算法
例如,M3发送过程中丢失了,后面的数据报发送过去后发现不是按序到达的,会对M3进行重复确认,当连续三次发送方收到重复确认后立即重传M3报文,接收方接受后对收到的最后一个报文进行确认,告诉发送方这之前的所有报文均以接收完毕。
快恢复算法