1. 程式人生 > >就該這樣理解 OSI 七層參考模型、淺談不同區域網之間的通訊

就該這樣理解 OSI 七層參考模型、淺談不同區域網之間的通訊

簡介

說到OSI參考模型,理解網路與網路之間的關係,不說太深入難以理解的東西,只求能最大程度上理解與使用。

參考模型是國際標準化組織(ISO)制定的一個用於計算機或通訊系統間互聯的標準體系,一般稱為OSI參考模型或七層模型。

概念性的東西,先知道這些就夠了,我們先來聊一聊一個常見的一個模型。

 

區域網與網際網路

網際網路就是許許多多個區域網組成的,從我們最簡單的一個區域網入手,開始理解

這裡舉例兩個不同的區域網,計算機用網線接入交換機、交換機連線閘道器路由器,另一處

也是通過相同的方式進行連線。先來了解一下OSI參考模型是如何定義這七層的

OSI 參考模型

參考:https://blog.csdn.net/taotongning/article/details/81352985

這裡定義的七層只是為了方便我們去理解,實際上是不存在的。

簡單的瞭解一下這七層是如何定義的,具體的功能還是得舉例子來理解說明。

從最上層的應用層開始說起:如何一步步的封裝資料,到最後進行傳送。

應用層

應用層是直接面向用戶的最高層,但它卻不是應用程式,它只是為引用程式提供服務的

就好比,我們用的電腦版微信吧!它就是一個實實在在的應用程式,假設要與一個遠方的小姐姐進行聊天會話,這個時候呢,傳送一個Hello給遠方的小姐姐。

當你點擊發送的時候,其實做了很多事情,我們就來梳理一下。

需要傳送的資料就是:Hello ,當然,應用層首先給這個資料拼接一個AH,這裡就是應用層的報頭,就好比是微信的一個特有的資料,就這樣先理解。

 

表示層

當然,我們總不能傳送明文吧,將傳送的文字資料進行編碼,平常我們計算機使用的萬國碼UTF-8,肯定要進行一下加密吧

表示層更關心的是所傳送資料的語法和語義,主要包括資料格式變化、資料加密與解密、資料壓縮與解壓等

 

會話層

字面意思,就可以理解出這一層表示的意思,建立一個會話,就好比使用Http訪問web的時候,都會存在一個Session 作為標識

讓伺服器來區別訪問的計算機。主要功能是負責維護兩個節點之間的傳輸聯接,確保點到點傳輸不中斷,以及管理資料交換等功能。

會話層在應用程序中建立、管理和終止會話。會話層還可以通過對話控制來決定使用何種通訊方式,全雙工通訊或半雙工通訊。會話層通過自身協議對請求與應答進行協調

 

傳輸層 端到端

傳輸層作為OSI參考模型中,最重要的一層,這裡主要是以埠到埠來區分。這裡涉及到兩個特別重要的協議TCP 以及UDP

一太計算機上同時執行著QQ、微信、以及瀏覽器等。傳送資料報,這個資料包到底是哪個程式發出去的呢?當然要從指定的一個埠發出去

計算機的埠範圍 0-65535

0-1023 就是1024個埠為系統佔用埠

瞭解到這些,就該先來說說UDP協議

UDP 協議

UDP協議定義了埠,同一個主機上的每個應用程式都需要指定唯一的埠號,並且規定網路中傳輸的資料包必須加上埠資訊,當資料包到達主機以後,就可以根據埠號找到對應的應用程式了。UDP協議比較簡單,實現容易,但它沒有確認機制,資料包一旦發出,無法知道對方是否收到,因此可靠性較差,為了解決這個問題,提高網路可靠性,TCP協議就誕生了。

 

參考:https://blog.51cto.com/lyhbwwk/2162568

一個UDP報文包含首部與資料部分,UDP首部佔用8個位元組,資料部分最長長度為65535B(位元組) 即 64KB

UDP協議是無連線,不保證穩定傳輸的協議,但處理速度較快,通常的音訊、視訊在傳送時候使用UDP較多。

我們這裡的例子是微信,微信能保證資料百分百到達,所以我們採用TCP來具體說明資料的封裝

 

TCP 協議

TCP即傳輸控制協議,是一種面向連線的、可靠的、基於位元組流的通訊協議。簡單來說TCP就是有確認機制的UDP協議,每發出一個數據包都要求確認,如果有一個數據包丟失,就收不到確認,傳送方就必須重發這個資料包。為了保證傳輸的可靠性,TCP協議在UDP基礎之上建立了三次對話的確認機制,即在正式收發資料前,必須和對方建立可靠的連線。TCP資料包和UDP一樣,都是由首部和資料兩部分組成,唯一不同的是,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割

 

參考:https://blog.51cto.com/lyhbwwk/2162568

 這裡只需要瞭解的是TCP的基本封裝過程,這裡只涉及到源埠以及目的埠,還未涉及到IP相關的內容。它和UDP協議一樣。就好像是一個改進版的

UDP協議,它能保證資料的可靠傳輸,這個特點記住即可。這裡模擬一下,我們資料的封裝過程。假設微信使用的埠是6666,目標埠就是遠方小姐姐微信

的埠,當然也是一樣的。這裡我為了理解只做簡寫

 

網路層

從上面幾層來看,我們已經將微信的資料封裝成來一個TCP資料報,裡面包含來微信的埠 假設是6666,當然,就好比寫信一樣,我的信封

已經準備好勒,裡面要傳送的內容我也已經準備好了,接下來就是地址了。肯定要指定這個報文我要傳送到哪裡去。所以呢IP 網際協議,就誕生了。

IP 網際協議

網路層引入了IP協議,制定了一套新地址,使得我們能夠區分兩臺主機是否同屬一個網路,這套地址就是網路地址,也就是所謂的IP地址。IP協議將這個32位的地址分為兩部分,前面部分代表網路地址,後面部分表示該主機在區域網中的地址。如果兩個IP地址在同一個子網內,則網路地址一定相同。為了判斷IP地址中的網路地址,IP協議還引入了子網掩碼,IP地址和子網掩碼通過按位與運算後就可以得到網路地址

IP地址在這裡我們就比較好理解了。我們平時的生活中都會涉及到。一個IP指向的就是網際網路當中的一臺機器或者就是一臺路由器了。

我們來封裝資料。再把上面的圖拿下來,說明一下,我們要給E電腦的小姐姐傳送訊息。比如我是A電腦,小姐姐在另外一個閘道器下的E電腦

 

 

比較重要的兩個引數:

源地址:192.168.0.120

目標地址:192.168.1.135

進行封裝後的資料,這裡將源地址,告訴路由器(郵局) 發件人 就是源地址,以及收件人 也就是目標地址

 

ARP 協議

這裡暫時不細說這個ARP協議的內容。我們只需要知道 ARP協議是用來拿IP換MAC地址的,上面的IP協議也已經提過了,通過子網掩碼和IP地址的換算,可以得到

網路號,網路號就可以區別這兩個IP是否在同一個區域網內。 參考這個秒懂:https://zhidao.baidu.com/question/277650423.html

資料鏈路層

到這一層,就已經到網絡卡、網路裝置(交換機)的範疇了。資料鏈路層最重要的協議是乙太網協議,資料鏈路層最重要的一點就是資料成幀。

乙太網協議

接入乙太網的裝置必須包含一塊乙太網網絡卡,也就是我們常用的網絡卡,一組電訊號稱作是一個數據幀 、或者叫做一個數據包

網絡卡都包含一個全球唯一的MAC地址,傳送端的和接收端的地址便是指網絡卡的地址,即Mac地址。 

每塊網絡卡出廠時都被燒錄上一個實際上唯一的Mac地址,長度為48位2進位制,通常由12位16進位制數表示,(前六位是廠商編碼,後六位是流水線號)

 進行資料鏈路層的封裝,將本機的MAC(源MAC地址) 和目標MAC地址封裝在頭部,在尾部加入DT報尾,這樣 一個數據幀算是封裝完成了!

等等。我們好像還不知道小姐姐那邊的目標MAC地址,這時候就需要用ARP協議了。我們知道ARP協議就是用來用IP來換MAC地址的。

 

ARP協議

上面已經簡單的瞭解過了,我們要和在B區域網下的E電腦進行通訊,但是我們不知道它的MAC地址,於是我們傳送一個ARP請求,來獲取目標的MAC地址

目標MAC 為FF:FF:FF:FF:FF:FF 表示的是廣播地址,這個資料包發出去後,所有的子網機器都會收到,收到的機器判斷目標MAC是否是自己,若不是,則直接丟棄

若是,收到報文的主機會通過單播的形式,將MAC地址回傳給我們。

通過路由協議我們可以得知,若不在一個一個子網內,則會交給路由器

 路由器返回的包裡面,目標MAC就會變成路由器的MAC地址,我們拿路由器的MAC地址組裝資料鏈路層報文即可。

物理層 

經過以上的每一層的層層包裝,這時候,我們已經包裝好了一個乙太網資料幀,包含源MAC,目標MAC,源IP,目標IP等等一系列資料。

物理層就是將這個資料通過電訊號、光訊號的方式傳遞過去的,物理層一般都是我麼所說的光纜以及網線這些硬體裝置。

 

 

 不同子網間的通訊

