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

sea_ljf發表於2017-10-21

hello~親愛的觀眾老爺們大家好!慣例先說說為何寫這個主題,緣起於其次後端同事的一次抓包分享。當然咯,當時對於網路程式設計的術語各種不明覺厲,只能尷尬地笑著。對於最基礎的 OSI模型,只知道由七層組成,但每一層是什麼,有什麼用途,有什麼協議完全是不清楚的。因而知恥而後,通過看書與查資料補充了相關的知識,也就有了這篇文章。

可能有觀眾老爺會問,前端知道這個有什麼用,平時基本用不上不是麼?這個倒是事實,我們平時一般只接觸應用層的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

網際網路協議入門(一)

開放系統互連參考模型

相關文章