2009年7月27日 星期一

tcp flow control

TCP flow controlTCP flow control是透過window的控制來控制流量
sliding window主要有兩個,RWND(receiver window) and CWND(congestion window)以發送端而言,RWND是發送端收到接收端給的window大小,目的是在接收端告訴發送端所可以接受的最大window值,CWND是發送端根據演算法所算出來的window大小
實際所使用的window大小為min (CWND,RWND),實際上CWND控制了在傳送時實際的window數值
在sniffer的觀察中不容易看到實際的window大小,因為window為發送端主動控制所以這個數值不會在網路上傳遞,發送端只要確保所採用的window不要超過接收端所要求的window即可
控制congestion的三個方法(Congestion aviodance)
1.slow-start2.fast retransmission3.fast recovery
TCP在調整傳送端的傳送速度時,以slow-start threshold(簡稱ssthresh)與cwnd的值來區分slow-start phase和congestion avoidance phase
slow-start threshold值就是某個cwnd值,當cwnd值超過ssthresh時TCP就會進入congestion avoidance phase
當cwnd的值小於ssthresh時slow-start phase時,在每收到一個ACK,cwnd的值會增加一倍,因此每經過一個RTT時間,cwnd的值為上一個RTT時的cwnd值的2倍。此時的cwnd以2的指數的方式增加
當cwnd的值大於ssthresh時,TCP處於congestion avoidance phase。每經過一個RTT時間,cwnd的值才會增加一個segment,(一個segment應該指一個MTU大小)以避免cwnd增加太快而導致封包遺失。此時的cwnd以線性的方式增加。
ssthresh的決定方式:在傳送開始時是沒有ssthresh值的,TCP都是處於slow-start階段,一直到有掉包時TCP會將ssthresh值設定為當時Cwnd的一半
RTO(TCP time out)當RTT超過RTO時,會觸發re-transmission, RTO是變動的RTO=A+4D, A:average RTT, D=deviation
self-clocking收端使用ACK來通知送端已正確收到封包,同時也通知送端可以送出下批封包,收端可以控制送端何時要送的機制稱為self-clocking
Re-transmission發生後處理方式重送的處理方式跟不同TCP有關常見的TCP版本如下Tahoe Reno NewReno Vegas SACK
Tahoe具備TCP的基本架構1.slow-start (前面已敘述過)2.重傳遺失封包3.fast retransmit, fast retransmit 使用duplicate ACK做為重送封包的依據,遺失封包時收端會收到非期待的sequence number封包或者是封包順序不對,此時收端會發上一個正常ack的封包回去,稱做duplicate ACK.若傳送端收到3個duplicate ACK會將封包視為遺失,不待timeout便立即重送。避免slow-start機制產生(ssrhresh=cwnd/2,cwnd=1)。
Reno:1.修改Tahoe演算法並加上Fast Recovery的機制。2.Reno在使用Fast retransmit後,再使用fast recovery機制: Fast recovery機制: ssthresh設為cwnd/2, 重送遺失封包後 cwnd=ssthresh+34.在fast retransmit phase,當收到duplicate ACK,Reno還可以使用self-clocking的機制繼續送出新的封包以提高link的使用率。若封包遺失的情形能夠在不需使用timeout retransmit的情況下就將之回復,那麼Reno在收到duplicate ACK後就會進入congestion avoidance
comparsion table------------------------------------------------------------------ Tahoe Reno-------------------------------------------------------------------封 ssthresh=cwnd/2, Cwnd=1 ssthresh=cwnd/2, cwnd=ssthresh+3包 遺 重新進入slow-start phase 進入congestion avoidance phase失 時 平均吞吐量比較差 平均吞吐量比Tahoe佳
TCP NewReno:1.NewReno由Reno延伸而來,修改了TCP Reno裡的Fast recovery演算法。2.在Reno中,遇到有封包遺失時,得等到duplicate ack時,才開始重傳封包,並開始fast recovery。 3.若收到partial ack時就會結束fast recovery,但會造成只傳送部分已遺失的封包,仍有許多封包該傳卻未傳,並且必須等到timeout後才能再重傳封包,使得傳輸效能大大降低。註:partial ack的ACK碼較之前正常收到的ACK大,但比稍早收到out of sequence的封包 seq號碼小。4.在NewReno中,不會因為收到Partial ack時結束Fast recovery,傳送端會繼續重送封包,直到所有的遺失的封包都重送後才結束Fast recovery,不需等到timeout就能將所有的封包傳送。5.此版本大大改善因等待timeout才能重送封包時的效能降低,並且能持續傳送新的封包增加使用率
TCP SACK(selective Ack)SACK也是從TCP Reno延伸的版本,它改善了在NewReno裡一個RTT時間只能重傳一個封包的缺點。在SACK中,新加入一個SACK option,會將接收端裡已收到的封包範圍回傳給傳送端,其範圍間隔就是遺失的封包,故傳送端便可知道哪些封包遺失,並重傳此遺失的封包,所以可以在一個RTT時間內重送一個以上的封包。
Bandwidth * Delay Product (BDP)BDP是指在傳送過程中在網路傳輸中的packet,頻寬越大,RTT越久,BDP就越大BDP = Bandwidth * Delaywindows size 至少必須大於BDP,在實務上TCP buffer大約是3倍的BDP

沒有留言: