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