本篇主要是對計算機網(wǎng)絡(luò)一些核心思想理解,屬于內(nèi)功心法,初學(xué)者適合入門,非初學(xué)者可以學(xué)習(xí)其設(shè)計思想,總之希望幫助大家提高對網(wǎng)絡(luò)的理解; 深入淺出Linux網(wǎng)絡(luò)硬核指南
本系列從網(wǎng)絡(luò)通信理解到云計算網(wǎng)絡(luò)等網(wǎng)絡(luò)的不同應(yīng)用角色(場景)入手,深入淺出討論了網(wǎng)絡(luò)設(shè)計的核心思想,網(wǎng)絡(luò)TCP/IP協(xié)議棧的設(shè)計,網(wǎng)絡(luò)編程核心技術(shù),網(wǎng)絡(luò)性能優(yōu)化,云網(wǎng)絡(luò)核心技術(shù),網(wǎng)絡(luò)問題排障等,計算機網(wǎng)絡(luò)是程序員或者IT工程師必須要掌握的技能,本系列目的就是讓不同讀者都能加深對網(wǎng)絡(luò)認識,打好堅實的網(wǎng)絡(luò)基礎(chǔ),不管是面試中遇到的網(wǎng)絡(luò)問題,還是工作中遇到的網(wǎng)絡(luò)問題,都能得心應(yīng)手。
1 計算機網(wǎng)絡(luò)通信的本質(zhì) 1948年 香農(nóng) 在 《通信的數(shù)學(xué)理論》中寫道: '通信的基本問題是在一點精確地或者近似的復(fù)現(xiàn)在另一個點所選取的信息' 網(wǎng)絡(luò)通信的本質(zhì)是信息的傳播: 
這里A與B之間的傳播介質(zhì)可以有很多不同層次的理解 可以是有線的(雙絞線、電纜、光纖等) 可以是無線的(藍牙,WIFI,2345G等) 可以是具體的(物理直連) 可以是間接抽象的(跨網(wǎng)絡(luò))

