強有力的測試工具 。html
要作一個模擬UE登陸界面的小程序,並修改參數。可是運行服務器端的,因此要自動完成這個工做。java
週二一天按qt webkit來作,我不知道是否有人作出來過, 能夠讀UE管理頁面,但沒法寫內容到網頁上。node
週三藉助Selenium+java來作,能夠自動登陸並修改裏面的ip等參數。基本實現了意圖。linux
還存在一個問題,測試時候firefox頁面要出來(顯示自動過程),想辦法隱藏纔是(服務器端沒有屏幕)待改進。web
/*********************************************************************************算法
*****undefined reference to `getipnodebyname' linux小程序
****************************************************************************/服務器
getipnodebyname has been deprecated. you should use getaddrinfo instead.
see:
RFC3493
http://www.ietf.org/rfc/rfc3493.txt
Implementing AF-indipendent applications
http://www.kame.net/newsletter/19980604/
Porting programs to IPv6 HOWTO
http://jungla.dit.upm.es/~ecastro/IPv6-web/ipv6.html
--
app
/************************************************************************************************************tcp
*** 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 = 0
net.sctp.rto_initial = 3000
net.sctp.rto_min = 1000
net.sctp.rto_max = 60000
net.sctp.rto_alpha_exp_divisor = 3
net.sctp.rto_beta_exp_divisor = 2
sysctl -a 2>/dev/null | grep "path"
net.sctp.path_max_retrans = 5
10 = 5 * 2