擁塞控制
擁塞控制
擁塞控制是一種用來調整傳輸控制協議(TCP)連接單次發送的分組數量(單次發送量,在英文文獻和程序代碼中常叫做cwnd)的算法。它通過增減單次發送量逐步調整,使之逼近當前網絡的承載量。如果單次發送量為1,此協議就退化為停等協議。單次發送量是以字節來做單位的;但是如果假設TCP每次傳輸都是按照最大報文段來發送數據的,那麼也可以把數據包個數當作單次發送量的單位,所以有時我們說單次發送量增加1也就是增加相當於1個最大報文段的字節數。
算法
擁塞控制假設分組的丟失都是由網絡繁忙造成的。擁塞控制有三種動作,分別對應主機感受到的情況:
- 收到一條新確認。這很好,表明當前的單次發送量小於網絡的承載量。
- 收到三條對同一分組的確認,即三條重複的確認。單次發送量往往大於3,例如發送序號為0、10、20、30、40的5條長度為10字節的分組,其中序號20的丟了,則返回的確認是10、20、20、20。3個20就是重複的確認。
- 對某一條分組的確認遲遲未到,即超時。例如發送序號為0、10、20、30、40的5條長度為10字節的分組,其中序號30的丟了,則返回的確認是10、20、30、30。這才只有兩條重複確認。然而剛剛說過,單次發送量往往大於3,所以超時更可能是因為不止一條分組或確認丟失而引起的,這說明網絡比上一情況中的更加繁忙。
當主機收到一條新確認,此時可以增加單次發送量。若當前單次發送量小於倍增閾限(在英文文獻和程序代碼中常叫做ssthresh),則單次發送量加倍(乘以2),即指數增長;否則單次發送量加1,即線性增長。
當主機收到三條重複的確認——單次發送量減半,倍增閾限等於單次發送量。(進入線性增長期)
當主機探測到超時——倍增閾限=單次發送量÷2,單次發送量=1。
參考
《计算机网络——自顶向下方法与Internet特色》. 機械工業出版社. 2006. ISBN 978-7-111--16505-7.