TCP 版本觀察 ( 一 )   指導教授:許子衡 教授   學  生:董藝興
TCP 雍塞控制
壅塞控制基本方法•   TCP 在調整傳送端的傳送速度時,以 slow-    start threshold( 簡稱 ssthresh) 與 cwnd 的值來    區分 slow-start phase 和 congestion avoid...
slow-start• 當 cwnd 的值小於 ssthresh 時, TCP 處於  slow-start phase 。• 每收到一個 ACK , cwnd 的值 +1 ,因為每  經過一個 RTT 時間, cwnd 的值為上一個  RTT...
congestion avoidance phase:• 每經過一個 RTT 時間, cwnd 的值才會增加  一個 segment ,以避免 cwnd 增加太快而導  致封包遺失。• 若偵測到包遺失或 Timeout 時,則 TCP 的傳  ...
TCP Tahoe  • Tahoe 具備 TCP 的基本架構 – slow-start – 重傳遺失封包 – fast retransmit
TCP Tahoe• fast retransmit 使用 duplicate ACK 做為重送  封包的依據。• 若傳送端收到 3 個 duplicate ACK 會將封包  視為遺失,不待 timeout 便立即重送。避免  slow-st...
TCP Reno• 在 fast recovery 階段,當收到 duplicate  ACK , Reno 還可以使用 self-clocking 的機制  繼續送出新的封包以提高 link 的使用率。• 若封包遺失的情形能夠在不需使用 ti...
實驗
程式碼1.    if {$argc !=1} {2.     puts "Usage: ns exp8.tcl TCPversion "3.     puts "Example:ns exp8.tcl Tahoe or ns exp8.tcl...
程式碼1. proc finish {} {2.     global ns nd f0 tcp3.     # 顯示最後的平均吞吐量4.     puts [format "average throughput:%.1f Kbps" 5. [...
程式碼1.    # 定義一個記錄的程序2.    # 每格 0.01 秒就去記錄當時的 cwnd3.    proc record {} {4.     global ns tcp f05.     set now [$ns now]6.  ...
程式碼•   # 建立鏈路•   $ns duplex-link $n0 $r0 10Mb 1ms DropTail•   $ns duplex-link $r0 $r1 1Mb 4ms DropTail•   $ns duplex-link ...
程式碼•   # 建立 FTP 應用程式•   set ftp [new Application/FTP]•   $ftp attach-agent $tcp•   # 在 0.0 秒時 , 開始傳送•   $ns at 0.0 "$ftp s...
平均吞吐量
Tahoe
Reno
Upcoming SlideShare
Loading in …5
×

2010 5 d4d393f6

359 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
359
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

2010 5 d4d393f6

  1. 1. TCP 版本觀察 ( 一 )   指導教授:許子衡 教授   學  生:董藝興
  2. 2. TCP 雍塞控制
  3. 3. 壅塞控制基本方法• TCP 在調整傳送端的傳送速度時,以 slow- start threshold( 簡稱 ssthresh) 與 cwnd 的值來 區分 slow-start phase 和 congestion avoidance phase 。• cwnd(t+tr) slow-start phase: cwnd(t)+1, if cwnd(t)<ssthresh; congestion avoidance phase: cwnd(t)+1/cwnd(t),if cwnd(t)>=ssthresh;
  4. 4. slow-start• 當 cwnd 的值小於 ssthresh 時, TCP 處於 slow-start phase 。• 每收到一個 ACK , cwnd 的值 +1 ,因為每 經過一個 RTT 時間, cwnd 的值為上一個 RTT 時的 cwnd 值的 2 倍。• 此時的 cwnd 以指數 ( 2的倍數 ) 的方式增 加。
  5. 5. congestion avoidance phase:• 每經過一個 RTT 時間, cwnd 的值才會增加 一個 segment ,以避免 cwnd 增加太快而導 致封包遺失。• 若偵測到包遺失或 Timeout 時,則 TCP 的傳 送端會將 ssthresh 值設為發生壅塞時的 cwnd 的二分之一和重設 cwnd 的值並開始 從送遺失封包
  6. 6. TCP Tahoe  • Tahoe 具備 TCP 的基本架構 – slow-start – 重傳遺失封包 – fast retransmit
  7. 7. TCP Tahoe• fast retransmit 使用 duplicate ACK 做為重送 封包的依據。• 若傳送端收到 3 個 duplicate ACK 會將封包 視為遺失,不待 timeout 便立即重送。避免 slow-start 機制產生 (ssrhresh=cwnd/2 , cwnd=1)
  8. 8. TCP Reno• 在 fast recovery 階段,當收到 duplicate ACK , Reno 還可以使用 self-clocking 的機制 繼續送出新的封包以提高 link 的使用率。• 若封包遺失的情形能夠在不需使用 timeout retransmit 的情況下就將之回復,那麼 Reno 在收到 duplicate ACK 後就會進入 congestion avoidance 。
  9. 9. 實驗
  10. 10. 程式碼1. if {$argc !=1} {2. puts "Usage: ns exp8.tcl TCPversion "3. puts "Example:ns exp8.tcl Tahoe or ns exp8.tcl Reno"4. exit5. }6. set par1 [lindex $argv 0]7. # 產生一個模擬的物件8. set ns [new Simulator]9. # 開啟一個 trace file ,用來記錄封包傳送的過程10. set nd [open out-$par1.tr w]11. $ns trace-all $nd12. # 開啟一個檔案用來記錄 cwnd 變化情況13. set f0 [open cwnd-$par1.tr w]
  11. 11. 程式碼1. proc finish {} {2. global ns nd f0 tcp3. # 顯示最後的平均吞吐量4. puts [format "average throughput:%.1f Kbps" 5. [expr [$tcp set ack_]*([$tcp set packetSize_])*8/1000.0/10]]6. $ns flush-trace7. # 關閉檔案8. close $nd9. close $f010. exit 0
  12. 12. 程式碼1. # 定義一個記錄的程序2. # 每格 0.01 秒就去記錄當時的 cwnd3. proc record {} {4. global ns tcp f05. set now [$ns now]6. puts $f0 "$now [$tcp set cwnd_]"7. $ns at [expr $now+0.01] "record"8. }9. # 產生傳送節點 , 路由器 r1,r2 和接收節點10. set n0 [$ns node]11. set r0 [$ns node]12. set r1 [$ns node]13. set n1 [$ns node]
  13. 13. 程式碼• # 建立鏈路• $ns duplex-link $n0 $r0 10Mb 1ms DropTail• $ns duplex-link $r0 $r1 1Mb 4ms DropTail• $ns duplex-link $r1 $n1 10Mb 1ms DropTail• # 設定佇列長度為 18 個封包大小• set queue 18• $ns queue-limit $r0 $r1 $queue• # 根據使用者的設定 , 指定 TCP 版本• if {$par1=="Tahoe"} {• set tcp [new Agent/TCP]• } else {• set tcp [new Agent/TCP/Reno]}• $ns attach-agent $n0 $tcp• set tcpsink [new Agent/TCPSink]• $ns attach-agent $n1 $tcpsink• $ns connect $tcp $tcpsink
  14. 14. 程式碼• # 建立 FTP 應用程式• set ftp [new Application/FTP]• $ftp attach-agent $tcp• # 在 0.0 秒時 , 開始傳送• $ns at 0.0 "$ftp start"• # 在 10.0 秒時 , 結束傳送• $ns at 10.0 "$ftp stop"• # 在 0.0 秒時去呼叫 record 來記錄 TCP 的 cwnd 變化情況• $ns at 0.0 "record"• # 在第 10.0 秒時去呼叫 finish 來結束模擬• $ns at 10.0 "finish"• # 執行模擬• $ns run
  15. 15. 平均吞吐量
  16. 16. Tahoe
  17. 17. Reno

×