Regular express"" 代表 "or"
ex:2131 match "213 317 2316 31" 幾次?
match 4 次
[]代表任何一個在bracket裡的單一字元(single character). 代表任何單一字元- 代表範圍 Ex:[1-4] == [1234]
Ex:[1-3].[34] match "213 317 2316 31" 幾次? 解釋:第一個字元從1-3任何一個字元, 第二個字元是任何字元 第三個字元是3 or 4 字元match "213" and "3 3" 一共兩次
^ Match 開始的字元$ Match 最後的字元_ Match 控制字元 (逗點/空白/tab等)
Ex: ^21,31$,_31_ match "213 317 218 31 731" 幾次?^21 一次31$ 一次_31_ 一次(只match 31)
() parentheses 群組Ex:(213218)_31 match "213 317 1218 31 31"幾次?213 31218 31一共兩次
\ 用來移除特殊字元
Ex:^\(213_ 代表開頭從(213開始,因為(是特殊字元若要match (213 必須要把(當作一般字元,\之後接的特殊字元可以視為一般字元Ex: AS path 為 (213 317) 1218 316 31 若用^\(213_ 來match可以match出(213
* match 0個或多個前置字元 Ex: 1* 代表任何1的字串 (包含沒有任何字元) 1 or 11 or 111 etc..)) ? match 0個或1個前置字元 Ex: 1? 代表1 or 沒有任何字元
+ match 1個或多個前置字元 Ex: 1+ 代表任何1的字串 1 or 11 or 111 etc..))
練習:
_100_ Going through AS
100^100$ Directly connected to AS
100_100$ Originated in AS
100^100_. Networks behind AS 100
^[0-9]+$ AS paths one AS long
^([0-9]+)(_\1)*$ Prepending performed in neighboring originating AS
^$ Networks originated in local AS.* Matches everything
^([0-9]+)(_\1)*$ 比較難解釋,這個會match到相鄰的AS,以及相鄰且有做prepend的 AS
^([0-9]+)代表AS path只有一個的,也就是相鄰ASThe variable
“\1” is put into parentheses for the purpose of the multiplier operator“*”, meaning that this part can match any number of successive occurrences of the sameAS number that was matched by the “[0-9]+” expression. For example, this regularexpression matches AS paths “99 99 99”, “200”, “101 101”, or “5 5 5 5 5”, but it does notmatch the AS path “101 99”.
2009年7月30日 星期四
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
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
訂閱:
文章 (Atom)