或許這樣能幫你瞭解 OSI 七層模型

hello~親愛的觀衆老爺們你們好!慣例先說說爲什麼寫這個主題,緣起於其次後端同事的一次抓包分享。固然咯,當時對於網絡編程的術語各類不明覺厲,只能尷尬地笑着。對於最基礎的 OSI模型,只知道由七層組成,但每一層是什麼,有什麼用途,有什麼協議徹底是不清楚的。於是知恥然後,經過看書與查資料補充了相關的知識,也就有了這篇文章。html

可能有觀衆老爺會問,前端知道這個有什麼用,平時基本用不上不是麼?這個卻是事實,咱們平時通常只接觸應用層的HTTP協議, 底層的協議咱們能夠絕不關心。但有些場景仍是須要一些底層知識的。好比前端通常優化有一條原則是,儘可能少發請求,那麼爲什麼少發請求就能優化加載,它的開銷究竟是什麼?又好比最近產品但願uv打點同一計算機惟一,但極可能用戶會採用不一樣客戶端使用該產品,研發該如何啪啪啪打產品臉。仔細思考一下,其實很多情景也須要一點底層知識,於是不要書到用時方恨少啊~前端

本文會介紹七層模型中每層相關的協議,也會經過快遞公司的比喻形容每層的做用。但願你們有所收穫。編程

基礎知識

OSI(Open System Interconnect),即開放式系統互聯。 通常都叫OSI參考模型,是ISO(國際標準化組織)組織在1985年研究的網絡互聯模型。該體系結構標準定義了網絡互連的七層框架(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層),即ISO開放系統互連參考模型。在這一框架下進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性、互操做性和應用的可移植性。後端

以上是百度 OSI 模型 的歸納,此處暫時只須要記住模型有7層,首層是物理層,最後是應用層便可。那麼,不一樣層之間是如何組織和通訊的呢?且看下圖:瀏覽器

發送方從最高層開始,從上到下按順序傳輸數據,每一層接收到由上層處理的數據時,添加該層的首部並可能會對數據進行處理(如表示層)。而接收端則將順序反過來,從首層開始,將數據的內容與該層對應的首部拆開,傳給上一層。看起來很繞對吧?簡單理解能夠這樣,想象A將要寄一個易碎品寄給B,A所在的快遞站寄件時有由七我的組成的打包流程,每一個人只管接收上一我的的打包好的物件,並在外面套一個大一點盒子,傳給下一我的。當物件寄到B所在的快遞站時,一樣也有七我的負責拆盒子,每一個人只拆一個,最後將物件給到B手上。這樣是否是簡單易懂了?安全

當時我看到這裏時,不知道看官大人是否與我有同樣的疑問:其實這麼分層,不一樣層之間確定有差很少的處理邏輯,處理也麻煩,有必要分層嗎?然而這個問題也很好理解,分層後,如若某層產生變化,也不會波及整個系統。咱們也知道,每一層其實都有不一樣的協議,若是各層混合在一塊兒,切換協議就無從談起,每次更換某一層,都須要改造整個系統。這和前端爲什麼要使用框架,讓咱們按 MVCMVVM 分層組織代碼是一個道理的。明確界定各層的做用,有助於系統的健壯性。服務器

那麼每一層到底有什麼協議,又有什麼做用呢?先從最高層往下看。網絡

應用層

做爲前端,應用層確定是最熟悉的。它的做用是爲應用程序提供服務並規定應用程序中通信相關的細節,也就是爲應用提供服務。常見的協議有 HTTPFTPTELNETSMTP 等。框架

咱們平常開發中,接觸的協議主要以 HTTP 爲主,那麼把瀏覽器看做一個應用,當用戶發起請求時,經過 HTTP協議得到數據以供瀏覽器使用,這就是應用層的用途。而請求時發生錯誤,對錯誤進行處理,也是應用層須要負責的。工具

這一層能夠想象成快遞公司的收件員,當客戶(應用)打電話(發起請求)給收件員(應用層)時,收件員能夠根據用戶的不一樣需求提供不一樣的服務(不一樣協議),好比隔天送達、指定時間送達等等。

表示層

表示層的做用是將應用處理的信息轉換爲適合網絡傳輸的格式,或者未來自下一層的數據轉換爲上層能處理的格式。它主要負責數據格式的轉換。具體來講,就是講設備固有的數據格式轉換爲網絡標準格式。常見的協議有 ASCIISSL/TLS 等。

做用看起來可能比較繞,但實際上是挺好理解的。我只會說中文,而日本友人只會說日文,那麼咱們兩個是沒法交流的。但若是咱們都會說英文,交流時我先在內心想好要說的話是什麼,再用英語說出來,日本友人聽到英文,在內心轉換爲日語,他就能弄懂個人意思,此時表示層就是各自在內心轉化語言。而瀏覽器請求回一堆數據,是解析成文本仍是圖片,就由表示層決定。數據的壓縮、加密、打包等功能也都在這層完成。

這一層至關於快遞公司的打包員。若是快遞(數據)太臃腫,他會在不破壞快遞的狀況下壓扁(壓縮)它。若是客戶注重安全線,全能的快遞公司還能用密碼箱( SSL/TLS)打包快遞再快送。固然,打包員會肯定,目的地快遞站的拆包員,能無損地拆開包裹,將快遞交給用戶。

