網(wǎng)絡(luò)編程懶人入門(十):一泡尿的時(shí)間,快速讀懂QUIC協(xié)議
Posted on 2019-11-01 14:32 Jack Jiang 閱讀(1035) 評(píng)論(0) 編輯 收藏1、TCP協(xié)議到底怎么了?
現(xiàn)時(shí)的互聯(lián)網(wǎng)應(yīng)用中,Web平臺(tái)(準(zhǔn)確地說(shuō)是基于HTTP及其延伸協(xié)議的客戶端/服務(wù)器應(yīng)用)的數(shù)據(jù)傳輸都基于 TCP 協(xié)議。
但TCP 協(xié)議在創(chuàng)建連接之前需要進(jìn)行三次握手(如下圖 1,更詳細(xì)原理請(qǐng)見(jiàn)《理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解》),如果需要提高數(shù)據(jù)交互的安全性,既增加傳輸層安全協(xié)議(TLS),還會(huì)增加更多的更多握手次數(shù)(如下圖 2)。
▲ 圖 1 - TCP的三次握手原理圖
▲ 圖 2 - TLS的初始化握手原理圖正如上面兩張圖里演示的原理,TCP 協(xié)議連接建立的成本相對(duì)較高。
所以,一般的穩(wěn)定網(wǎng)絡(luò)傳輸都是通過(guò)TCP,但是在網(wǎng)絡(luò)基建本身就已經(jīng)越來(lái)越完善的情況下,TCP設(shè)計(jì)本身的問(wèn)題便暴露了出來(lái),特別是在弱網(wǎng)環(huán)境下,讓我們不得不考慮一些新的可能性。
(本文同步發(fā)布于:http://www.52im.net/thread-2816-1-1.html)
現(xiàn)時(shí)的互聯(lián)網(wǎng)應(yīng)用中,Web平臺(tái)(準(zhǔn)確地說(shuō)是基于HTTP及其延伸協(xié)議的客戶端/服務(wù)器應(yīng)用)的數(shù)據(jù)傳輸都基于 TCP 協(xié)議。
但TCP 協(xié)議在創(chuàng)建連接之前需要進(jìn)行三次握手(如下圖 1,更詳細(xì)原理請(qǐng)見(jiàn)《理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解》),如果需要提高數(shù)據(jù)交互的安全性,既增加傳輸層安全協(xié)議(TLS),還會(huì)增加更多的更多握手次數(shù)(如下圖 2)。


正如上面兩張圖里演示的原理,TCP 協(xié)議連接建立的成本相對(duì)較高。
所以,一般的穩(wěn)定網(wǎng)絡(luò)傳輸都是通過(guò)TCP,但是在網(wǎng)絡(luò)基建本身就已經(jīng)越來(lái)越完善的情況下,TCP設(shè)計(jì)本身的問(wèn)題便暴露了出來(lái),特別是在弱網(wǎng)環(huán)境下,讓我們不得不考慮一些新的可能性。
(本文同步發(fā)布于:http://www.52im.net/thread-2816-1-1.html)
2、QUIC協(xié)議登場(chǎng)
和 TCP 相反,UDP 協(xié)議是無(wú)連接協(xié)議。客戶端發(fā)出 UDP 數(shù)據(jù)包后,只能“假設(shè)”這個(gè)數(shù)據(jù)包已經(jīng)被服務(wù)端接收。這樣的好處是在網(wǎng)絡(luò)傳輸層無(wú)需對(duì)數(shù)據(jù)包進(jìn)行確認(rèn),但存在的問(wèn)題就是為了確保數(shù)據(jù)傳輸?shù)目煽啃裕瑧?yīng)用層協(xié)議需要自己完成包傳輸情況的確認(rèn)。
此時(shí),QUIC 協(xié)議就登場(chǎng)了。
QUIC 是 Quick UDP Internet Connections 的縮寫(xiě),谷歌發(fā)明的新傳輸協(xié)議。
與 TCP 相比,QUIC 可以減少延遲。
QUIC 協(xié)議可以在 1 到 2 個(gè)數(shù)據(jù)包(取決于連接的服務(wù)器是新的還是已知的)內(nèi),完成連接的創(chuàng)建(包括 TLS)(如下圖3所示)。

