大白話聊OSI七層模型和TCP/IP四層模型

 

前言

今天和大家聊的是一個比較基礎的問題,OSI七層模型和TCP/IP四層模型。

小夥伴們可能有疑問,這個東西還用寫文章嗎,太基礎了吧,網上文章多的是,隨便一搜索就能找到。

確實是這樣,網上資料確實很多,但是如果面試官問你這個問題,你能很好的回答上這個問題嗎?

本文就是用大白話來聊一聊這個話題,讓你對它們有一個很清晰的認識。

 

照搬網上資料的簡介

既然大家說網上資料很多,那王子也從網上給大家找到一張表格,如下:

OSI七層模型
TCP/IP四層模型
對應網路協議
應用層(Application)
應用層
HTTP、TFTP, FTP, NFS, WAIS、SMTP
表示層(Presentation)
Telnet, Rlogin, SNMP, Gopher
會話層(Session)
SMTP, DNS
傳輸層(Transport)
傳輸層
TCP, UDP
網路層(Network)
網路層
IP, ICMP, ARP, RARP, AKP, UUCP
數據鏈路層(Data Link)
數據鏈路層
FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理層(Physical)
IEEE 802.1A, IEEE 802.2到IEEE 802.11

看完之後,是不是覺得七層模型和四層模型也就這麼多東西,沒什麼可講的呢?

才怪!

你知道每個層具體都是做什麼的嗎?為什麼這麼分層呢?接下來我們就用大白話來聊一聊這些問題。

 

自底向上詳解模型

 

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四層模型的大白話解釋到這裡就結束了,如果覺得哪裡寫的有錯誤,歡迎大佬評論區留言指正。

 

往期文章推薦:

Windows下使用Nginx+Tomcat做負載均衡

聊聊分散式下的WebSocket解決方案

從SpringBoot源碼看資源映射原理

Tags: