大白話聊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源碼看資源映射原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章