擁塞控制
擁塞控制
擁塞控制是一種用來調整傳輸控制協定(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.