▲ 圖 3 - QUIC 協(xié)議握手原理圖
從表面上看:QUIC 非常類似于在 UDP 上實(shí)現(xiàn)的 TCP + TLS + HTTP/2。由于 TCP 是在操作系統(tǒng)內(nèi)核和中間件固件中實(shí)現(xiàn)的,因此對(duì) TCP 進(jìn)行重大更改幾乎是不可能的(TCP 協(xié)議棧通常由操作系統(tǒng)實(shí)現(xiàn),如 Linux、Windows 內(nèi)核或者其他移動(dòng)設(shè)備操作系統(tǒng)。修改 TCP 協(xié)議是一項(xiàng)浩大的工程,因?yàn)槊糠N設(shè)備、系統(tǒng)的實(shí)現(xiàn)都需要更新)。但是,由于 QUIC 建立在 UDP 之上,因此沒(méi)有這種限制。QUIC 可以實(shí)現(xiàn)可靠傳輸,而且相比于 TCP,它的流控功能在用戶空間而不在內(nèi)核空間,那么使用者就不受限于 CUBIC 或是 BBR,而是可以自由選擇,甚至根據(jù)應(yīng)用場(chǎng)景自由調(diào)整優(yōu)化。
QUIC 與現(xiàn)有 TCP + TLS + HTTP/2 方案相比,有以下幾點(diǎn)主要特征:
1)利用緩存,顯著減少連接建立時(shí)間;
2)改善擁塞控制,擁塞控制從內(nèi)核空間到用戶空間;
3)沒(méi)有 head of line 阻塞的多路復(fù)用;
4)前向糾錯(cuò),減少重傳;
5)連接平滑遷移,網(wǎng)絡(luò)狀態(tài)的變更不會(huì)影響連接斷線。

從圖上可以看出,QUIC 底層通過(guò) UDP 協(xié)議替代了 TCP,上層只需要一層用于和遠(yuǎn)程服務(wù)器交互的 HTTP/2 API。這是因?yàn)?QUIC 協(xié)議已經(jīng)包含了多路復(fù)用和連接管理,HTTP API 只需要完成 HTTP 協(xié)議的解析即可。
有關(guān)QUIC的詳解請(qǐng)見(jiàn):《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》。
和 TCP 相反,UDP 協(xié)議是無(wú)連接協(xié)議。客戶端發(fā)出 UDP 數(shù)據(jù)包后,只能“假設(shè)”這個(gè)數(shù)據(jù)包已經(jīng)被服務(wù)端接收。這樣的好處是在網(wǎng)絡(luò)傳輸層無(wú)需對(duì)數(shù)據(jù)包進(jìn)行確認(rèn),但存在的問(wèn)題就是為了確保數(shù)據(jù)傳輸?shù)目煽啃裕瑧?yīng)用層協(xié)議需要自己完成包傳輸情況的確認(rèn)。
此時(shí),QUIC 協(xié)議就登場(chǎng)了。
QUIC 是 Quick UDP Internet Connections 的縮寫(xiě),谷歌發(fā)明的新傳輸協(xié)議。
與 TCP 相比,QUIC 可以減少延遲。
QUIC 協(xié)議可以在 1 到 2 個(gè)數(shù)據(jù)包(取決于連接的服務(wù)器是新的還是已知的)內(nèi),完成連接的創(chuàng)建(包括 TLS)(如下圖3所示)。

▲ 圖 3 - QUIC 協(xié)議握手原理圖
從表面上看:QUIC 非常類似于在 UDP 上實(shí)現(xiàn)的 TCP + TLS + HTTP/2。由于 TCP 是在操作系統(tǒng)內(nèi)核和中間件固件中實(shí)現(xiàn)的,因此對(duì) TCP 進(jìn)行重大更改幾乎是不可能的(TCP 協(xié)議棧通常由操作系統(tǒng)實(shí)現(xiàn),如 Linux、Windows 內(nèi)核或者其他移動(dòng)設(shè)備操作系統(tǒng)。修改 TCP 協(xié)議是一項(xiàng)浩大的工程,因?yàn)槊糠N設(shè)備、系統(tǒng)的實(shí)現(xiàn)都需要更新)。但是,由于 QUIC 建立在 UDP 之上,因此沒(méi)有這種限制。QUIC 可以實(shí)現(xiàn)可靠傳輸,而且相比于 TCP,它的流控功能在用戶空間而不在內(nèi)核空間,那么使用者就不受限于 CUBIC 或是 BBR,而是可以自由選擇,甚至根據(jù)應(yīng)用場(chǎng)景自由調(diào)整優(yōu)化。
QUIC 與現(xiàn)有 TCP + TLS + HTTP/2 方案相比,有以下幾點(diǎn)主要特征:
1)利用緩存,顯著減少連接建立時(shí)間;
2)改善擁塞控制,擁塞控制從內(nèi)核空間到用戶空間;
3)沒(méi)有 head of line 阻塞的多路復(fù)用;
4)前向糾錯(cuò),減少重傳;
5)連接平滑遷移,網(wǎng)絡(luò)狀態(tài)的變更不會(huì)影響連接斷線。

從圖上可以看出,QUIC 底層通過(guò) UDP 協(xié)議替代了 TCP,上層只需要一層用于和遠(yuǎn)程服務(wù)器交互的 HTTP/2 API。這是因?yàn)?QUIC 協(xié)議已經(jīng)包含了多路復(fù)用和連接管理,HTTP API 只需要完成 HTTP 協(xié)議的解析即可。
有關(guān)QUIC的詳解請(qǐng)見(jiàn):《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》。
3、QUIC協(xié)議的目標(biāo)
QUIC 協(xié)議的主要目的,是為了整合 TCP 協(xié)議的可靠性和 UDP 協(xié)議的速度和效率。
一張圖看懂QUIC協(xié)議的優(yōu)勢(shì):