我們可以看看計算機網(wǎng)絡(luò)通信模型: 
這張圖揭示計算機網(wǎng)絡(luò)通信中的核心元素和要解決的核心問題: 發(fā)送端:數(shù)據(jù)的生產(chǎn)者 怎么發(fā)送數(shù)據(jù)? 
要發(fā)送數(shù)據(jù),需要借助網(wǎng)卡這種硬件,OS會按照RFC標準格式來封裝數(shù)據(jù),然后把數(shù)據(jù)傳給網(wǎng)卡,網(wǎng)卡把數(shù)據(jù)轉(zhuǎn)化為電信號/電磁波傳輸出去; 數(shù)據(jù):信息載體 怎么定義數(shù)據(jù)格式? 
大家按照標準來封裝報文,整個鏈路所有網(wǎng)絡(luò)設(shè)備都講相同的“語言”,這樣大家才可以自由交流; 傳輸通道:數(shù)據(jù)傳輸中轉(zhuǎn)站
數(shù)據(jù)存儲 數(shù)據(jù)運輸
怎么轉(zhuǎn)發(fā)數(shù)據(jù)? 
由于發(fā)送端和接收端: 一個發(fā)送端可能要發(fā)給多個接收端,或者多對多場景,發(fā)送端端口有限,不能每個都單獨通信,而且成本高,不易操作; 兩臺設(shè)備長距離傳輸,不可能直接網(wǎng)線相連,性價比太低;
這個時候數(shù)據(jù)需要中間節(jié)點來轉(zhuǎn)發(fā)。中轉(zhuǎn)節(jié)點一般是從一個網(wǎng)口進轉(zhuǎn)到另外一個網(wǎng)口出,一般都是專有硬件處理,可以達到線速轉(zhuǎn)發(fā)(像'直接連線一樣速度');
接收端: 數(shù)據(jù)的消費者 怎么接收數(shù)據(jù)? 
同樣要接收數(shù)據(jù),需要借助網(wǎng)卡這種硬件,把電信號/電磁波信號轉(zhuǎn)化為數(shù)據(jù)傳給OS,OS會按照RFC標準格式來解析,最后把真正的數(shù)據(jù)交給應(yīng)用; 
計算機網(wǎng)絡(luò)通信原理本質(zhì)上是比較“簡單”的,好理解,如果讓你去設(shè)計一個全球網(wǎng)絡(luò)通信系統(tǒng),類似當今的互聯(lián)網(wǎng),你會怎么設(shè)計呢?你會考慮下面的問題嗎? 協(xié)議要怎么設(shè)計? 報文的轉(zhuǎn)發(fā)機制是什么?
怎么保證系統(tǒng)不會掛掉(不可用)? 怎么滿足不同類型計算機通信要求?
互聯(lián)網(wǎng)獲得的成功顯而易見,它已經(jīng)成為當今全球數(shù)字社會最重要的基礎(chǔ)設(shè)施,改變我們生活方方面面,如今電腦,筆記本,電視,iPad,手機等都可以輕松上網(wǎng),網(wǎng)絡(luò)四通八達,信息隨處可達,這背后到底是什么核心技術(shù)支撐這個世界最大網(wǎng)絡(luò)通信系統(tǒng)。是不是你也很好奇,不妨讓我們來看一看互聯(lián)網(wǎng)是怎么解決這些問題的。 2 計算機網(wǎng)絡(luò)通信的核心思想 網(wǎng)絡(luò)的復(fù)雜性 
長距離傳輸,比如訪問國外的網(wǎng)站,數(shù)據(jù)跨越幾千公里,怎么保證數(shù)據(jù)可達? 隨著設(shè)備規(guī)模增大,數(shù)據(jù)流量增大,網(wǎng)絡(luò)會不會崩潰? 計算機性能各異,怎么保證網(wǎng)絡(luò)的公平性? ...
那計算機網(wǎng)絡(luò)是如何解決這些問題的呢? 在此之前,數(shù)據(jù)通信是基于電路交換的想法,就像在傳統(tǒng)的電話網(wǎng)絡(luò)一樣,在通話前先建立專有線路,時延小,適合電話實時通信場景,電路交換體現(xiàn)了一種集中管理思想,所有通信資源都集中分配管理。但適合計算機網(wǎng)絡(luò)通信嗎? 
數(shù)據(jù)通信的技術(shù)演進 電路交換(英語:Circuit Switching)是相對于報文交換(或稱分組交換)的一個概念。電路交換要求必須首先在通信雙方之間建立連接通道。在連接建立成功之后,雙方的通信活動才能開始。通信雙方需要傳遞的信息都是通過已經(jīng)建立好的連接來進行傳遞的,而且這個連接也將一直被維持到雙方的通信結(jié)束。在某次通信活動的整個過程中,這個連接將始終占用著。連接建立開始時,通信系統(tǒng)分配給它的資源(通道、帶寬、時隙、碼字等等),這也體現(xiàn)了電路交換區(qū)別于報文交換的本質(zhì)特征。
電路交換雖然通信實時性高但不適合計算機網(wǎng)絡(luò)通信: 建立專有連接代價高,需要整條鏈路每個節(jié)點分配資源,計算機網(wǎng)絡(luò)通信場景復(fù)雜,高頻低流,不好預(yù)估資源,資源管理會很復(fù)雜; 電路交換采用時分復(fù)用的原理,完全無法應(yīng)對現(xiàn)代互聯(lián)網(wǎng)的流量突發(fā),同時將會有大量的能量被空閑時隙浪費,鏈路資源利用不高,可以說,傳統(tǒng)的電信網(wǎng)絡(luò)是不可擴展的;
報文交換提高了通信線路的利用率,不需要建立連接,但也不適合計算機網(wǎng)絡(luò)通信: 
最終計算機網(wǎng)絡(luò)采用了分組交換技術(shù):
基于報文交換,將報文劃分為更小的數(shù)據(jù)單位:報文分組(也稱為段、包、分組),分組交換比報文交換的時延小,尤其適合于計算機之間的突發(fā)式的數(shù)據(jù)通信; 分組交換采用分布式思想,每臺電腦都是一個“節(jié)點”(node),每個節(jié)點都彼此相聯(lián),形成縱橫交錯的網(wǎng)狀結(jié)構(gòu)。此種網(wǎng)絡(luò)結(jié)構(gòu)中,不存在中央的概念,而且單個節(jié)點的重要性大大降低,每個節(jié)點只關(guān)心與自己相鄰節(jié)點,不會考慮整個鏈路,這樣新節(jié)點更容易加入網(wǎng)絡(luò),而新節(jié)點加入,增加路徑選擇,又加強了網(wǎng)絡(luò)的容錯性; 
不需要建立連接,數(shù)據(jù)報文獨立于網(wǎng)絡(luò)鏈路之上(每個報文都會攜帶地址信息),鏈路可復(fù)用,資源利用率高; 所有轉(zhuǎn)發(fā)節(jié)點采用存儲轉(zhuǎn)發(fā)模式,網(wǎng)絡(luò)節(jié)點僅僅負責(zé)交換數(shù)據(jù)包,業(yè)務(wù)響應(yīng)的功能則被推送到網(wǎng)絡(luò)邊緣的設(shè)備上,由上層來保證數(shù)據(jù)完整性,這樣極大減輕網(wǎng)絡(luò)節(jié)點設(shè)計; 分組交換采用統(tǒng)計復(fù)用原則,意味著在一個處理節(jié)點,數(shù)據(jù)包分組的到達的分布是符合泊松分布,再結(jié)合存儲轉(zhuǎn)發(fā)機制,節(jié)點可緩存一定量報文,從而有效避免處理不及時導(dǎo)致的丟包,保證了整個網(wǎng)絡(luò)穩(wěn)定和平衡。
分組交換(英語:Packet switching)是一種相對于電路交換的通信范例,分組(又稱消息、或消息碎片)在節(jié)點間單獨路由,不需要在傳輸前先建立通信路徑。分組交換是數(shù)據(jù)通信中一種新的且重要的概念,現(xiàn)在是世界上互聯(lián)網(wǎng)通訊、數(shù)據(jù)和語音通信中最重要的基礎(chǔ)。在此之前,數(shù)據(jù)通信是基于電路交換的想法,就像在傳統(tǒng)的電話電路一樣,在通話前先建立專有線路,通信雙方要在電路的兩端。分組交換技術(shù)是在1960年代末出現(xiàn)的,當時美國高級研究計劃局(簡稱ARPA)為實現(xiàn)遠程計算機之間的信息交換,資助建設(shè)一個試驗性的網(wǎng)絡(luò),該網(wǎng)絡(luò)被稱為ARPANET。ARPANET的主要研究成果之一就是開發(fā)一種新的網(wǎng)絡(luò)協(xié)議,在ARPANET網(wǎng)絡(luò)上對話必須使用這種網(wǎng)絡(luò)協(xié)議。該協(xié)議采用一種新的網(wǎng)絡(luò)信息傳輸技術(shù),這就是分組交換技術(shù)。

