多點頭發(fā)莫瞬,少點代碼
我是龍叔雄卷,一個分享互聯(lián)網(wǎng)技術(shù)和心路歷程的大叔
本文已經(jīng)收錄至我的GitHub,歡迎大家踴躍star 和 issues搓蚪。
https://github.com/midou-tech/articles
最近很忙,寫技術(shù)文章還是很花費時間的丁鹉。但是妒潭,就在前幾天出了一篇TCP粘包問題的文章 (TCP粘包,難道說這是一個偽命題揣钦?雳灾??)冯凹,反映不錯谎亩。本來計劃計算機網(wǎng)絡(luò)文章慢慢的出,現(xiàn)在看來必須的加快速度了宇姚。
龍叔在學習網(wǎng)絡(luò)的時候有這樣幾個疑惑:
為什么需要抽象出五層模型出來匈庭?
難道不是直接在網(wǎng)線(光纖傳輸)中傳輸數(shù)據(jù)就好了么?大不了到了端點用的是WIFI傳輸(無線信號)浑劳。
這兩個問題真的很困惑我嚎花,不知道大家有沒有這樣的疑惑?如果有的話呀洲,龍叔將為你答疑解惑。如果有其他的疑惑歡迎加我微信溝通 (公眾號回復(fù)【龍叔】即可獲得龍叔的聯(lián)系方式)啼止。
在回答問題之前我先帶你領(lǐng)略下使用最為廣泛的五層模型道逗,分別是哪五層?各層解決了什么問題献烦?
五層模型是哪五層滓窍?
左邊是OSI的七層模型,這模型很牛逼巩那。但是現(xiàn)在基本是存在教科書的啦吏夯,學習網(wǎng)絡(luò)的同學都是知道有這個模型,實際情況使用很少的即横。
右邊是TCP/IP五層分層模型噪生。分別是物理層(硬件)、數(shù)據(jù)鏈路層(網(wǎng)卡層)东囚、網(wǎng)絡(luò)層(互聯(lián)網(wǎng)層)跺嗽、傳輸層、應(yīng)用層。在日常工作中接觸最多的是上兩層桨嫁,偶爾會去觸碰網(wǎng)絡(luò)層植兰。數(shù)據(jù)鏈路層和物理層不是我們工作范圍。當然如果是一些專門的網(wǎng)絡(luò)安全部門璃吧,網(wǎng)管(不是網(wǎng)吧的網(wǎng)管)等崗位楣导,下面幾層就是非常熟悉的。
五層模型還是很清楚明了的畜挨,每層用到的重要協(xié)議都表示在圖中筒繁,還表示了操作系統(tǒng)的內(nèi)核工作范圍和用戶工作范圍。
各層解決了什么問題朦促?
應(yīng)用層:
應(yīng)用層是網(wǎng)絡(luò)體系架構(gòu)中的最高層膝晾。這意味著什么?想想就知道务冕,最高層就是要和人交互的層次嘛血当。
應(yīng)用層是計算機網(wǎng)絡(luò)與用戶交互的接口或者界面,直接向用戶提供服務(wù)禀忆。
提供哪些服務(wù)呢臊旭?
這個...,就非常多了箩退,比如Web服務(wù)离熏、E-mail服務(wù)、DNS服務(wù)戴涝、DHCP服務(wù)滋戳、FTP服務(wù)等等。
所以很明了啥刻,應(yīng)用層解決的問題就是如何為用戶提供服務(wù)奸鸯,以及提供高效、可靠可帽、滿意的服務(wù)娄涩。如何解決這些問題也就是我們這些攻城獅存在的必要了,根據(jù)不同的業(yè)務(wù)場景用不同的方法解決這些問題映跟。例如使用多線程蓄拣、協(xié)程,高并發(fā)的web框架努隙,使用epoll處理模式球恤,分布式處理等等技術(shù)來解決提供高效、可靠剃法、滿意的服務(wù)碎捺。
總結(jié)下路鹰,應(yīng)用層是為用戶提供服務(wù)接口或者界面,同時要解決服務(wù)的高效收厨、可靠晋柱、滿意。
傳輸層
負責端到端的通信诵叁,是面向網(wǎng)絡(luò)通信的低三層和面向信息處理的高三層之間的中間一層雁竞,起到橋梁作用。很明顯了拧额,傳輸層解決的問題就是端到端的傳輸問題碑诉。
看到這句話肯定很多人有疑問,先別說侥锦,繼續(xù)看(我知道有人會說进栽,網(wǎng)絡(luò)層不是已經(jīng)把數(shù)據(jù)轉(zhuǎn)發(fā)到對應(yīng)的主機了么,為何還要傳輸層恭垦?)快毛。
位于兩臺網(wǎng)絡(luò)主機間的真正數(shù)據(jù)通信主體不是這兩臺主機,而是兩臺主機中的各種網(wǎng)絡(luò)應(yīng)用進程番挺,也就是應(yīng)用程序唠帝。一臺主機上有很多應(yīng)用程序,很多應(yīng)用程序都在進行網(wǎng)絡(luò)通信玄柏,這時候就必須使用到傳輸層的知識去解決了襟衰。
怎樣完成端到端的傳輸呢?
分為兩個步驟:一是虛擬傳輸連接的建立(此處仍僅針對面向連接的傳輸層協(xié)議)粪摘,二是源端用戶數(shù)據(jù)沿著傳輸連接傳送到目的端瀑晒。
在整個數(shù)據(jù)傳輸過程中,傳輸層服務(wù)需要完成以下8個方面的基本功能:傳輸層尋址徘意、傳輸連接建立瑰妄、數(shù)據(jù)傳輸、傳輸連接釋放映砖、流量控制、擁塞控制灾挨、多路復(fù)用和解復(fù)用邑退、崩潰恢復(fù)。
這里面每個功能都能細說一篇文章劳澄,這里就不一一展開了地技,后面會出系列的文章,所以點關(guān)注秒拔,不迷路莫矗。每個功能都是面試的考點,所以我后面一定會快速更新出來的。
總結(jié)下作谚,傳輸層主要是為了解決端到端(這里的端到端指的是進程到進程)的通信三娩,起到網(wǎng)絡(luò)通信橋梁作用。
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層也被稱為中轉(zhuǎn)層妹懒,是網(wǎng)絡(luò)體系結(jié)構(gòu)中非常重要的一層雀监,在技術(shù)上又是非常復(fù)雜的一層,因為它既要解決不同網(wǎng)絡(luò)的節(jié)點間通信的路由和協(xié)議識別問題眨唬,又要通過路由選擇策略解決網(wǎng)絡(luò)擁塞問題会前,盡可能提高網(wǎng)絡(luò)通信的可靠性。
網(wǎng)絡(luò)層解決的主要問題是匾竿,從A主機把數(shù)據(jù)運送到B主機是走高速呢瓦宜、飛機呢、還是火車呢或者是多種混合的方案呢岭妖。一句話就是临庇,網(wǎng)絡(luò)層關(guān)注的是如何將分組從源端沿著網(wǎng)絡(luò)路徑傳送到目的端(這個端指的是主機不是應(yīng)用程序)。
為了實現(xiàn)這個目標区转,網(wǎng)絡(luò)層必須知道通信子網(wǎng)的拓撲結(jié)構(gòu)苔巨,并且在拓撲結(jié)構(gòu)中選擇適當?shù)穆窂健M瑫r網(wǎng)絡(luò)層還必須謹慎地選擇路由路徑废离,以避免發(fā)生某些通信線路和路由器負載過重侄泽,而其他線路和路由器空閑的情形。
總結(jié)下蜻韭,網(wǎng)絡(luò)層主要是為了解決不同網(wǎng)絡(luò)之間數(shù)據(jù)傳輸和轉(zhuǎn)發(fā)問題悼尾。
數(shù)據(jù)鏈路層
物理層中也有許多規(guī)程或協(xié)議,但它們是用來構(gòu)建物理傳輸線路肖方、建立物理意義的網(wǎng)絡(luò)通信闺魏,不是用來控制數(shù)據(jù)傳輸?shù)摹?/p>
設(shè)計數(shù)據(jù)鏈路層的主要解決的問題就是在原始的、有差錯的物理傳輸線路的基礎(chǔ)上俯画,采取差錯檢測析桥、差錯控制與流量控制等方法,將有差錯的物理線路改進成邏輯上無差錯的數(shù)據(jù)鏈路艰垂,以便向它的上一層(網(wǎng)絡(luò)層)提供高質(zhì)量的服務(wù)泡仗。一句話總結(jié)就是 控制數(shù)據(jù)傳輸。
總結(jié)下猜憎,數(shù)據(jù)鏈路層是為了解決數(shù)據(jù)傳輸?shù)目刂谱饔谩?/p>
物理層
物理層位于各計算機網(wǎng)絡(luò)體系結(jié)構(gòu)的最底層娩怎,主要負責在物理介質(zhì)上為數(shù)據(jù)鏈路層提供原始比特流傳輸?shù)?strong>物理鏈接。
物理層解決的問題就是數(shù)據(jù)傳輸胰柑。上面的所有層都是封裝數(shù)據(jù)和管理截亦,物理層是傳輸數(shù)據(jù)的唯一出口爬泥,所有數(shù)據(jù)到達物理層都會變成二進制的載波信號。
總結(jié)下崩瓤,物理層就是真正傳輸數(shù)據(jù)袍啡。
為什么不是直接在物理線路中進行通信就行了?而是搞出這么多層網(wǎng)絡(luò)模型呢谷遂?
我覺得在學習計算機網(wǎng)絡(luò)時能思考這個問題的都是非常????的人葬馋,比如龍叔我??。
物理層是物理線路的抽象肾扰,物理層解決的主要問題傳輸就是數(shù)據(jù)傳輸畴嘶,也是網(wǎng)絡(luò)通信中唯一的數(shù)據(jù)傳輸出口。其實物理層就相當于日常交通網(wǎng)絡(luò)中的各種道路集晚,如公路窗悯、鐵路和航線,它們是我們出門旅行必須要依靠的基礎(chǔ)設(shè)施偷拔。
但是物理層不是針對具體的傳輸介質(zhì)蒋院、設(shè)備和通信協(xié)議的,因為它們可以有許多種選擇(如傳輸介質(zhì)中就可以有同軸電纜莲绰、雙絞線和光纖等)欺旧,只要能實現(xiàn)物理層的某種功能就行了。不同的傳輸介質(zhì)和設(shè)備選擇蛤签,必須要有對應(yīng)的通信協(xié)議支持辞友,而且這也決定了不同的選擇有不同的物理層性能。
就像路有好多種一樣震肮,如有泥巴路称龙、沙子路、水泥路戳晌、柏油馬路鲫尊、普通鐵路、高速鐵路等沦偎,這些不同的路可以承載的重量和速率都不一樣疫向。
傳輸介質(zhì)不同,各種傳輸介質(zhì)傳輸速率不同豪嚎;所有人都在進行傳輸鸿捧,怎么管理這些人;高鐵疙渣、航線不可能通到家門口;就算到了家門口怎么把這些數(shù)據(jù)完整交付給家中的某個人呢堆巧;
所以就必須抽象出這些層來解決這些問題妄荔。物理層專門做數(shù)據(jù)傳輸(好比基礎(chǔ)交通設(shè)施)泼菌、數(shù)據(jù)鏈路層制定傳輸規(guī)則(好比交通規(guī)則)、網(wǎng)絡(luò)層把各個交通線路連接起來(就好比各個交通樞紐站)啦租、傳輸層是端到端的符數(shù)據(jù)通信(好比把快遞小哥把包裹移交到你的手里)哗伯、應(yīng)用層負責提供服務(wù)(好比包裹到你手里了,你在享受包裹里面的禮物)篷角。
是不是有些明白為啥需要抽象出多層了焊刹,是的。
想想都知道要是光有物理層那網(wǎng)絡(luò)通信沒法玩了恳蹲,數(shù)據(jù)都是二進制虐块,透明傳輸,數(shù)據(jù)還有可能亂序嘉蕾,丟數(shù)據(jù)贺奠,數(shù)據(jù)被篡改等等問題。
計算機網(wǎng)絡(luò)通信過程圖
本文講清楚了文章開頭的幾個疑惑错忱,至于各層中詳細的功能和面試忱苈剩考的點,篇幅有限以清,我和大家一起期待下一篇文章儿普。關(guān)注我,精彩內(nèi)容不錯過掷倔,微信搜索 龍躍十二 即可關(guān)注眉孩。
覺得本篇文章對你有幫助,非常感謝你能幫我點個贊今魔,你的小小鼓勵會成為我創(chuàng)作的動力勺像。