運輸層的超時計時器的超時重傳時間應設定為多大呢?
如果把超時重傳時間設定得太短,就會引起很多報文段的不必要的重傳,使網路負荷增大。但若把超時重傳時間設定得過長,則又使網路的空閒時間增大,降低了傳輸效率。
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.09ac**如下:
#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...