會話層

會話層做用是負責創建和斷開通訊鏈接(數據流動的邏輯通路),以及數據的分割等數據傳輸相關的管理。常見的協議有 ADSPRPC 等。

會話層可看做是快遞公司的調度員。他管理着此次快遞的相關的信息。例如此次客戶要發100噸沙土(數據),發到哪,究竟是一車一車發、仍是用輪船一次運過去。這些都是他的職責。而運完以後,相關信息(鏈接)也能夠被銷燬了,這也是調度員的職責。

傳輸層

傳輸層起着可靠傳輸的做用。只在通訊雙方節點進行處理,而不需在路由器上處理。此層有兩個具備表明性的協議: TCPUDP

TCP 協議提供可靠的通訊傳輸,簡單說就是確認目標能通訊的狀況下才會傳輸數據(所以須要三次握手),傳輸過程若是丟了數據,也會重發。而 UDP 協議則否則,不會確認目標可否通訊,只會根據協議發到對方地址的端口。至於對方收不收到,丟不丟包,一律無論。

傳輸層有一個重要做用,就是指定通訊端口。以請求服務器數據爲例,服務器有處理多種協議的能力,如以前應用層所說的HTTPFTPTELNET 等,但到底你是用什麼協議呢?服務器並不知道。但若是你指定了端口,如 80,服務器就會知道你是想用 HTTP 協議的,天然會轉給對應協議的處理程序進行處理。

做比喻的話,能夠將傳輸層看做是快遞公司的跟單員。負責任的跟單員(使用 TCP 協議)會保證快遞送到客戶手上,若是送不到就讓公司再發一次。不負責任的跟單員(使用 UDP 協議)層只管將快遞送到客戶指定的地方,無論快遞是否送到客戶手上。

網絡層

網絡層負責將數據傳輸到目標地址。目標地址可使多個網絡經過路由器鏈接而成的某一個地址。所以這一層主要負責尋址和路由選擇。主要由 IPICMP 兩個協議組成。

網絡層將數據從發送端的主機發送到接收端的主機,兩臺主機間可能會存在不少數據鏈路,但網絡層就是負責找出一條相對順暢的通路將數據傳遞過去。傳輸的地址使用的是IP地址。IP地址和咱們的住址有點類似,咱們的住址能夠從省到市再到街逐步縮小範圍,直至咱們住址。IP地址也有這樣的能力,經過不斷轉發到更近的IP地址,最終能夠到達目標地址。如何選擇這條路,就看網絡層了。

這比如是快遞公司的路線規劃者。快遞公司有不少集散中心,根據集散中心的狀況(是否擁堵),找出一條通過n個集散中心的路徑將貨物(數據)沿路運過去。

數據鏈路層

該層負責物理層面上互連的節點之間的通訊傳輸。例如與1個以太網相連的兩個節點間的通信。常見的協議有 HDLCPPPSLIP 等。

數據鏈路層會將0、1序列劃分爲具備意義的數據幀傳送給對端(數據幀的生成與接收)。舉個例子可能會更好理解,暫且把須要傳輸的數據看做爲不一樣來源的水,若是直接倒入池子中時,是沒法從新分辨出不一樣來源的水的。但若是將不一樣來源的灌入瓶子中並打上記號,那就能區分出不一樣來源的水。這也就是爲何要劃分爲具備意義的數據幀傳送給對端。同時要注意的是,數據鏈路層只負責將數據運送給物理相連的兩端,並不負責直接發送到最終地址。

數據鏈路層能夠看做是快遞公司的司機,他們駕駛着汽車,將打包好的貨物(數據幀)從一個城市(物理節點)運輸到另外一個城市。

物理層

物理層負責0、1比特流(0、1序列)與電壓高低、光的閃滅之間的互換。典型的協議有 RS 232CRS 449/422/423V.24X.21X.21bis 等。

看着高大上,實際上是將數據的0、1轉換成電信號或者光信號。經過光纖、雙絞線甚至是無限電波等介質傳輸到指定的地址。而傳輸過程當中的集線器、中繼器、調制解調器等,也屬於物理層的傳輸介質。物理層是 OSI 七層模型的物理基礎,沒有它就談不上數據傳輸了。

物理層就是由實物所承載的,因此做比喻的話,公路、汽車和飛機等承載貨物(數據)的交通工具,就是物理層的象徵。

至此,OSI 七層模型的功能與協議就簡單地介紹完了~

小結

上文只是 OSI 七層模型一些粗淺的介紹,但願能幫到你更好地理解它。然而因爲篇幅所限與本人能力不足,七層模型中有不少細節仍未涉及,如需深刻了解,還應該仔細閱讀相關資料,加深對各層模型的認識。

感謝各位看官大人看到這裏~但願本文對你有所幫助。因爲我對這方面的知識接觸不深,於是不免有錯漏,但願各位dalao打我臉,讓我知道哪裏的理解有誤,保證很快更正哦~謝謝!

參考資料

圖解TCP/IP

互聯網協議入門(一)

開放系統互連參考模型

相關文章
相關標籤/搜索