簡述tcp擁塞避免算法的工作過程?
1、慢開始和擁塞避免
基于窗口的擁塞控制,在發送方維護一個擁塞窗口(cwnd),大小等于發送窗口,通過出現了超時來判斷網絡出現擁塞。慢開始的思路是一開始發送方發送一個字節,在收到接收方的確認,然后發送的字節數量增大一倍(也就是按照指數增長的速率),從小到大逐步增大cwnd,直到cwnd 達到慢開始門限(ssthresh),停止慢開始算法,使用擁塞避免算法,擁塞避免算法思路是增長速率變為線性增長,也就是每經過一個往返時間RTT就把發送方的cwnd加1,所以綜上:
當cwnd < ssthresh ,使用慢開始算法;
當cwnd = ssthresh,可以使用慢開始算法,也可以使用擁塞算法;
當cwnd > ssthresh,使用擁塞算法;
2、快重傳和快恢復
通過上面兩個算法可以使得網絡傳輸速率一直增大,直到出現超時,這時候需要將cwnd重新調整到1個字節開始,使用慢開始算法,同時需要將慢開始門限ssthresh調整為cwnd(超時點)的一半,繼續執行慢開始、擁塞避免算法。如果收到3-ACK(發送方一連接收到3個對同一個報文段的重復確認),這種可能的情況是,并不是發生了擁塞,可能是報文丟失,所以發送方不執行慢開始算法,直接使用快重傳算法,立即發送缺失的報文段。同時執行快恢復算法,將門限值(ssthresh)調整為此時cwnd的一半,并執行擁塞避免算法。