擁塞控制

擁塞控制

擁塞控制是一種用來調整傳輸控制協議(TCP)連接單次發送的分組數量(單次發送量,在英文文獻和程序代碼中常叫做cwnd)的算法。它通過增減單次發送量逐步調整,使之逼近當前網絡的承載量。如果單次發送量為1,此協議就退化為停等協議。單次發送量是以字節來做單位的;但是如果假設TCP每次傳輸都是按照最大報文段來發送數據的,那麼也可以把數據包個數當作單次發送量的單位,所以有時我們說單次發送量增加1也就是增加相當於1個最大報文段的字節數。

算法

擁塞控制假設分組的丟失都是由網絡繁忙造成的。擁塞控制有三種動作,分別對應主機感受到的情況:

  1. 收到一條確認。這很好,表明當前的單次發送量小於網絡的承載量。
  2. 收到三條對同一分組的確認,即三條重複的確認。單次發送量往往大於3,例如發送序號為010203040的5條長度為10字節的分組,其中序號20的丟了,則返回的確認是10202020。3個20就是重複的確認。
  3. 對某一條分組的確認遲遲未到,即超時。例如發送序號為010203040的5條長度為10字節的分組,其中序號30的丟了,則返回的確認是10203030。這才只有兩條重複確認。然而剛剛說過,單次發送量往往大於3,所以超時更可能是因為不止一條分組或確認丟失而引起的,這說明網絡比上一情況中的更加繁忙。

當主機收到一條新確認,此時可以增加單次發送量。若當前單次發送量小於倍增閾限(在英文文獻和程序代碼中常叫做ssthresh),則單次發送量加倍(乘以2),即指數增長;否則單次發送量加1,即線性增長

當主機收到三條重複的確認——單次發送量減半,倍增閾限等於單次發送量。(進入線性增長期)

當主機探測到超時——倍增閾限=單次發送量÷2,單次發送量=1。

參考

《计算机网络——自顶向下方法与Internet特色》. 機械工業出版社. 2006. ISBN 978-7-111--16505-7.