超时计时器设置

时间:2021-07-07 09:38:48
【文件属性】:

文件名称:超时计时器设置

文件大小:462B

文件格式:TXT

更新时间:2021-07-07 09:38:48

q'

运输层的超时计时器的超时重传时间应设置为多大呢? 如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。 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。


网友评论

  • include #include #include using namespace std; int main(int argc, char *argv[]) { double RTT,t=0; double RTTs,RTTd,RTO=0; while(cin>>RTT) { t++; if(t==1) { RTTs=RTT; RTTd=RTT/2.0; RTO=RTTs+4*RTTd; printf("%.2lf\n",RTO); } else { RTTs=0.875*RTTs+0.125*RTT; RTTd=0.75*RTTd+0.25*fabs(RTTs-RTT); RTO=RTTs+4*RTTd; printf("%.2lf\n",RTO); } RTO=0; } return 0; } 这是啥???