對(duì)于 Google 來(lái)說(shuō)優(yōu)化 TCP 協(xié)議是一個(gè)長(zhǎng)期目標(biāo),QUIC 旨在創(chuàng)建幾乎等同于 TCP 的獨(dú)立連接,但有著低延遲,并對(duì)類似 SPDY 的多路復(fù)用流協(xié)議有更好的支持。 如果 QUIC 協(xié)議的特性被證明是有效的,這些特性以后可能會(huì)被遷移入后續(xù)版本的 TCP 和 TLS 協(xié)議(它們都有很長(zhǎng)的開(kāi)發(fā)周期)。
值得注意的是,雖然理論上來(lái)說(shuō),如果 QUIC 的特性被證明是有效的,這些特性以后可能會(huì)被遷移到后續(xù)版本的 TCP 協(xié)議中,但鑒于TCP協(xié)議長(zhǎng)達(dá)幾十年在互聯(lián)網(wǎng)通信里的壟斷地位,以及這么多年積累下來(lái)的沉重歷史報(bào)復(fù),想要根本性地優(yōu)化或改進(jìn)TCP協(xié)議,難度相當(dāng)大(或許,有些事情,只能是想想而已,IPV6還喊了這么多年呢,不是一樣沒(méi)普及。。。)。
QUIC 協(xié)議的主要目的,是為了整合 TCP 協(xié)議的可靠性和 UDP 協(xié)議的速度和效率。
一張圖看懂QUIC協(xié)議的優(yōu)勢(shì):

對(duì)于 Google 來(lái)說(shuō)優(yōu)化 TCP 協(xié)議是一個(gè)長(zhǎng)期目標(biāo),QUIC 旨在創(chuàng)建幾乎等同于 TCP 的獨(dú)立連接,但有著低延遲,并對(duì)類似 SPDY 的多路復(fù)用流協(xié)議有更好的支持。 如果 QUIC 協(xié)議的特性被證明是有效的,這些特性以后可能會(huì)被遷移入后續(xù)版本的 TCP 和 TLS 協(xié)議(它們都有很長(zhǎng)的開(kāi)發(fā)周期)。
值得注意的是,雖然理論上來(lái)說(shuō),如果 QUIC 的特性被證明是有效的,這些特性以后可能會(huì)被遷移到后續(xù)版本的 TCP 協(xié)議中,但鑒于TCP協(xié)議長(zhǎng)達(dá)幾十年在互聯(lián)網(wǎng)通信里的壟斷地位,以及這么多年積累下來(lái)的沉重歷史報(bào)復(fù),想要根本性地優(yōu)化或改進(jìn)TCP協(xié)議,難度相當(dāng)大(或許,有些事情,只能是想想而已,IPV6還喊了這么多年呢,不是一樣沒(méi)普及。。。)。
4、QUIC協(xié)議這么好,可以大規(guī)模切換為QUIC嗎?
理想和現(xiàn)實(shí)總是有一定的差距:雖然經(jīng)過(guò)多年的推廣的應(yīng)用,但QUIC協(xié)議目前仍未達(dá)到大量普及的階段,在 IETF上的QUIC 依然還是草稿,并且還存在Google QUIC與IETF QUIC兩類不穩(wěn)定的協(xié)定。
而且,QUIC還面臨以下挑戰(zhàn):
1)小地方,路由封殺UDP 443端口( 這正是QUIC 部署的端口);
2)UDP包過(guò)多,由于QS限定,會(huì)被服務(wù)商誤認(rèn)為是攻擊,UDP包被丟棄;
3)無(wú)論是路由器還是防火墻目前對(duì)QUIC都還沒(méi)有做好準(zhǔn)備。
理想和現(xiàn)實(shí)總是有一定的差距:雖然經(jīng)過(guò)多年的推廣的應(yīng)用,但QUIC協(xié)議目前仍未達(dá)到大量普及的階段,在 IETF上的QUIC 依然還是草稿,并且還存在Google QUIC與IETF QUIC兩類不穩(wěn)定的協(xié)定。
而且,QUIC還面臨以下挑戰(zhàn):
1)小地方,路由封殺UDP 443端口( 這正是QUIC 部署的端口);
2)UDP包過(guò)多,由于QS限定,會(huì)被服務(wù)商誤認(rèn)為是攻擊,UDP包被丟棄;
3)無(wú)論是路由器還是防火墻目前對(duì)QUIC都還沒(méi)有做好準(zhǔn)備。
5、QUIC協(xié)議實(shí)踐
Chrome 瀏覽器從 2014 年開(kāi)始已經(jīng)實(shí)驗(yàn)性的支持了 QUIC 協(xié)議。可以通過(guò)在 Chrome 瀏覽器中輸入 chrome://net-internals/#quic 查看是否已經(jīng)支持 QUIC 協(xié)議。如果還未支持,可以在 chrome://flags/#enable-quic 中進(jìn)行開(kāi)啟。
開(kāi)始 Chrome 瀏覽器對(duì) QUIC 協(xié)議的支持之后,可以在 chrome://net-internals/#quic 中查看到當(dāng)前瀏覽器的 QUIC 一些連接。當(dāng)然目前只有 Google 服務(wù)才支持 QUIC 協(xié)議(如 YouTube、 Google.com)。

