太一星晨:談談應用交付中的單邊加速
盡管當前的網絡已非常發達,但平時的工作生活中還是會遇到不少上網慢的情況,造成上網慢的原因多是因為“帶寬窄,鏈路差”。
什么是帶寬窄?
一種就是絕對意義的帶寬窄,比如在光纖都已比較普及的情況下還用ADSL上網,就是真正的帶寬窄了;
另一種則是相對的帶寬窄,比如總帶寬并不低,但是應用的人數較多、并發的流量較大,就造成相對的貸款窄。
尤其在企業級的網絡應用中,發生相對性的帶寬窄的情況特別常見,在這種情況下,在既有帶寬條件不太好改變的情況下,通過部署應用交付進行網絡優化,并打開其中一項“單邊加速”功能成為了一種比較好的解決方式,有助于實現加速訪問的效果。那么,什么是單邊加速呢?國內知名應用交付企業太一星晨的技術哥對此進行了深入淺出的解讀。
從TCP協議說起:了解上網慢的“元兇”
要想了解單邊加速,首先還要從“TCP協議”說起。TCP是一種面向連接的、可靠的、基于字節流的傳輸通信協議,由IETF的RFC 793定義——RFC早在1981年就已經被提出了。
在傳輸數據之前,TCP需要在兩個通信端之間建立起一個連接,即一個TCP通道。這就是TCP經典的“三次握手”:
客戶端發出指令—> 服務器響應“收到指令”—> 客戶端確認“服務器已收到指令的過程”
同時,在這三次握手過程中還包括MSS、時間戳、SACK、窗口等多種參數協議。直觀看來,這個過程確實顯得有些麻煩,不過,在早期網絡帶寬較小,傳輸速率較慢的時期,“TCP協議”卻是一種非常靠譜的傳輸方式。
首先,TCP協議將要發送的數據根據字節進行編號,然后順序發送出去,并等待對方的確認。如果一旦收不到對方的確認,TCP協議就會一而再、再而三的重新發送數據,直到收到確認信息為止。在早期網絡環境下,這種方式是非常有必要的,因為網速太低,發生丟包也不足為奇了。
同時,TCP協議另一大突出特征是將發送的數據以字節為單位進行編號,并從TCP通道發送到對端。這就涉及到了TCP的流控,還有各種各樣的窗口,以及一堆復雜的算法。
簡單來說,當上網時,TCP總是試圖使勁發數據,而一旦對方沒收到(中間出現丟包、亂序或者延遲等情況),它又會主動將發送速度降到0,然后又一點一點試圖再恢復,直到重新把數據塞滿帶寬。即使吞吐已經接近帶寬了,TCP依然會慢慢增加數據的發送,直到又一次觸發丟包點,然后又猛的降下來。
因此,實際的TCP的傳輸吞吐曲線是上下不停波動的。特別是在鏈路狀態不好的情況下,波動的平均線往往被壓得很低:一方面由于頻繁觸發丟包,一方面由于恢復速度緩慢(隔包確認)。
單邊加速:如何讓網絡快起來?
如果說TCP協議是一名80后,那么單邊加速就是一名00后,更了解這個時代主流需求特征。
在具體操作中,單邊加速并不直接更改TCP協議棧,而是通過在轉發報文中增加發送一些報文,來引導快速啟動,觸發快速重傳、快速恢復等,從而達到加速的目的。
目前做單邊加速一般是做如下改進:
1.在慢啟動階段,自動更改CWND的值;
2. 通過RTT的探測,更精確的預測到可能丟包的發生,提前觸發快速重傳,進入擁塞避免,實現了TCP的“滿血復活”;
3. 更精確擁塞控制算法,讓TCP的傳輸吞吐平均值更接近帶寬;
4. 流量整形,避免亂序觸發重復ACK,降低TCP傳輸速度。
由于這個修改過程只是通過設備自動修改TCP的協商參數,所以就不再需要客戶端。
為了能清晰看到單邊加速的效果,太一星晨技術哥特別展示了T-Force 應用交付設備在其公司辦公網實網測試的效果對比。
在未開啟單邊加速時,公司寬帶連接到國內幾大主干網的長途網絡數值分別是:聯通223K/秒,電信456K/秒,鐵通603K/秒;除鐵通正常外,聯通與電信都相對較慢。
未開啟單邊加速時測試結果
在開啟單邊加速后,幾大主干網絡的長途網絡數值則發生了明顯的變化,分別是聯通聯通437K/秒,電信638K/秒,鐵通543K/秒;電信與鐵通都達到了正常水平,聯通雖然仍稍慢一些,但已比之前提升不少。
開啟單邊加速時測試結果
不過,太一星晨技術哥進一步指出,單邊加速只能針對TCP的業務,對于視頻、語音等基于UDP傳輸的數據是無法生效的。
此外,單邊加速一般是在鏈路質量較差的網絡環境下才能發揮顯性的作用,在帶寬足夠的情況下,效果對比則不會太明顯。但無論如何,開啟單邊加速,對網絡優化終歸還是會起到一定的效果,尤其是在網絡帶寬較低且一時間難以改變現狀的情況下,通過應用交付部署并開啟單邊加速功能就不失為一項好的選擇。