計算機網(wǎng)絡(luò)通信
理解分組交換這種設(shè)計對我們理解網(wǎng)絡(luò)有什么好處? 整個互聯(lián)網(wǎng)就是一個大型分布式系統(tǒng),TCP/IP協(xié)議就是站在這種視角來設(shè)計的, 擁塞控制算法通過自我退讓機制(非自私思想,我為人人,人人為我),保障整個網(wǎng)絡(luò)公平性和穩(wěn)定性; 網(wǎng)絡(luò)設(shè)備在轉(zhuǎn)發(fā)層面上只關(guān)心與它相連節(jié)點,節(jié)點根據(jù)轉(zhuǎn)發(fā)規(guī)則,按照統(tǒng)一轉(zhuǎn)發(fā)機制路由最長匹配,把數(shù)據(jù)包扔給下一跳設(shè)備,而配置是管理員配置或者動態(tài)學(xué)習(xí)的,網(wǎng)絡(luò)節(jié)點只是轉(zhuǎn)發(fā)工具,上層控制轉(zhuǎn)發(fā)行為; 網(wǎng)絡(luò)節(jié)點轉(zhuǎn)發(fā)行為不是集中控制的,沒有上帝視角,但網(wǎng)絡(luò)最終可以實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā),這里面反映出一些哲學(xué)思考,網(wǎng)絡(luò)可以通過節(jié)點周圍關(guān)系連接任何一個未知節(jié)點(六度理論),這或許就是分組交換能夠成功的底層理論;
分層思想--網(wǎng)絡(luò)協(xié)議分層設(shè)計網(wǎng)絡(luò)協(xié)議要怎么設(shè)計? 
分層好處是降低耦合,上層不關(guān)心底層實現(xiàn),只關(guān)心底層提供服務(wù)(接口); 這樣層與層之間通信就可以標準化。標準化意味著層與層之間獨立性。,可以獨自發(fā)展,這樣設(shè)計帶來很大靈活性和擴展性,比如傳輸層有TCP/UDP/DCCP/STCP等,網(wǎng)絡(luò)層有IPv4/IPv6等, 數(shù)據(jù)鏈路層有以太網(wǎng),VLAN,WIFI,無線3G,4G,5G協(xié)議等; 
網(wǎng)絡(luò)是異構(gòu)復(fù)雜的,分層可以整合異構(gòu)網(wǎng)絡(luò),向上層提供統(tǒng)一視圖,比如中間IP層做了適配,傳輸層和鏈路層互不糾纏,可以獨立發(fā)展; 分層模式擁有遞歸特性,該特性允許邏輯意義的任意封裝和再封裝,比如overlay網(wǎng)絡(luò),VPN,各種tunnel等,使網(wǎng)絡(luò)擴展性大大增強;
理解了計算機網(wǎng)絡(luò)的分層設(shè)計對我們理解網(wǎng)絡(luò)有什么好處? 1. 每一層只關(guān)心自己邏輯執(zhí)行,不會受到其他層的影響

