什么是慢啟動


 

最初的TCP的實現方式是,在連接建立成功后便會向網絡中發送大尺寸的數據包,假如網絡出現問題,很多這樣的大包會積攢在路由器上,很容易導致網絡中路由器緩存空間耗盡,從而發生擁塞。因此現在的TCP協議規定了,新建立的連接不能夠一開始就發送大尺寸的數據包,而只能從一個小尺寸的包開始發送,在發送和數據被對方確認的過程中去計算對方的接收速度,來逐步增加每次發送的數據量(最后到達一個穩定的值,進入高速傳輸階段。相應的,慢啟動過程中,TCP通道處在低速傳輸階段),以避免上述現象的發生。這個策略就是慢啟動。

慢啟動導致客戶端與服務器之間經過幾百毫秒才能達到接近最大速度的問題,對於大型流式下載服務的影響倒不顯著,因為慢啟動的時間可以分攤到整個傳輸周期內消化掉。可是,對於很多HTTP連接,特別是一些短暫、突發的連接而言,常常會出現還沒有達到最大窗口請求就被終止的情況。換句話說,很多Web應用的性能經常受到服務器與客戶端之間往返時間的制約。因為慢啟動限制了可用的吞吐量,而這對於小文件傳輸非常不利。慢啟動重啟除了調節新連接的傳輸速度,TCP還實現了SSR(Slow-StartRestart,慢啟動重啟)機制。

這種機制會在連接空閑一定時間后重置連接的擁塞窗口。道理很簡單,在連接空閑的同時,網絡狀況也可能發生了變化,為了避免擁塞,理應將擁塞窗口重置回“安全的”默認值。毫無疑問,SSR對於那些會出現突發空閑的長周期TCP連接(比如HTTP的keep-alive連接)有很大的影響。因此,我們建議在服務器上禁用SSR。在Linux平台,可以通過如下命令來檢查和禁用SSR:
sysctlnet.ipv4.tcp_slow_start_after_idle
sysctl-wnet.ipv4.tcp_slow_start_after_idle=0

 

典型案例:
hbase主備集群之間增量同步,主集群在上海,備集群在張北,服務器均為萬兆網卡,且帶寬沒有達到上限;長途帶寬為專線,帶寬足夠,不會成為瓶頸。跨長途帶寬復制數據,由於數據量較大,總是有延遲。

解決方法:

將內核參數從1調整到0,禁用慢啟動:
sysctl-w net.ipv4.tcp_slow_start_after_idle=0

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM