為什么TCP不會(huì)被取代
“吐槽”TCP的理由幾乎都是這幾句話:
- TCP 的擁塞控制算法會(huì)在丟包時(shí)主動(dòng)降低吞吐量;
- TCP 的三次握手增加了數(shù)據(jù)傳輸?shù)难舆t和額外開(kāi)銷;
- TCP 的累計(jì)應(yīng)答機(jī)制導(dǎo)致了數(shù)據(jù)段的傳輸;
最后歸結(jié)為——在弱網(wǎng)絡(luò)環(huán)境下,TCP效率會(huì)大幅度下降,所以Google的QUIC才是解放生產(chǎn)力的工具——畢竟人家已經(jīng)HTTP 3了。
什么是弱網(wǎng)絡(luò)
弱網(wǎng)絡(luò)一般是指Wireless Network,LTE(4G)、Wifi都屬于這種類型的網(wǎng)絡(luò)。網(wǎng)絡(luò)是往移動(dòng)性、無(wú)界的方向演進(jìn)的,受限于接入技術(shù)的發(fā)展,無(wú)線接入面臨著覆蓋范圍、更高帶寬的雙重考驗(yàn)??梢园堰@種情況理解為“不穩(wěn)定的物理鏈路”,它不像以太網(wǎng)有線接入——通或者不通,而是會(huì)出現(xiàn)“帶寬”小到無(wú)法傳輸一個(gè)包頭(通常說(shuō)的“信號(hào)差”)或者直接“物理斷開(kāi)”。這并不是由于網(wǎng)絡(luò)傳輸過(guò)程中擁塞、QoS或者服務(wù)器端來(lái)不及處理引起的,而是由于Wireless Network接入技術(shù)本身的技術(shù)瓶頸。
賭未來(lái)
技術(shù)只會(huì)往好的方向發(fā)展,Wireless Network目前的技術(shù)“終點(diǎn)”是5G。是的,不要以為5G僅僅會(huì)代替手機(jī)接入,Wifi信號(hào)強(qiáng)度的問(wèn)題也只能通過(guò)“蜂窩技術(shù)”解決,而目前最先進(jìn)的蜂窩技術(shù)就是5G。簡(jiǎn)單來(lái)說(shuō),5G會(huì)帶來(lái):
- 通過(guò)更高頻段、更好的調(diào)制解調(diào)、更牛逼的天線提供更好的無(wú)線接入物理鏈路;
- 通過(guò)就邊緣節(jié)點(diǎn)降低延時(shí);
- 通過(guò)NFV、云網(wǎng)融合提供更加有效、靈活的組網(wǎng)方式;
如果賭未來(lái),那么未來(lái)可能并不存在“弱網(wǎng)絡(luò)”。所以當(dāng)看到具有“先見(jiàn)之明的IETF”通過(guò)了QUIC成為HTTP3草案的時(shí)候我是一臉懵逼的。HTTP2還沒(méi)有普及,大佬們已經(jīng)忙著制定HTTP3——而且以他們的學(xué)識(shí)應(yīng)該能看到5G肯定會(huì)比HTTP2更早成熟,怎么就這么迫不及待的制定HTTP3了呢?后來(lái)我想明白了——沒(méi)有規(guī)定說(shuō)“KPI項(xiàng)目”只能我朝使用,允許咱們“KPI開(kāi)源”就得允許人家“KPI規(guī)范”。Google一直想在網(wǎng)絡(luò)上有所作為,所以必須“有所作為”。
解決當(dāng)下
回答一個(gè)問(wèn)題:作為應(yīng)用程序,“你”需要一個(gè)什么樣的協(xié)議?
- 如果你不希望發(fā)生丟包那么一定需要確認(rèn)(ACK)機(jī)制;
- 如果你希望數(shù)據(jù)有序,那么你一定需要分配一塊“緩沖”,在某個(gè)時(shí)間段內(nèi)重組數(shù)據(jù)包;
按照這個(gè)思路想下去,結(jié)果一定是——滑動(dòng)窗口、擁塞算法、ACK機(jī)制,所以當(dāng)你需要一個(gè)可靠協(xié)議的時(shí)候結(jié)論一定是TCP協(xié)議,當(dāng)你試圖創(chuàng)造一個(gè)“新”可靠協(xié)議的時(shí)候幾乎就是在重新發(fā)明TCP。最終大家的爭(zhēng)論焦點(diǎn)就只能是——ACK的時(shí)機(jī)、如何設(shè)置滑動(dòng)窗口大小、如何優(yōu)化RTO之類的問(wèn)題。
至于三次握手,其實(shí)根本不是問(wèn)題重點(diǎn)。從設(shè)計(jì)上講是需要“會(huì)話”的概念的,況且建立會(huì)話的握手過(guò)程并不會(huì)帶來(lái)非常明顯的網(wǎng)絡(luò)開(kāi)銷。
現(xiàn)在說(shuō)的“弱網(wǎng)絡(luò)”真正要解決的問(wèn)題是,如果網(wǎng)絡(luò)幾乎無(wú)法通訊,應(yīng)用程序要及時(shí)知道并且做出反饋動(dòng)作(停止網(wǎng)絡(luò)請(qǐng)求、提示網(wǎng)絡(luò)無(wú)法連接)
以微信為例,在弱網(wǎng)絡(luò)中,TCP的RTO(重傳超時(shí))是動(dòng)態(tài)計(jì)算出來(lái)的,如果出現(xiàn)網(wǎng)絡(luò)問(wèn)題應(yīng)用并不能很快感知。社交類應(yīng)用是對(duì)“反饋”非常敏感的應(yīng)用,所以需要做“弱網(wǎng)絡(luò)優(yōu)化”。解決這個(gè)問(wèn)題最徹底的辦法是修改協(xié)議棧,然而——一個(gè)應(yīng)用程序就別瞎琢磨內(nèi)核的事情了。所以用了一套“工程化”的方式解決這個(gè)問(wèn)題,比如Fast Recovery、HARQ、連接池、合并連接等無(wú)所不用其極的方法。
如果一個(gè)協(xié)議要取代TCP那么一定是在重新實(shí)現(xiàn)TCP
未來(lái)的網(wǎng)絡(luò)是具有更好接入體驗(yàn)、更大帶寬、更低延時(shí)、更靈活組網(wǎng)方式、更高效通訊的網(wǎng)絡(luò),所以如果一個(gè)技術(shù)要解決的問(wèn)題域是一個(gè)很“猥(狹)瑣(隘)”的領(lǐng)域,那么它真的不應(yīng)該成為“趨勢(shì)”乃至標(biāo)準(zhǔn)。一個(gè)具備生命力的技術(shù)應(yīng)該提供機(jī)制而不是策略。解決“當(dāng)下問(wèn)題”是一種策略,為了混口飯吃逼出來(lái)的一些辦法而已。

