2. 網(wǎng)絡(luò)問題可以從上而下或者從下而上分層分析 
報文分層封裝處理:
 應(yīng)用層:需要用socket編程接口發(fā)送應(yīng)用數(shù)據(jù);

傳輸層(四層):四層采用TCP/UDP等傳輸協(xié)議進行數(shù)據(jù)傳輸;

網(wǎng)絡(luò)層(三層):三層主要是實現(xiàn)路由轉(zhuǎn)發(fā); 路由表主要是存儲路由條目,IP層采用最長匹配算法,查詢路由再再轉(zhuǎn)發(fā): 
鏈路層(二層): 根據(jù)接口對應(yīng)的鏈路層協(xié)議(如以太網(wǎng))組裝報文: 鄰居表主要是保存目的IP地址對應(yīng)的mac地址,mac地址是2層以太網(wǎng)節(jié)點標識,一般通過ARP協(xié)議報文動態(tài)學(xué)習(xí),也可以靜態(tài)配置指定: 
記錄在ARP表里面:

ARP表主要是給報文添加mac頭部: 
二層轉(zhuǎn)發(fā)報文: 主要二層設(shè)備(橋,交換機等)用來根據(jù)目的mac地址查找轉(zhuǎn)發(fā)端口,實現(xiàn)二層轉(zhuǎn)發(fā); 
物理層: 主要是網(wǎng)卡驅(qū)動,網(wǎng)卡芯片處理,把數(shù)據(jù)轉(zhuǎn)化電或者光信息或者無線信號; 
網(wǎng)絡(luò)分層分析可以參考: 云網(wǎng)絡(luò)丟包故障定位全景指南 隨著互聯(lián)網(wǎng)規(guī)模越來越大,計算機處理性能提高,大量數(shù)據(jù)包流向網(wǎng)絡(luò),必然會加劇網(wǎng)絡(luò)擁塞,當網(wǎng)絡(luò)發(fā)生擁塞時,一般會出現(xiàn)數(shù)據(jù)丟失,時延增加,吞吐量下降,嚴重時甚至?xí)?dǎo)致“擁塞崩潰“。 
擁塞控制需要確保網(wǎng)絡(luò)能夠承載用戶提交的通信量,是一個全局性問題,涉及主機、路由器等很多因素:互聯(lián)網(wǎng)采用TCP擁塞控制算法來控制系統(tǒng)的容量,核心思想是主動退讓機制,發(fā)現(xiàn)網(wǎng)絡(luò)擁塞(丟包或者延時加大),就主動減少發(fā)包量,我為人人,人人為我,最終解除擁塞,達到共贏局面: 在終端系統(tǒng)上通常根據(jù)接受到的ACK(Acknowledge character)確認包中包含的信息來調(diào)整擁塞控制窗口的大小,進而控制TCP連接的發(fā)送速率,譬如:TCP Tahoe, TCP Reno, TCP Vegas, TCP NewReno, TCP BIC, TCP CBIC, BBR等算法; 
在網(wǎng)絡(luò)中間設(shè)備上(路由器、防火墻、交換機等)的擁塞控制算法(AQM-Active Queue Management-主動隊列管理)通常根據(jù)設(shè)備中的緩存隊列長度信息對網(wǎng)絡(luò)擁塞控制程度進行判斷,并將擁塞控制信息顯示或隱式地告知端點,端點根據(jù)獲得的擁塞控制信息對自身發(fā)送速率進行調(diào)整,譬如:FIFO, RED(Random Early Detection), ECN(Explicit Congestion Notification), FQ(Fair Queuing)等算法; 道路交通系統(tǒng)是一個典型的統(tǒng)計復(fù)用的分組交換系統(tǒng),其實早在TCP/IP分組交換網(wǎng)絡(luò)之前,道路交通系統(tǒng)就已經(jīng)存在了好幾千年了,我們可以用道路交通系統(tǒng)一些問題來類比分析TCP/IP網(wǎng)絡(luò)中出現(xiàn)的問題,比如道路擁堵類比網(wǎng)絡(luò)擁塞,可以幫助我們更容易理解網(wǎng)絡(luò)。 
這里主要提到了互聯(lián)網(wǎng)通信的三種設(shè)計思想: 分布式思想--分組交換:提供足夠簡單且靈活的分組轉(zhuǎn)發(fā)邏輯,實現(xiàn)數(shù)據(jù)報文在系統(tǒng)中穩(wěn)定轉(zhuǎn)發(fā),網(wǎng)絡(luò)節(jié)點轉(zhuǎn)發(fā)行為不是集中控制的,沒有上帝視角,但網(wǎng)絡(luò)最終可以實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā),反映出網(wǎng)絡(luò)設(shè)計參考一些哲學(xué)思想,網(wǎng)絡(luò)可以通過節(jié)點周圍關(guān)系連接任何一個未知節(jié)點(六度理論),這或許就是分組交換能夠成功的底層理論。 分層思想--網(wǎng)絡(luò)協(xié)議分層設(shè)計:應(yīng)用層高度可擴展,應(yīng)用程序爆炸式增長,得益于網(wǎng)絡(luò)的分層模型;公平思想--傳輸控制:TCP的擁塞控制使網(wǎng)絡(luò)更加公平和穩(wěn)定,提高系統(tǒng)的容錯率,讓系統(tǒng)可以持續(xù)正常運轉(zhuǎn);從技術(shù)上看,“無連接分組交換”這一“革命性的創(chuàng)造”為互聯(lián)網(wǎng)帶來了勝利。而TCP/IP分層模型的“系統(tǒng)化和完備化”使得互聯(lián)網(wǎng)進入了蓬勃發(fā)展的商業(yè)化發(fā)展階段。互聯(lián)網(wǎng)的設(shè)計原理保證了TCP/IP的成功,使其成為了當今信息社會最重要的基礎(chǔ)設(shè)施。一些應(yīng)對復(fù)雜性設(shè)計思想: 底層實現(xiàn)一套穩(wěn)定運行的機制(轉(zhuǎn)發(fā)機制): 比如三層路由最長匹配轉(zhuǎn)發(fā)機制;二層mac地址轉(zhuǎn)發(fā)機制(bridge 轉(zhuǎn)發(fā)機制); 上層實現(xiàn)可配置策略(各種轉(zhuǎn)發(fā)規(guī)則): 比如路由表,鄰居表,mac轉(zhuǎn)發(fā)表等; 分層設(shè)計經(jīng)典思想一致延續(xù)至今,加一層的思想可以實現(xiàn)解耦,也可以實現(xiàn)關(guān)聯(lián),增強了設(shè)計的擴展性; 越簡單且可擴展的設(shè)計越能應(yīng)對未來的變化;
3 計算機網(wǎng)絡(luò)技術(shù)演進 推動網(wǎng)絡(luò)不斷向前發(fā)展的核心訴求: 網(wǎng)絡(luò)通信場景不斷擴展 
人們不斷擴展網(wǎng)絡(luò)通信場景:局域網(wǎng),城域網(wǎng),廣域網(wǎng),無線網(wǎng)絡(luò),互聯(lián)網(wǎng),移動互聯(lián)網(wǎng),工業(yè)互聯(lián)網(wǎng),云計算網(wǎng)絡(luò),物聯(lián)網(wǎng),車聯(lián)網(wǎng)等;
網(wǎng)絡(luò)容量和用戶爆發(fā)式增長 從Web1.0、Web2.0、到移動互聯(lián)網(wǎng)發(fā)展,社交,游戲,短視頻,直播等應(yīng)用流行,互聯(lián)網(wǎng)流量暴漲幾十倍,對網(wǎng)絡(luò)的支撐能力帶來巨大挑戰(zhàn),倒逼網(wǎng)絡(luò)不斷進行向前發(fā)展 
TCP/IP協(xié)議不斷發(fā)展: 從TCP擁塞控制算法Reno到BBR,從TCP到QUIC,從http1.0到http3.0,從IPv4到IPv6等等; 網(wǎng)絡(luò)架構(gòu)演進:從分布式網(wǎng)絡(luò)->中心化網(wǎng)絡(luò)演進,SDN興起; 移動網(wǎng)絡(luò)技術(shù)演進:2G->3G->4G->5G->6G... 傳輸網(wǎng)絡(luò)技術(shù)演進:PDH→SDH->WDM->OTN ...
計算機網(wǎng)絡(luò)安全問題 計算機網(wǎng)絡(luò)安全是當今世界的重要關(guān)注點。黑客一直在使用各種創(chuàng)新技術(shù)竊取重要信息?,F(xiàn)在人們在利用網(wǎng)絡(luò)空間進行日?;顒?,對網(wǎng)絡(luò)空間的依賴性非常高。無論人們被竊取的是業(yè)務(wù)和技術(shù)機密,還是金融系統(tǒng),威脅性都是致命的。 
防火墻技術(shù)演進:包防火墻->狀態(tài)防火墻->應(yīng)用防火墻->... 加密技術(shù)演進:對稱加密->非對稱加密->量子加密 安全領(lǐng)域演進:傳統(tǒng)網(wǎng)絡(luò)安全->移動網(wǎng)絡(luò)安全->云計算網(wǎng)絡(luò)安全->云原生網(wǎng)絡(luò)安全 ...
以上是我對網(wǎng)絡(luò)的部分理解,主要是核心思想理解,希望能夠幫助大家更好理解網(wǎng)絡(luò),也為該系列后續(xù)文章做一些鋪墊,希望大家喜歡 參考: 《The design philosophy of the DARPA internet protocols》 https:// 《Congestion Avoidance and Control》 《網(wǎng)絡(luò)是怎樣連接的》
|