前言
今天和大家聊的是一個比較基礎的問題,OSI七層模型和TCP/IP四層模型。
小夥伴們可能有疑問,這個東西還用寫文章嗎,太基礎了吧,網上文章多的是,隨便一搜尋就能找到。
確實是這樣,網上資料確實很多,但是如果面試官問你這個問題,你能很好的回答上這個問題嗎?
本文就是用大白話來聊一聊這個話題,讓你對它們有一個很清晰的認識。
照搬網上資料的簡介
既然大家說網上資料很多,那王子也從網上給大家找到一張表格,如下:
看完之後,是不是覺得七層模型和四層模型也就這麼多東西,沒什麼可講的呢?
才怪!
你知道每個層具體都是做什麼的嗎?為什麼這麼分層呢?接下來我們就用大白話來聊一聊這些問題。
自底向上詳解模型
1.物理層
首先我們來看一下物理層,物理層是做什麼的?網上資料如下:
主要定義物理裝置的標準,比如網線的介面型別,光纖的介面型別,各種傳輸介質的傳輸速率等,它的主要作用就是傳輸位元流(就是由1 0 轉換為電流的強弱類進行傳輸,到大目的地後在轉換為 1 0 就是通常我們說的數模轉換和模數轉換)這一層的資料叫做位元。
看完網上的資料是不是一臉懵逼,沒關係,我們用白話解釋一下。
物理層說白了就是怎麼讓電腦之間聯網。比如插根網線、連線wifi、光纜等等方式。我們就理解成物理層負責怎麼把電腦連線起來,形成一個網路,就完事了。它傳輸的是計算機最底層的0 1訊號,學過計算機或者電子的應該都清楚0 1訊號。
2.資料鏈路層
我們還是看一下網上的資料:
主要將物理層接受的資料進行MAC地址(網路卡地址)的封裝與解除封裝。常把這一層的資料叫做幀。在這一層工作的裝置叫做交換機,資料通過交換機來傳輸。
解析:
我們知道物理層把各個電腦連線起來了,互相之間傳送0 1電路訊號,那是不是得知道這些0 1訊號代表啥意思?資料鏈路層就是翻譯這個的。
以前,每個公司會定義自己的電路訊號分組方式,後來出現了乙太網。一組電訊號就是一個資料包,也就是幀(frame),它分為兩部分,標頭(head)和資料(data),標頭裡一般會放一些說明的東西,比如傳送者、接收者和資料型別等等。
那麼資料包中是如何確定傳送者位置的呢?
乙太網規定每個網路卡必須包含一個mac地址,mac地址就是這個網路卡的身份證。接入網路的所有裝置都得有網路卡,資料包中就是通過mac地址進行網路卡定位的。每塊網路卡出廠時就有一個唯一的mac地址。48位的二進位制,但是一般用12個16進位制數字表示,前6個16進位制是廠商編號,後6個16進位制是網路卡流水號。
那麼乙太網的資料包是怎麼從一個mac地址傳送到另一個mac地址的呢?這個其實不是點對點的,而是會廣播給區域網內的所有網路卡,然後每個網路卡會從資料包中獲取接收者的mac地址進行比對,如果相同就說明是給自己的資料包。
當然這種廣播的方式只針對於區域網。
3.網路層
網上資料:
主要從下層接受到的資料進行IP地址(192.168.0.1)的封裝與解封裝。在這一層工作的裝置是路由器。把這一次的資料叫做資料包。
解析:
網路層是一個比較複雜的部分,上邊我們介紹了區域網內傳送資料包是通過廣播的方式傳送的,那麼怎麼來確定哪些電腦在一個子網內呢?這就要靠網路層了,於是引入了IP地址,它就可以區分出哪些電腦在一個子網。
網路層有IP協議,定義的地址就叫IP地址,分為IPv4和IPv6,目前我們一般使用的都是IPv4,由32個二進位制數字組成,但是一般用4個十進位制表示,範圍從0.0.0.0到255.255.255.255。
每臺計算機都會被分配到一個IP地址,前24位(也就是十進位制的前三個)代表網路,後8為(十進位制的最後一個)代表主機。
如果幾臺電腦在一個子網,那麼前三個十進位制數一定是一樣的。
而實際上不單單是通過ip地址進行判斷的,還需要ip地址配合子網掩碼一起判斷。
比如兩個地址192.168.1.3和192.168.2.5,判斷是否是一個子網,首先會分別與子網掩碼255.255.255.0進行二進位制的與運算,然後對比網路部分的數字是不是一樣的。
那麼如果發現不在一個子網了,要怎麼傳輸資訊呢?
這個時候就需要路由來傳送資料包了。
說到路由一定會想到我們平時使用的路由器,家裡的路由器其實連線的就是你自己家裡的一個子網,如果你要訪問外網的時候,其實是跟那個網站機器所在的子網進行通訊的。
路由器其實就是配置了多個網路卡的專用裝置,可以通過不同網路卡接入不同的網路。而閘道器就是路由器的一種,我們可以認為路由器的ip地址就是閘道器地址,路由器上每個網路卡都有ip地址和mac地址,但只能通過ip定址,不能通過mac定址。
那網路交換機又是什麼呢?它也是一種裝置,是工作在資料鏈路層的,是通過mac地址定址和傳輸資料的。網路交換機主要用在區域網的通訊,通過mac地址進行廣播通訊。而路由器一般是用來讓你連線外網的。
順便我們再介紹幾個概念作為擴充套件。
LAN,就是local area network,就是區域網;WAN,就是wide are network,就是廣域網。WLAN是wireless local area network,就是無線區域網,也就是wifi。
家裡的路由器是包含交換機和路由兩個功能的,如果連線到區域網內的裝置就把網線插入LAN介面,如果連線外網就把網線插入WAN介面。
那麼路由器訪問外網的過程是怎麼樣的呢?
舉個例子,兩個區域網之間如何通過一個路由器進行通訊。
大概過程就是,路由器配置了兩個網路卡,每個網路卡可連線到一個區域網內。
區域網1內的電腦想傳送資料到區域網2內的電腦,在資料包中會寫上自己的ip地址和對方的ip地址。但是他們不在一個區域網內,於是區域網1的電腦先通過交換機將資料包傳送給路由器,這個過程需要將路由器的一塊網路卡的ip地址對應的mac地址寫到資料包的頭部,然後才能通過交換機廣播出去,傳送給路由器。
接著路由器接到資料包,就會在區域網2內將目標機器的ip地址對應的mac地址寫入頭部,然後通過區域網2的交換機傳送給區域網2內的電腦。
一個區域網內的每臺機器都有自己的ARP Cache,這個ARP就是用來讓區域網內各個裝置都知道每個裝置的ip地址和mac地址的對應關係的。所以在一個子網內通訊,就是在資料包裡寫上對方的mac地址,交換機廣播就完了。不同子網的通訊,就是寫上對方的ip地址,然後先通過路由器的mac地址廣播到路由器,路由器再根據另外一個子網的ip地址轉換為另外一個子網機器的mac地址,再通過交換機廣播,就是這樣的流程。如下圖:
4.傳輸層
網上資料:
定義了一些傳輸資料的協議和埠號(www埠 80等),如:TCP(傳輸控制協議。傳輸效率較低,可靠性強,用於傳輸可靠性要求高資料量大的資料),UDP(使用者資料包協議,與TCP相反,使用者傳輸可靠性要求低,資料量較少的資料,如QQ聊天就是通過UDP傳輸的)主要從下層接收的資料進行分段和傳輸,到大目的地後再重組。
解釋:
上邊我們已經瞭解了網路層的通訊流程,但還有個問題,就是機器上很多的程式都在使用一個網路卡進行網路通訊,那麼怎麼區分是哪個程式的資料呢?
這時候就引入了埠號的概念,就是傳送的資料包其實是到網路卡的某個埠上去的,然後那臺機器上監聽這個埠的程式就可以提取傳送到這個埠的資料了。
埠號範圍是0-65536,0-1023被系統佔用了,其他應用程式用的是1024以上的埠。
所以小夥伴們會發現,網路層是基於ip協議進行主機之間定址和通訊的,然後傳輸層其實是建立主機的某個埠到另一個主機的埠之間的連線和通訊的。
udp和tcp都是傳輸層的協議,作用就是在資料包里加入埠號,進行點對點通訊。
udp是不可靠的,發出去人家收到沒有就不知道了;tcp是可靠的,要求三次握手確認,接收到訊息必須回覆。
tcp協議僅僅規定了一套基於埠的點對點通訊協議,包括如何建立連線,如何傳送和讀取訊息,實際開發一般使用的就是socket網路程式設計了。
說到這裡相信小夥伴們對與socket網路程式設計的原理也就有了一個更深層的瞭解了。
5.應用層
網上資料:
會話層:通過傳輸層(埠號:傳輸埠與接受埠)建立資料傳送的通路。主要在你的系統之間發起會話或者接收會話請求(裝置之間需要互相認識可以是IP也可以使MAC地址或者主機名)
表示層:主要是對接收的資料進行解釋 加密與解密壓縮與解壓縮等(也就是把計算機能夠識別的東西轉換成人能識別的東西,圖片聲音等)
應用層:主要是終端應用,比如說是FTP(各種檔案下載),web瀏覽器,QQ(可以理解成我們在電腦上可以直接看到的東西就是終端應用)
解釋:
在四層模型中,應用層包含了會話層、表示層、應用層。所以我們就放在一起解釋了。這部分網上資料其實說的還是比較清楚的。
應用層中最常見的協議就是http協議。
上文中我們介紹了ip地址、子網掩碼、閘道器地址,那我們在這裡擴充套件一下DNS的概念吧。
DNS:Domain Name System,即域名服務系統。因為我們一般定位是通過ip地址+mac地址+埠號的,但是如果從瀏覽器上輸入www.baidu.com咋辦?
這個時候是先把www.baidu.com傳送到DNS伺服器的,然後DNS伺服器會告訴你www.baidu.com對應的ip地址。
DNS就是做這個的。
總結
本篇文章篇幅比較長,如果多看兩遍相信小夥伴們會有很大的收穫的,那有關OSI七層模型和TCP/IP四層模型的大白話解釋到這裡就結束了,如果覺得哪裡寫的有錯誤,歡迎大佬評論區留言指正。
往期文章推薦: