前言
今天和大家聊的是一個(gè)比較基礎(chǔ)的問題,OSI七層模型和TCP/IP四層模型。
小伙伴們可能有疑問,這個(gè)東西還用寫文章嗎,太基礎(chǔ)了吧,網(wǎng)上文章多的是,隨便一搜索就能找到。
確實(shí)是這樣,網(wǎng)上資料確實(shí)很多,但是如果面試官問你這個(gè)問題,你能很好的回答上這個(gè)問題嗎?
本文就是用大白話來聊一聊這個(gè)話題,讓你對(duì)它們有一個(gè)很清晰的認(rèn)識(shí)。
照搬網(wǎng)上資料的簡(jiǎn)介
既然大家說網(wǎng)上資料很多,那王子也從網(wǎng)上給大家找到一張表格,如下:
看完之后,是不是覺得七層模型和四層模型也就這么多東西,沒什么可講的呢?
才怪!
你知道每個(gè)層具體都是做什么的嗎?為什么這么分層呢?接下來我們就用大白話來聊一聊這些問題。
自底向上詳解模型
1.物理層
首先我們來看一下物理層,物理層是做什么的?網(wǎng)上資料如下:
主要定義物理設(shè)備的標(biāo)準(zhǔn),比如網(wǎng)線的接口類型,光纖的接口類型,各種傳輸介質(zhì)的傳輸速率等,它的主要作用就是傳輸比特流(就是由1 0 轉(zhuǎn)換為電流的強(qiáng)弱類進(jìn)行傳輸,到大目的地后在轉(zhuǎn)換為 1 0 就是通常我們說的數(shù)模轉(zhuǎn)換和模數(shù)轉(zhuǎn)換)這一層的數(shù)據(jù)叫做比特。
看完網(wǎng)上的資料是不是一臉懵逼,沒關(guān)系,我們用白話解釋一下。
物理層說白了就是怎么讓電腦之間聯(lián)網(wǎng)。比如插根網(wǎng)線、連接wifi、光纜等等方式。我們就理解成物理層負(fù)責(zé)怎么把電腦連接起來,形成一個(gè)網(wǎng)絡(luò),就完事了。它傳輸?shù)氖怯?jì)算機(jī)最底層的0 1信號(hào),學(xué)過計(jì)算機(jī)或者電子的應(yīng)該都清楚0 1信號(hào)。
2.數(shù)據(jù)鏈路層
我們還是看一下網(wǎng)上的資料:
主要將物理層接受的數(shù)據(jù)進(jìn)行MAC地址(網(wǎng)卡地址)的封裝與解除封裝。常把這一層的數(shù)據(jù)叫做幀。在這一層工作的設(shè)備叫做交換機(jī),數(shù)據(jù)通過交換機(jī)來傳輸。
解析:
我們知道物理層把各個(gè)電腦連接起來了,互相之間發(fā)送0 1電路信號(hào),那是不是得知道這些0 1信號(hào)代表啥意思?數(shù)據(jù)鏈路層就是翻譯這個(gè)的。
以前,每個(gè)公司會(huì)定義自己的電路信號(hào)分組方式,后來出現(xiàn)了以太網(wǎng)。一組電信號(hào)就是一個(gè)數(shù)據(jù)包,也就是幀(frame),它分為兩部分,標(biāo)頭(head)和數(shù)據(jù)(data),標(biāo)頭里一般會(huì)放一些說明的東西,比如發(fā)送者、接收者和數(shù)據(jù)類型等等。
那么數(shù)據(jù)包中是如何確定發(fā)送者位置的呢?
以太網(wǎng)規(guī)定每個(gè)網(wǎng)卡必須包含一個(gè)mac地址,mac地址就是這個(gè)網(wǎng)卡的身份證。接入網(wǎng)絡(luò)的所有設(shè)備都得有網(wǎng)卡,數(shù)據(jù)包中就是通過mac地址進(jìn)行網(wǎng)卡定位的。每塊網(wǎng)卡出廠時(shí)就有一個(gè)唯一的mac地址。48位的二進(jìn)制,但是一般用12個(gè)16進(jìn)制數(shù)字表示,前6個(gè)16進(jìn)制是廠商編號(hào),后6個(gè)16進(jìn)制是網(wǎng)卡流水號(hào)。
那么以太網(wǎng)的數(shù)據(jù)包是怎么從一個(gè)mac地址發(fā)送到另一個(gè)mac地址的呢?這個(gè)其實(shí)不是點(diǎn)對(duì)點(diǎn)的,而是會(huì)廣播給局域網(wǎng)內(nèi)的所有網(wǎng)卡,然后每個(gè)網(wǎng)卡會(huì)從數(shù)據(jù)包中獲取接收者的mac地址進(jìn)行比對(duì),如果相同就說明是給自己的數(shù)據(jù)包。
當(dāng)然這種廣播的方式只針對(duì)于局域網(wǎng)。
3.網(wǎng)絡(luò)層
網(wǎng)上資料:
主要從下層接受到的數(shù)據(jù)進(jìn)行IP地址(192.168.0.1)的封裝與解封裝。在這一層工作的設(shè)備是路由器。把這一次的數(shù)據(jù)叫做數(shù)據(jù)包。
解析:
網(wǎng)絡(luò)層是一個(gè)比較復(fù)雜的部分,上邊我們介紹了局域網(wǎng)內(nèi)發(fā)送數(shù)據(jù)包是通過廣播的方式發(fā)送的,那么怎么來確定哪些電腦在一個(gè)子網(wǎng)內(nèi)呢?這就要靠網(wǎng)絡(luò)層了,于是引入了IP地址,它就可以區(qū)分出哪些電腦在一個(gè)子網(wǎng)。
網(wǎng)絡(luò)層有IP協(xié)議,定義的地址就叫IP地址,分為IPv4和IPv6,目前我們一般使用的都是IPv4,由32個(gè)二進(jìn)制數(shù)字組成,但是一般用4個(gè)十進(jìn)制表示,范圍從0.0.0.0到255.255.255.255。
每臺(tái)計(jì)算機(jī)都會(huì)被分配到一個(gè)IP地址,前24位(也就是十進(jìn)制的前三個(gè))代表網(wǎng)絡(luò),后8為(十進(jìn)制的最后一個(gè))代表主機(jī)。
如果幾臺(tái)電腦在一個(gè)子網(wǎng),那么前三個(gè)十進(jìn)制數(shù)一定是一樣的。
而實(shí)際上不單單是通過ip地址進(jìn)行判斷的,還需要ip地址配合子網(wǎng)掩碼一起判斷。
比如兩個(gè)地址192.168.1.3和192.168.2.5,判斷是否是一個(gè)子網(wǎng),首先會(huì)分別與子網(wǎng)掩碼255.255.255.0進(jìn)行二進(jìn)制的與運(yùn)算,然后對(duì)比網(wǎng)絡(luò)部分的數(shù)字是不是一樣的。
那么如果發(fā)現(xiàn)不在一個(gè)子網(wǎng)了,要怎么傳輸信息呢?
這個(gè)時(shí)候就需要路由來發(fā)送數(shù)據(jù)包了。
說到路由一定會(huì)想到我們平時(shí)使用的路由器,家里的路由器其實(shí)連接的就是你自己家里的一個(gè)子網(wǎng),如果你要訪問外網(wǎng)的時(shí)候,其實(shí)是跟那個(gè)網(wǎng)站機(jī)器所在的子網(wǎng)進(jìn)行通信的。
路由器其實(shí)就是配置了多個(gè)網(wǎng)卡的專用設(shè)備,可以通過不同網(wǎng)卡接入不同的網(wǎng)絡(luò)。而網(wǎng)關(guān)就是路由器的一種,我們可以認(rèn)為路由器的ip地址就是網(wǎng)關(guān)地址,路由器上每個(gè)網(wǎng)卡都有ip地址和mac地址,但只能通過ip尋址,不能通過mac尋址。
那網(wǎng)絡(luò)交換機(jī)又是什么呢?它也是一種設(shè)備,是工作在數(shù)據(jù)鏈路層的,是通過mac地址尋址和傳輸數(shù)據(jù)的。網(wǎng)絡(luò)交換機(jī)主要用在局域網(wǎng)的通信,通過mac地址進(jìn)行廣播通信。而路由器一般是用來讓你連接外網(wǎng)的。
順便我們?cè)俳榻B幾個(gè)概念作為擴(kuò)展。
LAN,就是local area network,就是局域網(wǎng);WAN,就是wide are network,就是廣域網(wǎng)。WLAN是wireless local area network,就是無(wú)線局域網(wǎng),也就是wifi。
家里的路由器是包含交換機(jī)和路由兩個(gè)功能的,如果連接到局域網(wǎng)內(nèi)的設(shè)備就把網(wǎng)線插入LAN接口,如果連接外網(wǎng)就把網(wǎng)線插入WAN接口。
那么路由器訪問外網(wǎng)的過程是怎么樣的呢?
舉個(gè)例子,兩個(gè)局域網(wǎng)之間如何通過一個(gè)路由器進(jìn)行通信。
大概過程就是,路由器配置了兩個(gè)網(wǎng)卡,每個(gè)網(wǎng)卡可連接到一個(gè)局域網(wǎng)內(nèi)。
局域網(wǎng)1內(nèi)的電腦想發(fā)送數(shù)據(jù)到局域網(wǎng)2內(nèi)的電腦,在數(shù)據(jù)包中會(huì)寫上自己的ip地址和對(duì)方的ip地址。但是他們不在一個(gè)局域網(wǎng)內(nèi),于是局域網(wǎng)1的電腦先通過交換機(jī)將數(shù)據(jù)包發(fā)送給路由器,這個(gè)過程需要將路由器的一塊網(wǎng)卡的ip地址對(duì)應(yīng)的mac地址寫到數(shù)據(jù)包的頭部,然后才能通過交換機(jī)廣播出去,發(fā)送給路由器。
接著路由器接到數(shù)據(jù)包,就會(huì)在局域網(wǎng)2內(nèi)將目標(biāo)機(jī)器的ip地址對(duì)應(yīng)的mac地址寫入頭部,然后通過局域網(wǎng)2的交換機(jī)發(fā)送給局域網(wǎng)2內(nèi)的電腦。
一個(gè)局域網(wǎng)內(nèi)的每臺(tái)機(jī)器都有自己的ARP Cache,這個(gè)ARP就是用來讓局域網(wǎng)內(nèi)各個(gè)設(shè)備都知道每個(gè)設(shè)備的ip地址和mac地址的對(duì)應(yīng)關(guān)系的。所以在一個(gè)子網(wǎng)內(nèi)通信,就是在數(shù)據(jù)包里寫上對(duì)方的mac地址,交換機(jī)廣播就完了。不同子網(wǎng)的通信,就是寫上對(duì)方的ip地址,然后先通過路由器的mac地址廣播到路由器,路由器再根據(jù)另外一個(gè)子網(wǎng)的ip地址轉(zhuǎn)換為另外一個(gè)子網(wǎng)機(jī)器的mac地址,再通過交換機(jī)廣播,就是這樣的流程。如下圖:
4.傳輸層
網(wǎng)上資料:
定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(hào)(www端口 80等),如:TCP(傳輸控制協(xié)議。傳輸效率較低,可靠性強(qiáng),用于傳輸可靠性要求高數(shù)據(jù)量大的數(shù)據(jù)),UDP(用戶數(shù)據(jù)報(bào)協(xié)議,與TCP相反,用戶傳輸可靠性要求低,數(shù)據(jù)量較少的數(shù)據(jù),如QQ聊天就是通過UDP傳輸?shù)模┲饕獜南聦咏邮盏臄?shù)據(jù)進(jìn)行分段和傳輸,到大目的地后再重組。
解釋:
上邊我們已經(jīng)了解了網(wǎng)絡(luò)層的通信流程,但還有個(gè)問題,就是機(jī)器上很多的程序都在使用一個(gè)網(wǎng)卡進(jìn)行網(wǎng)絡(luò)通信,那么怎么區(qū)分是哪個(gè)程序的數(shù)據(jù)呢?
這時(shí)候就引入了端口號(hào)的概念,就是發(fā)送的數(shù)據(jù)包其實(shí)是到網(wǎng)卡的某個(gè)端口上去的,然后那臺(tái)機(jī)器上監(jiān)聽這個(gè)端口的程序就可以提取發(fā)送到這個(gè)端口的數(shù)據(jù)了。
端口號(hào)范圍是0-65536,0-1023被系統(tǒng)占用了,其他應(yīng)用程序用的是1024以上的端口。
所以小伙伴們會(huì)發(fā)現(xiàn),網(wǎng)絡(luò)層是基于ip協(xié)議進(jìn)行主機(jī)之間尋址和通信的,然后傳輸層其實(shí)是建立主機(jī)的某個(gè)端口到另一個(gè)主機(jī)的端口之間的連接和通信的。
udp和tcp都是傳輸層的協(xié)議,作用就是在數(shù)據(jù)包里加入端口號(hào),進(jìn)行點(diǎn)對(duì)點(diǎn)通信。
udp是不可靠的,發(fā)出去人家收到?jīng)]有就不知道了;tcp是可靠的,要求三次握手確認(rèn),接收到消息必須回復(fù)。
tcp協(xié)議僅僅規(guī)定了一套基于端口的點(diǎn)對(duì)點(diǎn)通信協(xié)議,包括如何建立連接,如何發(fā)送和讀取消息,實(shí)際開發(fā)一般使用的就是socket網(wǎng)絡(luò)編程了。
說到這里相信小伙伴們對(duì)與socket網(wǎng)絡(luò)編程的原理也就有了一個(gè)更深層的了解了。
5.應(yīng)用層
網(wǎng)上資料:
會(huì)話層:通過傳輸層(端口號(hào):傳輸端口與接受端口)建立數(shù)據(jù)傳送的通路。主要在你的系統(tǒng)之間發(fā)起會(huì)話或者接收會(huì)話請(qǐng)求(設(shè)備之間需要互相認(rèn)識(shí)可以是IP也可以使MAC地址或者主機(jī)名)
表示層:主要是對(duì)接收的數(shù)據(jù)進(jìn)行解釋 加密與解密壓縮與解壓縮等(也就是把計(jì)算機(jī)能夠識(shí)別的東西轉(zhuǎn)換成人能識(shí)別的東西,圖片聲音等)
應(yīng)用層:主要是終端應(yīng)用,比如說是FTP(各種文件下載),web瀏覽器,QQ(可以理解成我們?cè)陔娔X上可以直接看到的東西就是終端應(yīng)用)
解釋:
在四層模型中,應(yīng)用層包含了會(huì)話層、表示層、應(yīng)用層。所以我們就放在一起解釋了。這部分網(wǎng)上資料其實(shí)說的還是比較清楚的。
應(yīng)用層中最常見的協(xié)議就是http協(xié)議。
上文中我們介紹了ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址,那我們?cè)谶@里擴(kuò)展一下DNS的概念吧。
DNS:Domain Name System,即域名服務(wù)系統(tǒng)。因?yàn)槲覀円话愣ㄎ皇峭ㄟ^ip地址+mac地址+端口號(hào)的,但是如果從瀏覽器上輸入www.baidu.com咋辦?
這個(gè)時(shí)候是先把www.baidu.com發(fā)送到DNS服務(wù)器的,然后DNS服務(wù)器會(huì)告訴你www.baidu.com對(duì)應(yīng)的ip地址。
DNS就是做這個(gè)的。
總結(jié)
本篇文章篇幅比較長(zhǎng),如果多看兩遍相信小伙伴們會(huì)有很大的收獲的,那有關(guān)OSI七層模型和TCP/IP四層模型的大白話解釋到這里就結(jié)束了,如果覺得哪里寫的有錯(cuò)誤,歡迎大佬評(píng)論區(qū)留言指正。
聯(lián)系客服