强有力的测试工具 。
要做一个模拟UE登录界面的小程序,并修改参数。但是运行服务器端的,所以要自动完成这个工作。
周二一天按qt webkit来做,我不知道是否有人做出来过, 可以读UE管理页面,但无法写内容到网页上。
周三借助Selenium+java来做,可以自动登录并修改里面的ip等参数。基本实现了意图。
还存在一个问题,测试时候firefox页面要出来(显示自动过程),想办法隐藏才是(服务器端没有屏幕)待改进。
/*********************************************************************************
*****undefined reference to `getipnodebyname' linux
****************************************************************************/
getipnodebyname has been deprecated. you should use getaddrinfo instead.
see: RFC3493 Implementing AF-indipendent applications Porting programs to IPv6 HOWTO --
/************************************************************************************************************
*** Management of Retransmission Timer
/*********************************************************************************************************
SCTP端点使用重传计时器T3-rtx来确保数据传送过程中来自对端的反馈。计时器的值也称为RTO(retransmission timeout超时重传).
如果端点的伙伴是多穴的,端点需要为每个不同的目的传输地址计算独立的RTO。
RTO的计算管理与TCP重传管理非常接近。为了计算当前RTO,一个端点为每个目的传输地址维持2个状态变量:SRTT(smoothed round-trip time平滑RTT)和RTTVAR(rtt变量).
1. RTO计算过程
SRTT,RTTVAR,RTO计算的规则如下:
C1) 开始RTO设置为 RTO.Initial , 直到第一个包发送到目的端完成RTT测量。
C2)得到第一个RTT测量的R值, SRTT = R , RTTVAR = R/2 , RTO = SRTT+4*RTTVAR .
C3)当得到一个新的RTT测量值R',
RTTVAR = (1 - RTO.beta)*RTTVAR + RTO.beta + RTO.beta * |SRTT - R'|
SRTT = (1 - RTO.alpha) * SRTT + RTO.alpha * R'
注意 : 用于更新RTTVAR 的SRTT值是它 第二次更新之前的值。
经过计算, 更新RTO = SRTT + 4 * RTTVAR
C4)当传输持续进行并且符合C5原则时,每一轮传输都必须测量RTT。此外,新的RTT测量对于任意目的地址每轮不超过一次。一是表明过多的测量在实际中通常产生不了明显效益,二是如果过多测量,RTO.alpha 和RTO.beta 需要调整,以至于SRTT和RTTVAR大致跟它们在C3里只做一轮测量一样做相同速率的调整。当然准确的这些调整变化仍然值得研究。
C5) 卡恩算法:RTT测量不能在进行重传时进行。 如果没有块带小于等于R例如第一次发送R,RTT测量应该只使用带序列号 R的块.
C6) 无论RTO如何计算, 只要它小于RTO.min 就加于RTO.min . 理由是下限太小的RTO值容易引发不必要的超时。
C7)RTO最大值 是RTO.max
对用于计算RTT测量和其它状态变量的时间间隔G时钟没有要求,除了以下:
(G1) 无论RTTVAR 如何计算, 只要RTTVAR = 0 , RTTVAR = G ; 经验表明 细粒度时钟(小于200ms)比粗粒度表现好。
2, 重传计时器规则
R1) 每次发送一个数据到任意地址(包括重传),如果那个地址的T3-rtx计时器没有打开,就启动计时直到该地址的RTO超过。这里使用的RTO是根据之前T3-rtx计时器超时后倍增得到的。
R2)发送到某个地址的未完成数据收到确认后,关闭该地址的T3-rtx计时器。
R3)当收到前面最早的那个TSN地址的未完成数据SACK,重启T3-rtx按当前RTO。
R4)只要收到的SACK缺失之前经过ACK时钟确认的序列号, 如果T3-rtx没有启动就对这个数据的初始的目的地址启动。
3. 超时处理
只要T3-rtx计时器超时就按如下处理:
E1)对超时的目的地址,根据7.2.3调整其ssthresh(slow start thresh) 并设置(Congestion Window Size)cwnd = MTU.
E2)对超时的目的地址,设置RTO = RTO*2 (回退计时器)。最大值按C7(RTO.max) 为上限进行加倍。
E3)确定有多少最早的(即最低的TSN) 未完成数据块,该地址的T3-rtx已经超时,以将要被重传的目的地址MTU 约束为准,将其放入一个单独的包(这个地址可能与计时器超时的当前地址不同)。这个值称为K, 绑定并在一个单独包里向目的端重传这K个数据块。
E4) 在要重传的目的地址上启动重传计时器,按规则R1. 用于要启动T3-rtx 的RTO 应该是一个,对于要重传的目的地址接收端是多穴的可能与其超时所拥有的RTO不同(6.4).
经过重传,一旦获得新的RTT测量(发生于新数据发送并确认,或每个C5发生, 或通过HEARTBEAT测量 , 8.3),按C3来计算,包括RTO的计算(在其一直加倍后可能导致下跌RTO回退,规则E2)。
注意: 任何发送往T3-rtx计时器超时地址的数据块,但不适合MTU(规则E3)应该加标记后,在cwnd允许后重传(通常在SACK到达之后)。
最后一个重传机制关注的是失败(6.4.1)
F1) 每当一个端点从当前目标切换传输地址不同的一个,当前重传定时器继续运行。只要端点发送有数据块的包到新的传输地址时,在该传输地址上启动计时器,使用已经发送数据的这个目的地址的RTO值,按R1规则做。
/**************************************************************************************************
***********************DEFAUL VALUE
/**************************************************************************/
sysctl -a 2>/dev/null | grep ".rto_"
net.ipv4.tcp_frto_response = 0net.sctp.rto_initial = 3000net.sctp.rto_min = 1000net.sctp.rto_max = 60000net.sctp.rto_alpha_exp_divisor = 3net.sctp.rto_beta_exp_divisor = 2
sysctl -a 2>/dev/null | grep "path"
net.sctp.path_max_retrans = 5
10 = 5 * 2