Google 在 2015 年的一篇博文中分享了一些關(guān)于 QUIC 協(xié)議實(shí)現(xiàn)的結(jié)果,這些優(yōu)勢(shì)在諸如 YouTube 的視頻服務(wù)上更為突出:用戶報(bào)告通過(guò) QUIC 協(xié)議在觀看視頻的時(shí)候可以減少 30% 的重新緩沖時(shí)間。
Chrome 瀏覽器從 2014 年開(kāi)始已經(jīng)實(shí)驗(yàn)性的支持了 QUIC 協(xié)議。可以通過(guò)在 Chrome 瀏覽器中輸入 chrome://net-internals/#quic 查看是否已經(jīng)支持 QUIC 協(xié)議。如果還未支持,可以在 chrome://flags/#enable-quic 中進(jìn)行開(kāi)啟。
開(kāi)始 Chrome 瀏覽器對(duì) QUIC 協(xié)議的支持之后,可以在 chrome://net-internals/#quic 中查看到當(dāng)前瀏覽器的 QUIC 一些連接。當(dāng)然目前只有 Google 服務(wù)才支持 QUIC 協(xié)議(如 YouTube、 Google.com)。

Google 在 2015 年的一篇博文中分享了一些關(guān)于 QUIC 協(xié)議實(shí)現(xiàn)的結(jié)果,這些優(yōu)勢(shì)在諸如 YouTube 的視頻服務(wù)上更為突出:用戶報(bào)告通過(guò) QUIC 協(xié)議在觀看視頻的時(shí)候可以減少 30% 的重新緩沖時(shí)間。
6、我想試試QUIC協(xié)議,可以怎么做?
目前支持 QUIC 協(xié)議的 web 服務(wù)只有 0.9 版本以后的 Caddy 。其他常用 web 服務(wù)如 nginx、apache 等都未開(kāi)始支持。
整個(gè) QUIC 協(xié)議比較復(fù)雜,想自己完全實(shí)現(xiàn)一套對(duì)筆者來(lái)說(shuō)還比較困難。
所以先看看開(kāi)源實(shí)現(xiàn)有哪些。
1)Chromium:
這個(gè)是官方支持的。優(yōu)點(diǎn)自然很多,Google 官方維護(hù)基本沒(méi)有坑,隨時(shí)可以跟隨 chrome 更新到最新版本。不過(guò)編譯 Chromium 比較麻煩,它有單獨(dú)的一套編譯工具。暫時(shí)不建議考慮這個(gè)方案。
2)proto-quic:
從 chromium 剝離的一個(gè) QUIC 協(xié)議部分,但是其 github 主頁(yè)已宣布不再支持,僅作實(shí)驗(yàn)使用。不建議考慮這個(gè)方案。
3)goquic:
goquic 封裝了 libquic 的 go 語(yǔ)言封裝,而 libquic 也是從 chromium 剝離的,好幾年不維護(hù)了,僅支持到 quic-36, goquic 提供一個(gè)反向代理,測(cè)試發(fā)現(xiàn)由于 QUIC 版本太低,最新 chrome 瀏覽器已無(wú)法支持。不建議考慮這個(gè)方案。
4)quic-go:
quic-go 是完全用 go 寫(xiě)的 QUIC 協(xié)議棧,開(kāi)發(fā)很活躍,已在 Caddy 中使用,MIT 許可,目前看是比較好的方案。
那么,對(duì)于中小團(tuán)隊(duì)或個(gè)人開(kāi)發(fā)者來(lái)說(shuō),比較推薦的方案是最后一個(gè),即采用 caddy 來(lái)部署實(shí)現(xiàn) QUIC。caddy 這個(gè)項(xiàng)目本意并不是專門用來(lái)實(shí)現(xiàn) QUIC 的,它是用來(lái)實(shí)現(xiàn)一個(gè)免簽的 HTTPS web 服務(wù)器的(caddy 會(huì)自動(dòng)續(xù)簽證書(shū))。而QUIC 只是它的一個(gè)附屬功能(不過(guò)現(xiàn)實(shí)是——好像用它來(lái)實(shí)現(xiàn) QUIC 的人更多)。
從Github的技術(shù)趨勢(shì)來(lái)說(shuō),有關(guān)QUIC的開(kāi)源資源越來(lái)越多,有興趣可以自已逐一研究研究:https://github.com/search?q=quic
目前支持 QUIC 協(xié)議的 web 服務(wù)只有 0.9 版本以后的 Caddy 。其他常用 web 服務(wù)如 nginx、apache 等都未開(kāi)始支持。
整個(gè) QUIC 協(xié)議比較復(fù)雜,想自己完全實(shí)現(xiàn)一套對(duì)筆者來(lái)說(shuō)還比較困難。
所以先看看開(kāi)源實(shí)現(xiàn)有哪些。
1)Chromium:
這個(gè)是官方支持的。優(yōu)點(diǎn)自然很多,Google 官方維護(hù)基本沒(méi)有坑,隨時(shí)可以跟隨 chrome 更新到最新版本。不過(guò)編譯 Chromium 比較麻煩,它有單獨(dú)的一套編譯工具。暫時(shí)不建議考慮這個(gè)方案。
2)proto-quic:
從 chromium 剝離的一個(gè) QUIC 協(xié)議部分,但是其 github 主頁(yè)已宣布不再支持,僅作實(shí)驗(yàn)使用。不建議考慮這個(gè)方案。
3)goquic:
goquic 封裝了 libquic 的 go 語(yǔ)言封裝,而 libquic 也是從 chromium 剝離的,好幾年不維護(hù)了,僅支持到 quic-36, goquic 提供一個(gè)反向代理,測(cè)試發(fā)現(xiàn)由于 QUIC 版本太低,最新 chrome 瀏覽器已無(wú)法支持。不建議考慮這個(gè)方案。
4)quic-go:
quic-go 是完全用 go 寫(xiě)的 QUIC 協(xié)議棧,開(kāi)發(fā)很活躍,已在 Caddy 中使用,MIT 許可,目前看是比較好的方案。
那么,對(duì)于中小團(tuán)隊(duì)或個(gè)人開(kāi)發(fā)者來(lái)說(shuō),比較推薦的方案是最后一個(gè),即采用 caddy 來(lái)部署實(shí)現(xiàn) QUIC。caddy 這個(gè)項(xiàng)目本意并不是專門用來(lái)實(shí)現(xiàn) QUIC 的,它是用來(lái)實(shí)現(xiàn)一個(gè)免簽的 HTTPS web 服務(wù)器的(caddy 會(huì)自動(dòng)續(xù)簽證書(shū))。而QUIC 只是它的一個(gè)附屬功能(不過(guò)現(xiàn)實(shí)是——好像用它來(lái)實(shí)現(xiàn) QUIC 的人更多)。
從Github的技術(shù)趨勢(shì)來(lái)說(shuō),有關(guān)QUIC的開(kāi)源資源越來(lái)越多,有興趣可以自已逐一研究研究:https://github.com/search?q=quic
7、本文小結(jié)
QUIC 協(xié)議開(kāi)創(chuàng)性的使用了 UDP 協(xié)議作為底層傳輸協(xié)議,通過(guò)各種方式減少了網(wǎng)絡(luò)延遲。
雖然目前 QUIC 協(xié)議已經(jīng)運(yùn)行在一些較大的網(wǎng)站上,但離大范圍普及還有較長(zhǎng)的一段距離,期待 QUIC 協(xié)議規(guī)范能夠成為終稿,并在除了谷歌瀏覽器之外的其他瀏覽器和應(yīng)用服務(wù)器中也能夠?qū)崿F(xiàn)。
QUIC 協(xié)議開(kāi)創(chuàng)性的使用了 UDP 協(xié)議作為底層傳輸協(xié)議,通過(guò)各種方式減少了網(wǎng)絡(luò)延遲。
雖然目前 QUIC 協(xié)議已經(jīng)運(yùn)行在一些較大的網(wǎng)站上,但離大范圍普及還有較長(zhǎng)的一段距離,期待 QUIC 協(xié)議規(guī)范能夠成為終稿,并在除了谷歌瀏覽器之外的其他瀏覽器和應(yīng)用服務(wù)器中也能夠?qū)崿F(xiàn)。
8、參考資料
《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》
《讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享》
《七牛云技術(shù)分享:使用QUIC協(xié)議實(shí)現(xiàn)實(shí)時(shí)視頻直播0卡頓!》
Google的“ Next generation multiplexed transport over UDP”文檔:
Next generation multiplexed transport over UDP.pdf (563.01 KB )
《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》
《讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享》
《七牛云技術(shù)分享:使用QUIC協(xié)議實(shí)現(xiàn)實(shí)時(shí)視頻直播0卡頓!》
Google的“ Next generation multiplexed transport over UDP”文檔:
Next generation multiplexed transport over UDP.pdf (563.01 KB )
9、系列文章
本文是系列文章中的第10篇,本系列文章的大綱如下:
《網(wǎng)絡(luò)編程懶人入門(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)》
《網(wǎng)絡(luò)編程懶人入門(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)》
《網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠》
《網(wǎng)絡(luò)編程懶人入門(四):快速理解TCP和UDP的差異》
《網(wǎng)絡(luò)編程懶人入門(五):快速理解為什么說(shuō)UDP有時(shí)比TCP更有優(yōu)勢(shì)》
《網(wǎng)絡(luò)編程懶人入門(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門》
《網(wǎng)絡(luò)編程懶人入門(七):深入淺出,全面理解HTTP協(xié)議》
《網(wǎng)絡(luò)編程懶人入門(八):手把手教你寫(xiě)基于TCP的Socket長(zhǎng)連接》
本文是系列文章中的第10篇,本系列文章的大綱如下:
《網(wǎng)絡(luò)編程懶人入門(一):快速理解網(wǎng)絡(luò)通信協(xié)議(上篇)》
《網(wǎng)絡(luò)編程懶人入門(二):快速理解網(wǎng)絡(luò)通信協(xié)議(下篇)》
《網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠》
《網(wǎng)絡(luò)編程懶人入門(四):快速理解TCP和UDP的差異》
《網(wǎng)絡(luò)編程懶人入門(五):快速理解為什么說(shuō)UDP有時(shí)比TCP更有優(yōu)勢(shì)》
《網(wǎng)絡(luò)編程懶人入門(六):史上最通俗的集線器、交換機(jī)、路由器功能原理入門》
《網(wǎng)絡(luò)編程懶人入門(七):深入淺出,全面理解HTTP協(xié)議》
《網(wǎng)絡(luò)編程懶人入門(八):手把手教你寫(xiě)基于TCP的Socket長(zhǎng)連接》
附錄:更多網(wǎng)絡(luò)編程相關(guān)資料推薦
《TCP/IP詳解 - 第11章·UDP:用戶數(shù)據(jù)報(bào)協(xié)議》
《TCP/IP詳解 - 第17章·TCP:傳輸控制協(xié)議》
《TCP/IP詳解 - 第21章·TCP的超時(shí)與重傳》
《技術(shù)往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機(jī)慎點(diǎn))》
《通俗易懂-深入理解TCP協(xié)議(上):理論基礎(chǔ)》
《通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動(dòng)窗口、擁塞處理》
《理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解》
《理論聯(lián)系實(shí)際:Wireshark抓包分析TCP 3次握手、4次揮手過(guò)程》
《計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)》
《P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡(jiǎn)介》
《P2P技術(shù)詳解(二):P2P中的NAT穿越(打洞)方案詳解》
《P2P技術(shù)詳解(三):P2P技術(shù)之STUN、TURN、ICE詳解》
《通俗易懂:快速理解P2P技術(shù)中的NAT穿透原理》
《高性能網(wǎng)絡(luò)編程(一):?jiǎn)闻_(tái)服務(wù)器并發(fā)TCP連接數(shù)到底可以有多少》
《高性能網(wǎng)絡(luò)編程(二):上一個(gè)10年,著名的C10K并發(fā)連接問(wèn)題》
《高性能網(wǎng)絡(luò)編程(三):下一個(gè)10年,是時(shí)候考慮C10M并發(fā)問(wèn)題了》
《高性能網(wǎng)絡(luò)編程(四):從C10K到C10M高性能網(wǎng)絡(luò)應(yīng)用的理論探索》
《高性能網(wǎng)絡(luò)編程(五):一文讀懂高性能網(wǎng)絡(luò)編程中的I/O模型》
《高性能網(wǎng)絡(luò)編程(六):一文讀懂高性能網(wǎng)絡(luò)編程中的線程模型》
《不為人知的網(wǎng)絡(luò)編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇)》
《不為人知的網(wǎng)絡(luò)編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇)》
《不為人知的網(wǎng)絡(luò)編程(三):關(guān)閉TCP連接時(shí)為什么會(huì)TIME_WAIT、CLOSE_WAIT》
《不為人知的網(wǎng)絡(luò)編程(四):深入研究分析TCP的異常關(guān)閉》
《不為人知的網(wǎng)絡(luò)編程(五):UDP的連接性和負(fù)載均衡》
《不為人知的網(wǎng)絡(luò)編程(六):深入地理解UDP協(xié)議并用好它》
《不為人知的網(wǎng)絡(luò)編程(七):如何讓不可靠的UDP變的可靠?》
《不為人知的網(wǎng)絡(luò)編程(八):從數(shù)據(jù)傳輸層深度解密HTTP》
《不為人知的網(wǎng)絡(luò)編程(九):理論聯(lián)系實(shí)際,全方位深入理解DNS》
《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》
《讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享》
《現(xiàn)代移動(dòng)端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請(qǐng)求速度、弱網(wǎng)適應(yīng)、安全保障》
《聊聊iOS中網(wǎng)絡(luò)編程長(zhǎng)連接的那些事》
《移動(dòng)端IM開(kāi)發(fā)者必讀(一):通俗易懂,理解移動(dòng)網(wǎng)絡(luò)的“弱”和“慢”》
《移動(dòng)端IM開(kāi)發(fā)者必讀(二):史上最全移動(dòng)弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(上篇)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(下篇)》
《從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設(shè)計(jì)思路》
《腦殘式網(wǎng)絡(luò)編程入門(一):跟著動(dòng)畫(huà)來(lái)學(xué)TCP三次握手和四次揮手》
《腦殘式網(wǎng)絡(luò)編程入門(二):我們?cè)谧x寫(xiě)Socket時(shí),究竟在讀寫(xiě)什么?》
《腦殘式網(wǎng)絡(luò)編程入門(三):HTTP協(xié)議必知必會(huì)的一些知識(shí)》
《腦殘式網(wǎng)絡(luò)編程入門(四):快速理解HTTP/2的服務(wù)器推送(Server Push)》
《腦殘式網(wǎng)絡(luò)編程入門(五):每天都在用的Ping命令,它到底是什么?》
《腦殘式網(wǎng)絡(luò)編程入門(六):什么是公網(wǎng)IP和內(nèi)網(wǎng)IP?NAT轉(zhuǎn)換又是什么鬼?》
《以網(wǎng)游服務(wù)端的網(wǎng)絡(luò)接入層設(shè)計(jì)為例,理解實(shí)時(shí)通信的技術(shù)挑戰(zhàn)》
《邁向高階:優(yōu)秀Android程序員必知必會(huì)的網(wǎng)絡(luò)基礎(chǔ)》
《全面了解移動(dòng)端DNS域名劫持等雜癥:技術(shù)原理、問(wèn)題根源、解決方案等》
《美圖App的移動(dòng)端DNS優(yōu)化實(shí)踐:HTTPS請(qǐng)求耗時(shí)減小近半》
《Android程序員必知必會(huì)的網(wǎng)絡(luò)通信傳輸層協(xié)議——UDP和TCP》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(一):通信交換技術(shù)的百年發(fā)展史(上)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(二):通信交換技術(shù)的百年發(fā)展史(下)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(三):國(guó)人通信方式的百年變遷》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(四):手機(jī)的演進(jìn),史上最全移動(dòng)終端發(fā)展史》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(五):1G到5G,30年移動(dòng)通信技術(shù)演進(jìn)史》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(六):移動(dòng)終端的接頭人——“基站”技術(shù)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(七):移動(dòng)終端的千里馬——“電磁波”》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(八):零基礎(chǔ),史上最強(qiáng)“天線”原理掃盲》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(九):無(wú)線通信網(wǎng)絡(luò)的中樞——“核心網(wǎng)”》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十):零基礎(chǔ),史上最強(qiáng)5G技術(shù)掃盲》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十一):為什么WiFi信號(hào)差?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十二):上網(wǎng)卡頓?網(wǎng)絡(luò)掉線?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十三):為什么手機(jī)信號(hào)差?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十四):高鐵上無(wú)線上網(wǎng)有多難?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十五):理解定位技術(shù),一篇就夠》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(一):DNS優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(二):網(wǎng)絡(luò)連接優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(三):移動(dòng)端弱網(wǎng)優(yōu)化篇》
《技術(shù)大牛陳碩的分享:由淺入深,網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)干貨總結(jié)》
《可能會(huì)搞砸你的面試:你知道一個(gè)TCP連接上能發(fā)起多少個(gè)HTTP請(qǐng)求嗎?》
《知乎技術(shù)分享:知乎千萬(wàn)級(jí)并發(fā)的高性能長(zhǎng)連接網(wǎng)關(guān)技術(shù)實(shí)踐》
>> 更多同類文章 ……
(本文同步發(fā)布于:http://www.52im.net/thread-2816-1-1.html)
《TCP/IP詳解 - 第11章·UDP:用戶數(shù)據(jù)報(bào)協(xié)議》
《TCP/IP詳解 - 第17章·TCP:傳輸控制協(xié)議》
《TCP/IP詳解 - 第21章·TCP的超時(shí)與重傳》
《技術(shù)往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機(jī)慎點(diǎn))》
《通俗易懂-深入理解TCP協(xié)議(上):理論基礎(chǔ)》
《通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動(dòng)窗口、擁塞處理》
《理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解》
《理論聯(lián)系實(shí)際:Wireshark抓包分析TCP 3次握手、4次揮手過(guò)程》
《計(jì)算機(jī)網(wǎng)絡(luò)通訊協(xié)議關(guān)系圖(中文珍藏版)》
《P2P技術(shù)詳解(一):NAT詳解——詳細(xì)原理、P2P簡(jiǎn)介》
《P2P技術(shù)詳解(二):P2P中的NAT穿越(打洞)方案詳解》
《P2P技術(shù)詳解(三):P2P技術(shù)之STUN、TURN、ICE詳解》
《通俗易懂:快速理解P2P技術(shù)中的NAT穿透原理》
《高性能網(wǎng)絡(luò)編程(一):?jiǎn)闻_(tái)服務(wù)器并發(fā)TCP連接數(shù)到底可以有多少》
《高性能網(wǎng)絡(luò)編程(二):上一個(gè)10年,著名的C10K并發(fā)連接問(wèn)題》
《高性能網(wǎng)絡(luò)編程(三):下一個(gè)10年,是時(shí)候考慮C10M并發(fā)問(wèn)題了》
《高性能網(wǎng)絡(luò)編程(四):從C10K到C10M高性能網(wǎng)絡(luò)應(yīng)用的理論探索》
《高性能網(wǎng)絡(luò)編程(五):一文讀懂高性能網(wǎng)絡(luò)編程中的I/O模型》
《高性能網(wǎng)絡(luò)編程(六):一文讀懂高性能網(wǎng)絡(luò)編程中的線程模型》
《不為人知的網(wǎng)絡(luò)編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇)》
《不為人知的網(wǎng)絡(luò)編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇)》
《不為人知的網(wǎng)絡(luò)編程(三):關(guān)閉TCP連接時(shí)為什么會(huì)TIME_WAIT、CLOSE_WAIT》
《不為人知的網(wǎng)絡(luò)編程(四):深入研究分析TCP的異常關(guān)閉》
《不為人知的網(wǎng)絡(luò)編程(五):UDP的連接性和負(fù)載均衡》
《不為人知的網(wǎng)絡(luò)編程(六):深入地理解UDP協(xié)議并用好它》
《不為人知的網(wǎng)絡(luò)編程(七):如何讓不可靠的UDP變的可靠?》
《不為人知的網(wǎng)絡(luò)編程(八):從數(shù)據(jù)傳輸層深度解密HTTP》
《不為人知的網(wǎng)絡(luò)編程(九):理論聯(lián)系實(shí)際,全方位深入理解DNS》
《技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解》
《讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享》
《現(xiàn)代移動(dòng)端網(wǎng)絡(luò)短連接的優(yōu)化手段總結(jié):請(qǐng)求速度、弱網(wǎng)適應(yīng)、安全保障》
《聊聊iOS中網(wǎng)絡(luò)編程長(zhǎng)連接的那些事》
《移動(dòng)端IM開(kāi)發(fā)者必讀(一):通俗易懂,理解移動(dòng)網(wǎng)絡(luò)的“弱”和“慢”》
《移動(dòng)端IM開(kāi)發(fā)者必讀(二):史上最全移動(dòng)弱網(wǎng)絡(luò)優(yōu)化方法總結(jié)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(上篇)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(下篇)》
《從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設(shè)計(jì)思路》
《腦殘式網(wǎng)絡(luò)編程入門(一):跟著動(dòng)畫(huà)來(lái)學(xué)TCP三次握手和四次揮手》
《腦殘式網(wǎng)絡(luò)編程入門(二):我們?cè)谧x寫(xiě)Socket時(shí),究竟在讀寫(xiě)什么?》
《腦殘式網(wǎng)絡(luò)編程入門(三):HTTP協(xié)議必知必會(huì)的一些知識(shí)》
《腦殘式網(wǎng)絡(luò)編程入門(四):快速理解HTTP/2的服務(wù)器推送(Server Push)》
《腦殘式網(wǎng)絡(luò)編程入門(五):每天都在用的Ping命令,它到底是什么?》
《腦殘式網(wǎng)絡(luò)編程入門(六):什么是公網(wǎng)IP和內(nèi)網(wǎng)IP?NAT轉(zhuǎn)換又是什么鬼?》
《以網(wǎng)游服務(wù)端的網(wǎng)絡(luò)接入層設(shè)計(jì)為例,理解實(shí)時(shí)通信的技術(shù)挑戰(zhàn)》
《邁向高階:優(yōu)秀Android程序員必知必會(huì)的網(wǎng)絡(luò)基礎(chǔ)》
《全面了解移動(dòng)端DNS域名劫持等雜癥:技術(shù)原理、問(wèn)題根源、解決方案等》
《美圖App的移動(dòng)端DNS優(yōu)化實(shí)踐:HTTPS請(qǐng)求耗時(shí)減小近半》
《Android程序員必知必會(huì)的網(wǎng)絡(luò)通信傳輸層協(xié)議——UDP和TCP》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(一):通信交換技術(shù)的百年發(fā)展史(上)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(二):通信交換技術(shù)的百年發(fā)展史(下)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(三):國(guó)人通信方式的百年變遷》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(四):手機(jī)的演進(jìn),史上最全移動(dòng)終端發(fā)展史》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(五):1G到5G,30年移動(dòng)通信技術(shù)演進(jìn)史》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(六):移動(dòng)終端的接頭人——“基站”技術(shù)》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(七):移動(dòng)終端的千里馬——“電磁波”》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(八):零基礎(chǔ),史上最強(qiáng)“天線”原理掃盲》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(九):無(wú)線通信網(wǎng)絡(luò)的中樞——“核心網(wǎng)”》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十):零基礎(chǔ),史上最強(qiáng)5G技術(shù)掃盲》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十一):為什么WiFi信號(hào)差?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十二):上網(wǎng)卡頓?網(wǎng)絡(luò)掉線?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十三):為什么手機(jī)信號(hào)差?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十四):高鐵上無(wú)線上網(wǎng)有多難?一文即懂!》
《IM開(kāi)發(fā)者的零基礎(chǔ)通信技術(shù)入門(十五):理解定位技術(shù),一篇就夠》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(一):DNS優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(二):網(wǎng)絡(luò)連接優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(三):移動(dòng)端弱網(wǎng)優(yōu)化篇》
《技術(shù)大牛陳碩的分享:由淺入深,網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)干貨總結(jié)》
《可能會(huì)搞砸你的面試:你知道一個(gè)TCP連接上能發(fā)起多少個(gè)HTTP請(qǐng)求嗎?》
《知乎技術(shù)分享:知乎千萬(wàn)級(jí)并發(fā)的高性能長(zhǎng)連接網(wǎng)關(guān)技術(shù)實(shí)踐》
>> 更多同類文章 ……
(本文同步發(fā)布于:http://www.52im.net/thread-2816-1-1.html)
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時(shí)通訊開(kāi)發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時(shí)是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級(jí)移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處(也可前往 我的52im.net 找到我)。