超時計時器設定

2021-08-21 06:34:30 字數 1179 閱讀 1711

運輸層的超時計時器的超時重傳時間應設定為多大呢?

如果把超時重傳時間設定得太短,就會引起很多報文段的不必要的重傳,使網路負荷增大。但若把超時重傳時間設定得過長,則又使網路的空閒時間增大,降低了傳輸效率。

tcp 採用了一種自適應演算法,它記錄乙個報文段發出的時間,以及收到相應的確認的時間。這兩個時間之差就是報文段的往返時間 rtt。 

tcp 保留了 rtt 的乙個加權平均往返時間 rtts(這又稱為平滑的往返時間)。 

第一次測量到 rtt 樣本時,rtts 值就取為所測量到的 rtt 樣本值。以後每測量到乙個新的 rtt 樣本,就按下式重新計算一次 rtts:

新的rtts=(1- a)*(舊的rtts)+a*(新的rtt樣本)

式中,0<=a<1。若a很接近於零,表示 rtt 值更新較慢。若選擇a接近於 1,則表示 rtt 值更新較快。

rfc 2988 推薦的a值為 1/8,即 0.125。

rto 應略大於上面得出的加權平均往返時間 rtts。

rfc 2988 建議使用下式計算 rto:rto=rtts+4*rttd,rttd 是 rtt 的偏差的加權平均值。

rfc 2988 建議這樣計算 rttd:

第一次測量時,rttd 值取為測量到的 rtt 樣本值的一半。

在以後的測量中,則使用下式計算加權平均的 rttd:

新的rttd=(1-b)*(舊的rttd) +b*|rtts-新的rtt樣本|

b 是個小於 1 的係數,其推薦值是 1/4,即 0.25。

輸入資料有多行,每行為乙個正整數,表示測得的往返時間rtt的樣本值(第1行為乙個tcp連線第一次測量得到的rtt樣本)。

對於每行輸入資料,輸出對應的rto,計算結果保留2位小數。

30263224
90.0078.0068.3863.09
ac**如下:

#include "iostream"

#include "cstdio"

#include "cmath"

using namespace std;

int main(int argc, char* argv)

else

rto=rtts+4*rttd;

printf("%.2lf\n",rto);

} return 0;

}

Flutter 倒計時 計時器的實現

比如傳送簡訊驗證碼,傳送成功後可能要求使用者一段時間內不能再次傳送,這時候我們就需要進行倒計時,時間到了才允許再次操作。為了實現這樣場景的需求,我們需要使用timer.periodic。如下圖 一 引入timer對應的庫 import dart async 二 定義計時變數 class loginp...

用SysTick做的延時計時器

這個實驗是使用systick中斷方式做延時定時器。主要目的是熟悉下systick的使用。首先,定義個延時函式,目的是計數 void delay io uint32 t ntime void timingdelay decrement void 其中timingdelay decrement是供sys...

python計時器 python 計時器

import sysclassshowtime qwidget def init self super init self.istimestart false 標記時間是否開始計時 self.setwindowtitle qlable 顯示計時時間 self.lable time val qlabe...