通過上面的知識,我們已經瞭解到如何封裝成一個數據幀,以及一些協議的相關內容。那麼這裡就會有一個問題,同一子網、

不同子網、以及相隔很遠的兩個子網是如何進行通訊的呢?以及我們撥號上網後,公網IP與內網IP是怎麼一回事呢?

 

同一子網通訊

我們先來看一個圖,計算機A要與計算機B進行通訊,這時候他們是同處於一個子網內的,這個時候就很簡單了。

按照上面的七層進行封裝資料,這裡的具體引數需要說明一下:

源IP: 0.120(簡寫)

目標IP:0.113

源MAC : A電腦的MAC

目標MAC:B電腦MAC(這裡若不知道就先發送ARP請求)

 

 

A將資料報傳送出去後,交換機直接查詢目標MAC所轉發的埠,將這個資料報準確的推送到B電腦連線的那個埠即可。

不同子網通訊

A電腦需要與E電腦進行通訊,這時候發現A與E不在一個子網內,這時候呢,就需要路由器來協助了

源IP: A的IP

目標IP: E的IP

源MAC:A的 MAC

目標MAC: 路由器C的MAC

 

 

因為不在一個子網內,需要路由器來進行路由這個資料包,送至D路由器後,D路由器拿出資料報中目標的IP,傳送ARP請求,

請求E的MAC地址,知道後,將資料報裡面的目標MAC進行替換,然後傳送給E即可。

 

公網IP與內網IP通訊的方式理解

我們在使用路由器上網後,運營商就會給我們分配一個公網IP,按照圖上的指示,C路由器在進行撥號後,就會給C路由器分配一個公網IP

我這裡假設有這樣兩個。這時候需要封裝資料,該如何封裝呢,還是以A電腦與E電腦進行通訊,大家肯定會很迷惑。

這裡就需要了解一個協議:網路地址轉換協議:https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2

以下簡稱NAT,NAT 在IPV4 之前起到很大的作用,我們現在也在用,因為IPV4 IP數量的限制,但接入網際網路的電腦又那麼多

該怎麼辦呢。就是給一個路由下分配一個公網IP,路由器下面的IP與公網IP進行一個轉換,這裡面說的轉換就是:NAT

圖中黑色的就是轉換部分,通過埠的轉換,將多個子網IP對映到公網的一個IP上面

 

網路地址埠轉換(NAPT)

這種方式支援埠的對映,並允許多臺主機共享一個公網IP地址。 支援埠轉換的NAT又可以分為兩類:源地址轉換和目的地址轉換。前一種情形下發起連線的計算機的IP地址將會被重寫,使得內網主機發出的資料包能夠到達外網主機。後一種情況下被連線計算機的IP地址將被重寫,使得外網主機發出的資料包能夠到達內網主機。實際上,以上兩種方式通常會一起被使用以支援雙向通訊。 還是舉例,這時候,我們的A電腦需要與E電腦進行通訊,E電腦在廣東省,他們撥號後,都會分配一個公網IP,並且已經在路由器裡面完成了NAT對映, 源IP: A電腦IP 目標IP: E電腦對映後的公網IP 源MAC :A電腦MAC 目標MAC :  本地路由器MAC地址   封裝完成後,將資料報送到C路由器,路由器通過對映表,將源IP進行一個替換

 

替換後,交給網際網路上的路由器進行資料報的轉發,這就好像發快遞時候一樣,經過一系列的中轉站,到達目的路由。

到達D路由後,D路由將資料報中的目標地址也進行一個轉換,這個地址是可以相互轉的。現在就是公網對映轉到本機IP

 

轉換後就輕鬆了。按照ARP請求到E機器的MAC地址,然後發報即可。

 

小結

以上內容皆是自己檢視一些博主的總結,通過學習後,能夠加深自己對OIS模型、以及TCP、IP、ARP

這些非常重要的協議的一個認識。以及瞭解到不同層級下面。兩臺電腦如何完成一個通行。這裡講的比較淺,

網際網路的奧妙不是那麼容易就可以理解透的。還是那句,不要停止學習的腳步。就好

 

參考:

  • ARP請求 https://baike.baidu.com/item/ARP/609343?fr=aladdin
  • 不同子網內兩臺機器的通訊方式 https://blog.csdn.net/qq_28657577/article/details/82258141
  • OSI 參考模型 https://blog.csdn.net/taotongning/article/details/81390979
  • 內網埠與外網埠的理解 https://blog.csdn.net/chendian_yue/article/details/79272181
  • 網路地址轉換協議:https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2

 

&n