本文已同時發布于我的“即時通訊技術圈”公眾號。
1、引言
哈羅,大家好,我是Jack Jiang。。。(一股濃濃的自媒體視頻旁白味道)。
對于經常看我文章的即時通訊開發者來說,今天要討論的這個話題,貌似有點不著邊際。
是的,自從我整理完《IM開發者的零基礎通信技術入門》系列文章之后,對于網絡編程的理解,開始有點飄了。
言歸正傳。現在,5G技術離我們的生活越來越近了,號稱網絡延遲1ms、下行速度10Gb/s的5G,在這樣逆天的網絡性能指標下,老驥伏櫪的TCP/IP是否仍能Hold的住?帶著這個思考,便有了本文的內容。
▲ 5G網速有多快?看圖感受一下(圖自《零基礎,史上最強5G技術掃盲》)
(本文已同步發布于:http://www.52im.net/thread-2976-1-1.html)
2、學好TCP/IP夠用嗎?
對于即時通訊技術的開發者,從技術棧來說,一條最普通的聊天消息的送達,肯定要涉及到網絡編程技術,而網絡編程最核心的也就是TCP/IP協議(準確的說是TCP/IP協議簇,見《TCP/IP詳解》),毫無疑問深入的學習TCP/IP協議肯定是非常有必要了。
基本上,對于普通的IM或消息推送系統開發來說,對TCP/IP相關的計算機網絡基礎比較熟悉的話,完全夠用了。
▲ 這本書很多人都讀過
3、移動網絡問題,只能賴我代碼爛?
親手寫過即時通訊的網絡通信層的同學都很清楚,在移動網絡中(我說的移動網絡具體指的是運營商的2g/3g/4g/5g這些),因為無線通信的介質和技術實現特殊性,出現了很多傳統有線互聯網不曾有過的網絡通信問題。
就拿IM在移動弱網中出現的各種問題來說,多數開發者都不自信的認為這應該是自已的網絡層代碼寫的不夠優秀,是的,很多時候也確實是這樣。
我收集整理的下面這幾篇資料,就討論的是這些,有興趣可以讀一下:
《現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障》
《百度APP移動端網絡深度優化實踐分享(三):移動端弱網優化篇》
《微信移動端應對弱網絡情況的探索和實踐PPT [附件下載]》
《YY直播在移動弱網環境下的深度優化實踐分享(視頻+PPT)[附件下載]》
其實,很少有人會去思考,在TCP/IP協議被發明出來的50年后,對于現代的移動網絡來說,是否仍然能工作的好?以弱網問題為例,難道我寫的IM總是丟消息、掉線就僅僅是“我”的代碼太爛?
沒錯,這不僅僅是應用層的代碼編寫問題,它或許涉及到TCP/IP的設計局限,甚至移動網絡的底層設計也并不是最完美的。
下面這兩篇文章,對于弱網問題思考,已經深入到運營商的通信技術這一層,強烈建議讀一讀:
《移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”》
《移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結》
如果你的認知,已經開始對底層的網絡通信技術有所困惑,下面這幾篇就是為你準備的:
《IM開發者的零基礎通信技術入門(六):移動終端的接頭人——“基站”技術》
《IM開發者的零基礎通信技術入門(七):移動終端的千里馬——“電磁波”》
《IM開發者的零基礎通信技術入門(八):零基礎,史上最強“天線”原理掃盲》
《IM開發者的零基礎通信技術入門(九):無線通信網絡的中樞——“核心網”》
《IM開發者的零基礎通信技術入門(十):零基礎,史上最強5G技術掃盲》
《IM開發者的零基礎通信技術入門(十一):為什么WiFi信號差?一文即懂!》
《IM開發者的零基礎通信技術入門(十二):上網卡頓?網絡掉線?一文即懂!》
《IM開發者的零基礎通信技術入門(十三):為什么手機信號差?一文即懂!》
《IM開發者的零基礎通信技術入門(十四):高鐵上無線上網有多難?一文即懂!》
4、簡單復習一下TCP/IP
從字面意義上講,有人可能會認為 TCP/IP 是指 TCP 和 IP 兩種協議。實際生活當中有時也確實就是指這兩種協議。
然而在很多情況下,它只是利用 IP 進行通信時所必須用到的協議簇的統稱。
具體來說,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協議。他們與 TCP 或 IP 的關系緊密,是互聯網必不可少的組成部分。TCP/IP 一詞泛指這些協議,因此,有時也稱 TCP/IP 為網際協議簇。
互聯網進行通信時,需要相應的網絡協議,TCP/IP 原本就是為使用互聯網而開發制定的協議簇。因此,互聯網的協議就是 TCP/IP,TCP/IP 就是互聯網的協議。
▲ 上圖反映了TCP/IP協議族的關系(圖片引用自《計算機網絡通訊協議關系圖》)
5、TCP/IP或許太老了
對于現代移動網絡來說,TCP/IP或許太老了。我們簡單了解一下TCP/IP協議的產生過程。
1973年:卡恩與瑟夫開發出了TCP/IP協議中最核心的兩個協議:TCP協議和IP協議。
1974年:卡恩與瑟夫正式發表了TCP/IP協議并對其進行了詳細的說明。同時,為了驗證TCP/IP協議的可用性,使一個數據包由一端發出,在經過近10萬km的旅程后到達服務端。在這次傳輸中,數據包沒有丟失一個字節,這充分說明了TCP/IP協議的成功。
1983年:TCP/IP協議正式替代NCP,從此以后TCP/IP成為大部分因特網共同遵守的一種網絡規則。
1984年:TCP/IP協議得到美國國防部的肯定,成為多數計算機共同遵守的一個標準。
是的,你沒有看錯,TCP/IP協議設計于距今50年前!
▲ 羅伯特·卡恩(左者)與文特·瑟夫(右者)(圖片引用自《技術往事:改變世界的TCP/IP協議》)
6、TCP/IP原本是為固定網絡設計的
雖然TCP/IP自上世紀70年代發明以來,連接了無數的計算機,推動了互聯網的蓬勃發展。
但不可回避的現實是,基于TCP/IP的互聯網,它的初衷是為固定網絡和網絡互連而設計,而今天我們已經發展到了移動互聯時代。
再往后看,未來5G將面臨AR/VR、超高清視頻、物聯網、車聯網等各種應用、用例紛呈,加之網絡安全的緊迫性越發凸顯,TCP/IP或許難以適應未來。
7、TCP/IP或許并不適合移動網絡
7.1 TCP/IP設計之初無法預見高速移動網時代
在TCP/IP剛被設計的年代,即傳統固定互聯網的公元元年,主機是固定的,用于編址的IP也是固定的,世界是平的。
可是隨著應用程序以及芯片技術的活力涌現,設備越來越小,App越來越豐富,當你覺得渾身憋得慌的時候,移動互聯網時代來了。
但傳統的TCP/IP并不適合移動網絡,以TCP/IP協議簇中我們最常用的TCP協議來說,傳統的TCP基于TCP/IP協議頭字段的五元組,而標識設備的IP地址僅僅標識了設備位置,并沒有標識設備本身(實際上不管到了什么年代,IP地址都不應該標識設備本身,它就是標識位置的!問題是,TCP不應該用一個標識位置的元素來標識設備)。
而對于移動互聯網來說,一旦移動設備(比如智能手機)換了位置(通信基站切換了),其IP地址也會改變,進而既有的TCP連接將全部中斷。
▲ 運營商的基站是有覆蓋范圍的,而且覆蓋范圍并不大
對于底層的移動網絡通信技術有所了解的開發人員或許知道,手機的通信是由基站進行代理的,而基站是固定的。換句話說,當你移動到下一個基站的位置時,手機就得自動切換到新的基站,進而重新進行一系列的跟運營商的無線體系進行連接建立的過程。
這在日常生活中使用并沒有什么問題,但在時速達到350公里每小時的復興號高鐵上用手機上網時,這就會導致嚴重的問題。因為基站的信號覆蓋范圍有限,在手機移動速度如此之快的情況下,基站的切換也將頻繁到讓網絡工程師們崩潰(有興趣可以讀一下《IM開發者的零基礎通信技術入門(十四):高鐵上無線上網有多難?一文即懂!》)。
TCP/IP和網絡的關系,可以作個有趣的類比。
假設互聯網是公路,那么TCP/IP這就是這條公路上的一套交通規則。這套規則在制定時,可能考慮到的只是普通的市場內道路(最多是高速公路使用),而現在的5G時代,就好比時速350公里的高速鐵路,試想普通的市內交通規則套用在高速鐵路上,那難道不算是災難嗎。
必竟普通的市內交通速度不會很快,各種規則的制定誤差和余量可以比較大,但高速鐵路上,速度飛快、交通信號控制精確無比的情況下,這套規則,對于開高鐵的司機來說,肯定是膽顫心驚。而TCP/IP對于5G來說,就好比這套老的交通規則,用它來駕馭這么快速的5G快車,是不是很瘋狂?
7.2 TCP/IP與電信網的基因不同
基于TCP/IP的互聯網原本是為固定網絡和網絡互聯設計,而運營商的移動網絡是為移動性連接而生。互聯網的連接是分布式的,而移動通信網絡是集中控制的。
這兩者的技術基因確實有很大不同,在早期移動網絡網絡性能較慢的情況下,這兩者的結合,矛盾似乎并不突出。
實際上,在傳統電信網(就是大家最常用的電話、短信網絡)與IT互聯網是兩撥人各自有玩耍(電信網為代表的就是3GPP標準化組織,互聯網為代表的就是IETF標準化組織)。
在那個移動網還不發達的年代,這兩撥人各自玩各自的,大家誰也不用鳥誰。
隨著人們對移動上網需求越來越旺盛,搞電信網的這撥人只能想辦法接入傳統的互聯網,必竟在當時傳統互聯網太強勢,而移動網的應用場景還在摸索階段,為了能快速解決移動上網的問題,與是也不好麻煩IETF這撥人,所有痛苦默默承受——雖然TCP/IP在移動網上的實施并不合適,但只能想辦法縫縫補補,把移動網的標準制定,往它上面靠。
這就好比,TCP/IP這輛車已經造好了,至于你搞移動網的人,是修一條普通馬路(2G)、還是一條高速公司路(3G)、或者是現在的高速鐵路(5G),反正你只能將就這輛車。原本應該是什么路上跑什么車,而現在是不管你什么路,只能跑這輛車。反正車子跑不好,不怪車子,怪路。。。
好奇葩的邏輯,而這個邏輯就好比是現在的TCP/IP跟移動網的關系。
所以,在5G,甚至未來的6G、7G時代,這種“勉強”的結合,拋必帶來網絡低效、基礎設施成本高昂等問題。
8、移動運營商們已經意識到問題
是的,大佬們已經意識到了問題的嚴重性,正在著手解決。
2020年4月初,歐洲電信標準協會(ETSI)已成立了一個新的行業規范工作組“Non-IP Networking”(ISG NIN),以解決新服務、尤其是5G服務面臨的老式網絡協議所存在的問題。
該工作組的目標是為5G網絡研究開發新的網絡協議,以替代TCP/IP。
是的,這些移動運營商已經發現在4G、甚至5G網絡中使用的基于TCP/IP的技術存在一些問題。
由于TCP/IP協議最初是為互聯網設計,而非為移動通信網絡而生,當移動通信網絡引入TCP/IP后,增加了移動性、安全性、QoS等功能,這使得網絡更復雜,頻譜使用效率較低。為了解決這些問題,后續的修補和替代方案又導致了成本、時延和功耗增加。
大佬們終于承認,對于5G的某些高級服務,TCP/IP確實被認為不是最佳的。
9、移動網絡未來會怎樣?
雖然TCP/IP可能越來越難以適應移動網絡的發展,但不可否認,短期內TCP/IP的不可替代性。
必竟,基于TCP/IP的傳統互聯網所構建的軟件和硬件世界(尤其是硬件)并不是一朝一夕的事,而替換掉這些,無論是從成本還是各方利益來說,都是個需要反復權衡和博弈的事。
一個很好的例子是,IPv4和IPv6,雖然誰都知道IPv4的困境,但IPv6喊了這么多年目前想要普及,仍然還比較遙遠,要知道IPv6已經喊了10年了。因為這小小的IP地址,牽涉的是互聯網從硬到軟幾乎所有環節,影響之大,無出其右。
對于IM開發者來說,因為移動網絡的特殊性,而技術改朝換代也并不鮮見。
比如眾所周之的XMPP協議,設計之初也是野心勃勃——“要讓上IM就像打開網頁一樣簡單!”。確實,XMPP無論是肉眼可讀性,還是數據結構的優雅,都非常優秀,但悲劇的是,設計者們從來沒有想過移動網會發展成今天這樣,或者說設計者們從未考慮過XMPP在移動網下的使用。于是,后面的故事,大家都很清楚——每個人都在抱怨XMPP臃腫、冗余(是的,這里我收集了一大堆這樣的文章),這算個是把優點做成缺點的典型案例了。
或許,未來會有那么一天,移動網絡終有屬于為自已定制的網絡協議標準。而對于搞網絡通信的程序員來說,如果這套新的標準讓能基于移動網絡的代碼編寫,變的愉快起來,那真是謝天謝地了!
10、參考資料
[1] TCP/IP 已完 ?New IP 之后,又來一個 Non-IP
[2] 5G:再見,TCP/IP
[3] 重新設計TCP/IP協議棧以支持設備移動性
[4] 5G要拋棄TCP/IP?
[5] ETSI LAUNCHES NEW GROUP ON NON-IP NETWORKING ADDRESSING 5G NEW SERVICES
附錄:更多網絡編程基礎資料
《TCP/IP詳解 - 第11章·UDP:用戶數據報協議》
《TCP/IP詳解 - 第17章·TCP:傳輸控制協議》
《TCP/IP詳解 - 第18章·TCP連接的建立與終止》
《TCP/IP詳解 - 第21章·TCP的超時與重傳》
《技術往事:改變世界的TCP/IP協議(珍貴多圖、手機慎點)》
《通俗易懂-深入理解TCP協議(上):理論基礎》
《通俗易懂-深入理解TCP協議(下):RTT、滑動窗口、擁塞處理》
《理論經典:TCP協議的3次握手與4次揮手過程詳解》
《理論聯系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程》
《計算機網絡通訊協議關系圖(中文珍藏版)》
《UDP中一個包的大小最大能多大?》
《P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介》
《P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解(基本原理篇)》
《P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇)》
《P2P技術詳解(四):P2P技術之STUN、TURN、ICE詳解》
《通俗易懂:快速理解P2P技術中的NAT穿透原理》
《高性能網絡編程(一):單臺服務器并發TCP連接數到底可以有多少》
《高性能網絡編程(二):上一個10年,著名的C10K并發連接問題》
《高性能網絡編程(三):下一個10年,是時候考慮C10M并發問題了》
《高性能網絡編程(四):從C10K到C10M高性能網絡應用的理論探索》
《高性能網絡編程(五):一文讀懂高性能網絡編程中的I/O模型》
《高性能網絡編程(六):一文讀懂高性能網絡編程中的線程模型》
《Java的BIO和NIO很難懂?用代碼實踐給你看,再不懂我轉行!》
《不為人知的網絡編程(一):淺析TCP協議中的疑難雜癥(上篇)》
《不為人知的網絡編程(二):淺析TCP協議中的疑難雜癥(下篇)》
《不為人知的網絡編程(三):關閉TCP連接時為什么會TIME_WAIT、CLOSE_WAIT》
《不為人知的網絡編程(四):深入研究分析TCP的異常關閉》
《不為人知的網絡編程(五):UDP的連接性和負載均衡》
《不為人知的網絡編程(六):深入地理解UDP協議并用好它》
《不為人知的網絡編程(七):如何讓不可靠的UDP變的可靠?》
《不為人知的網絡編程(八):從數據傳輸層深度解密HTTP》
《不為人知的網絡編程(九):理論聯系實際,全方位深入理解DNS》
《網絡編程懶人入門(一):快速理解網絡通信協議(上篇)》
《網絡編程懶人入門(二):快速理解網絡通信協議(下篇)》
《網絡編程懶人入門(三):快速理解TCP協議一篇就夠》
《網絡編程懶人入門(四):快速理解TCP和UDP的差異》
《網絡編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優勢》
《網絡編程懶人入門(六):史上最通俗的集線器、交換機、路由器功能原理入門》
《網絡編程懶人入門(七):深入淺出,全面理解HTTP協議》
《網絡編程懶人入門(八):手把手教你寫基于TCP的Socket長連接》
《網絡編程懶人入門(九):通俗講解,有了IP地址,為何還要用MAC地址?》
《網絡編程懶人入門(十):一泡尿的時間,快速讀懂QUIC協議》
《技術掃盲:新一代基于UDP的低延時網絡傳輸層協議——QUIC詳解》
《讓互聯網更快:新一代QUIC協議在騰訊的技術實踐分享》
《現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障》
《聊聊iOS中網絡編程長連接的那些事》
《移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”》
《移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結》
《IPv6技術詳解:基本概念、應用現狀、技術實踐(上篇)》
《IPv6技術詳解:基本概念、應用現狀、技術實踐(下篇)》
《從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路》
《腦殘式網絡編程入門(一):跟著動畫來學TCP三次握手和四次揮手》
《腦殘式網絡編程入門(二):我們在讀寫Socket時,究竟在讀寫什么?》
《腦殘式網絡編程入門(三):HTTP協議必知必會的一些知識》
《腦殘式網絡編程入門(四):快速理解HTTP/2的服務器推送(Server Push)》
《腦殘式網絡編程入門(五):每天都在用的Ping命令,它到底是什么?》
《腦殘式網絡編程入門(六):什么是公網IP和內網IP?NAT轉換又是什么鬼?》
《腦殘式網絡編程入門(七):面視必備,史上最通俗計算機網絡分層詳解》
《腦殘式網絡編程入門(八):你真的了解127.0.0.1和0.0.0.0的區別?》
《以網游服務端的網絡接入層設計為例,理解實時通信的技術挑戰》
《邁向高階:優秀Android程序員必知必會的網絡基礎》
《全面了解移動端DNS域名劫持等雜癥:技術原理、問題根源、解決方案等》
《美圖App的移動端DNS優化實踐:HTTPS請求耗時減小近半》
《Android程序員必知必會的網絡通信傳輸層協議——UDP和TCP》
《IM開發者的零基礎通信技術入門(一):通信交換技術的百年發展史(上)》
《IM開發者的零基礎通信技術入門(二):通信交換技術的百年發展史(下)》
《IM開發者的零基礎通信技術入門(三):國人通信方式的百年變遷》
《IM開發者的零基礎通信技術入門(四):手機的演進,史上最全移動終端發展史》
《IM開發者的零基礎通信技術入門(五):1G到5G,30年移動通信技術演進史》
《IM開發者的零基礎通信技術入門(六):移動終端的接頭人——“基站”技術》
《IM開發者的零基礎通信技術入門(七):移動終端的千里馬——“電磁波”》
《IM開發者的零基礎通信技術入門(八):零基礎,史上最強“天線”原理掃盲》
《IM開發者的零基礎通信技術入門(九):無線通信網絡的中樞——“核心網”》
《IM開發者的零基礎通信技術入門(十):零基礎,史上最強5G技術掃盲》
《IM開發者的零基礎通信技術入門(十一):為什么WiFi信號差?一文即懂!》
《IM開發者的零基礎通信技術入門(十二):上網卡頓?網絡掉線?一文即懂!》
《IM開發者的零基礎通信技術入門(十三):為什么手機信號差?一文即懂!》
《IM開發者的零基礎通信技術入門(十四):高鐵上無線上網有多難?一文即懂!》
《IM開發者的零基礎通信技術入門(十五):理解定位技術,一篇就夠》
《百度APP移動端網絡深度優化實踐分享(一):DNS優化篇》
《百度APP移動端網絡深度優化實踐分享(二):網絡連接優化篇》
《百度APP移動端網絡深度優化實踐分享(三):移動端弱網優化篇》
《技術大牛陳碩的分享:由淺入深,網絡編程學習經驗干貨總結》
《可能會搞砸你的面試:你知道一個TCP連接上能發起多少個HTTP請求嗎?》
《知乎技術分享:知乎千萬級并發的高性能長連接網關技術實踐》
《5G時代已經到來,TCP/IP老矣,尚能飯否?》
>> 更多同類文章 ……
歡迎關注我的“即時通訊技術圈”公眾號:
(本文已同步發布于:http://www.52im.net/thread-2976-1-1.html)