大白話OSI七層協議

互聯網的本質就是一系列的網絡協議,這個協議就叫OSI協議(一系列協議),按照功能不一樣,分工不一樣,人爲的分層七層。實際上這個七層是不存在的。沒有這七層的概念,只是人爲的劃分而已。區分出來的目的只是讓你明白哪一層是幹什麼用的。網絡

每一層都運行不一樣的協議。協議是幹什麼的,協議就是標準。tcp

實際上還有人把它劃成五層、四層。spa

七層劃分爲:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。3d

五層劃分爲:應用層、傳輸層、網絡層、數據鏈路層、物理層。blog

四層劃分爲:應用層、傳輸層、網絡層、網絡接口層。接口

151-大白話OSI七層協議-七層協議.jpg?x-oss-process=style/watermark

每層運行常見的物理設備ip

151-大白話OSI七層協議-物理設備.jpg?x-oss-process=style/watermark

1、物理層

物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0路由

物理層字面意思解釋:物理傳輸、硬件、物理特性。在深圳的你與北京的朋友聊天,你的電腦必需要能上網,物理體現是什麼?是否是接一根網線,插個路由器,北京的朋友那邊是否是也有根網線,也得插個路由器。也就是說計算機與計算機之間的通訊,必需要有底層物理層方面的連通,就相似於你打電話,中間是否是必須得連電話線。開發

中間的物理連接能夠是光纜、電纜、雙絞線、無線電波。中間傳的是電信號,即010101...這些二進制位。

151-大白話OSI七層協議-物理層.jpg?x-oss-process=style/watermark

底層傳輸的010010101001...這些二進制位怎麼才能讓它有意義呢?

151-大白話OSI七層協議-物理層1.jpg?x-oss-process=style/watermark

要讓這些010010101001...有意思,人爲的分組再適合不過了,8位一組,發送及接收都按照8位一組來劃分。接收到8位爲一組的話,那麼就能夠按照這8位數來作運算。若是沒有分組,對方接收的計算機根本就不知道從哪一位開始來作計算,也解析不了收到的數據。我發了16位你就按照16位來作計算嗎?我發100位你就按照100位作計算嗎?沒什麼意義是吧。所以要想讓底層的電信號有意義,必需要把底層的電信號作分組。我作好8位一組,那麼我收到數據,我就知道這幾個8位作一組,這幾個8位作一組。那麼每一個8位就能夠獲得一個肯定的數。分組是誰幹的活呢?物理層幹不了,這個是數據鏈路層乾的。

2、數據鏈路層

數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麼意思

數據鏈路層的功能:定義了電信號的分組方式

2.1 以太網協議

早期的時候,數據鏈路層就是來對電信號來作分組的。之前每一個公司都有本身的分組方式,後來造成了統一的標準,即以太網協議ethernet

ethernet規定:一組電信號構成一個數據報,叫作'幀',每一數據幀分紅:報頭head和數據data兩部分

  • head包含:(固定18個字節)

    • 發送者/源地址,6個字節

    • 接收者/目標地址,6個字節

    • 數據類型,6個字節

  • data包含:(最短46字節,最長1500字節)

- -
head data
  • 數據報的具體內容:head長度+data長度=最短64字節,最長1518字節,超過最大限制就分片發送

這就像寫信,發送者的地址(源地址)就是你家的地址,接收者地址(目標地址)就是對方的收信地址,你家的路由器就至關於郵局。其實在計算機通訊中的源地址和目標地址指的是Mac地址。

2.2 Mac地址

head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即Mac地址

  • Mac地址:每塊網卡出廠時都被燒製上一個世界惟一的Mac地址,長度爲48位2進制,一般由12位16進制數表示(前六位是廠商編號,後六位是流水線號)

151-大白話OSI七層協議-mac網卡1.png?x-oss-process=style/watermark

151-大白話OSI七層協議-mac地址.jpg?x-oss-process=style/watermark

2.3 廣播地址

有了Mac地址之後,計算機就能夠通訊了,假設一個教室就是一個局域網(隔離的網絡),這個教室裏面有幾臺計算機,計算機的通訊和人的通訊是一個道理,把教室裏面的人都比做一個個計算機,假設教室裏面的人都是瞎子,其實計算機就是瞎子的,計算機通訊基本靠吼,如今我要找教室裏面的飛哥要戰狼2的片,而後我就吼一聲,說我要找飛哥要戰狼2的片,戰狼2的片就屬於個人數據,可是我在發的時候我是否是要標識我是誰,我要找誰,我是誰就是個人Mac地址,我要找誰就是飛哥的Mac地址,這兩個地址作數據包的頭部,再加上數據戰狼2的片就構成了一個數據幀。

這個數據包封裝好之後就往外發,到物理層之後就所有轉成二進制,往外發是怎麼發的呢?就是靠吼。即「我是nick,我找飛哥要戰狼2的片」。這麼吼了一嗓子之後,全屋子的人都能聽到,這就是廣播。

計算機底層,只要在一個教室裏(一個局域網),都是靠廣播的方式,吼。

151-大白話OSI七層協議-廣播.jpg?x-oss-process=style/watermark

廣播出去之後,全部人都聽得見,全部人都會拆開這個包,讀發送者是誰,接收者是誰,只要接收者不是本身就丟棄掉。對計算機來講,它會看本身的Mac地址,飛哥收到之後,他就會把片發給我,發送回來一樣採用廣播的方式了,靠吼。

同一個教室(同一個局域網)的計算機靠吼來通訊,那不一樣教室的計算機又如何?

好比說局域網1的pc1與局域網2的pc10如何通訊?你在教室1(局域網1)吼,教室2(局域網2)的人確定是聽不見的。這就是跨網絡進行通訊,數據鏈路層就解決不了這個問題了,這就得靠網絡層出面了。

注意:在講網絡層以前,其實基於廣播的這種通訊就能夠實現全世界通訊了,你吼一聲,若是全世界是一個局域網,全世界的計算機確定能夠聽得見,從理論上彷佛行得通,若是全世界的計算機都在吼,你想想,這是否是一個災難。所以,全世界不能是一個局域網。因而就有了網絡層。

3、網絡層

網絡層功能:引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址

網絡層的由來:有了ethernet、Mac地址、廣播的發送方式,世界上的計算機就能夠彼此通訊了,問題是世界範圍的互聯網是由 一個個彼此隔離的小的局域網組成的,那麼若是全部的通訊都採用以太網的廣播方式,那麼一臺機器發送的包全世界都會收到

  • 對於上述的問題這就不只僅是效率低的問題了,這會是一種災難

151-大白話OSI七層協議-網絡層.jpg?x-oss-process=style/watermark

爲了解決上述災難,網絡層定義了一個IP協議,

你想,我是這個教室的一個學生,我想找隔壁教室一個叫老王的學生,我也不認識老王,那怎麼辦,我吼?老王在另一個教室確定是聽不到的。找教室的負責人,這個教室的負責人就負責和隔壁教室的負責人說話,說咱們教室的有個學生要找大家教室的老王。往外傳的東西交給負責人就能夠了,內部的話上面已經提到,經過廣播的方式,對外的東西廣播失效。教室的負責人就是網關,網關即網絡關口的意思。

Mac地址是用來標識你這個教室的某個位置,IP地址是用來標識你在哪一個教室(哪一個局域網)。你要跨網絡發包你是否是要知道對方的IP地址,好比你要訪問百度,你確定得知道百度服務器的IP地址。計算機在發包前,會判斷你在哪一個教室,對方在哪一個教室,若是在一個教室,基於Mac地址的廣播發包就OK了;若是不在一個教室,即跨網絡發包,那麼就會把你的包交給教室負責人(網關)來轉發。Mac地址及IP地址惟一標識了你在互聯網中的位置。

數據鏈路層中會把網絡層的數據包封裝到數數據鏈路層的數據位置,而後再添加上本身的包頭,再發給物理層,物理層發給網關,網關再發給對方教室的網關,對方教室的網關收到後在那個教室作廣播。

在數據鏈路層看,數據封裝了兩層,跟玩俄羅斯套娃有點相似,一層套了一層。

151-大白話OSI七層協議-網絡層包.jpg?x-oss-process=style/watermark

最終變成

- - -
以太網頭 IP頭 IP數據

如今來看另外一個問題,在吼以前怎麼知道對方的Mac地址?這就得靠ARP協議。

ARP協議的由來:在你找飛哥要片以前,你的先幹一件事,想辦法知道飛哥的Mac地址。即你的機器必須先發一個ARP包出去,ARP也是靠廣播的方式發,ARP發送廣播包的方式以下:

- 源Mac 目標Mac 源IP 目標IP 數據部分
發送端主機 發送端Mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 數據

局域網中怎麼獲取對方的Mac地址:

確定要知道對方的IP地址,這是最基本的,就像你要訪問百度,確定得知道百度的域名,域名就是百度的IP地址。本身的IP能夠輕鬆得到,本身的Mac也輕鬆獲取,目標Mac爲12個F,咱們叫廣播地址,表達的意思是我想要獲取這個目標IP地址172.16.10.11的機器的Mac地址。Mac爲12個F表明的是一種功能,這個功能就是獲取對方的Mac地址,計算機的Mac永遠不多是12個F。假設是在本教室廣播,一嗓子吼出去了,全部人開始解包,只有IP地址是172.16.10.11的這我的纔會返回他的Mac地址,其餘人所有丟棄。發回來源Mac改爲飛哥本身的Mac地址,同時把飛哥的Mac地址放在數據部分。

跨網絡怎麼獲取對方的Mac地址:

經過IP地址區分,計算機運算判斷出飛哥不在同一個教室,目標IP就變成了網關的IP了。網關的IP在計算機上配死了,能夠輕鬆獲取。

- 源Mac 目標Mac 源IP 目標IP 數據部分
發送端主機 發送端Mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 數據
- 源Mac 目標Mac 源IP 目標IP 數據部分
發送端主機 發送端Mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 網關地址 數據
- 源Mac 目標Mac 源IP 目標IP 數據部分
發送端主機 發送端Mac 網關Mac 172.16.10.10/24 飛哥的IP 數據

注意:網關幫你去找飛哥,但對用戶來講,因爲速度太快咱們根本就感受不到網關的存在。

3.1 IP協議詳解

規定網絡地址的協議叫IP協議,它定義的地址稱之爲IP地址,普遍採用的v4版本即IPv4,它規定網絡地址由32位2進製表示
範圍0.0.0.0-255.255.255.255

  • 一個IP地址一般寫成四段十進制數,例:172.16.10.1

3.1.1 IP地址的兩部分

  1. 網絡部分:標識子網

  2. 主機部分:標識主機

  • 注意:單純的IP地址段只是標識了IP地址的種類,從網絡部分或主機部分都沒法辨識一個IP所處的子網

例:172.16.10.1與172.16.10.2並不能肯定兩者處於同一子網

3.2 子網掩碼詳解

所謂」子網掩碼」,就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0。好比,IP地址172.16.10.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

知道」子網掩碼」後,咱們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都爲1,運算結果爲1,不然爲0),而後比較結果是否相同,若是是的話,就代表它們在同一個子網絡中,不然就不是。

好比,已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?二者與子網掩碼分別進行AND運算

  • 172.16.10.1:10101100.00010000.00001010.000000001

    • 255.255.255.0:11111111.11111111.11111111.00000000

    • AND運算得網絡地址結果:10101100.00010000.00001010.000000000->172.16.10.0

  • 172.16.10.2:10101100.00010000.00001010.000000010

    • 255.255.255.0:11111111.11111111.11111111.00000000

    • AND運算得網絡地址結果:10101100.00010000.00001010.000000000->172.16.10.0

  • 結果都是172.16.10.0,所以它們在同一個子網絡。

總結一下,IP協議的做用主要有兩個,一個是爲每一臺計算機分配IP地址,另外一個是肯定哪些地址在同一個子網絡。

3.3 IP數據包詳解

IP數據包也分爲head和data部分,無須爲IP包定義單獨的欄位,直接放入以太網包的data部分

  • head:長度爲20到60字節

  • data:最長爲65,515字節

注意:以太網數據包的"數據"部分,最長只有1500字節。所以,若是IP數據包超過了1500字節,它就須要分割成幾個以太網數據包,分開發送了。

- - -
以太網頭 IP頭 IP數據

有了Mac地址+IP地址,咱們就能肯定世界上獨一無二的一臺計算機。

3.4 ARP協議詳解

arp協議由來:計算機通訊基本靠吼,即廣播的方式,全部上層的包到最後都要封裝上以太網頭,而後經過以太網協議發送,在談及以太網協議時候,我門瞭解到:通訊是基於Mac的廣播方式實現,計算機在發包時,獲取自身的Mac是容易的,如何獲取目標主機的Mac,就須要經過arp協議

arp協議功能:廣播的方式發送數據包,獲取目標主機的Mac地址

協議工做方式:每臺主機IP都是已知的,例如:主機172.16.10.10/24訪問172.16.10.11/24

1.首先經過IP地址和子網掩碼區分出本身所處的子網

場景 數據包地址
同一子網 目標主機Mac,目標主機IP
不一樣子網 網關Mac,目標主機IP

2.分析172.16.10.10/24與172.16.10.11/24處於同一網絡(若是不是同一網絡,那麼下表中目標IP爲172.16.10.1,經過arp獲取的是網關的Mac)

- 源Mac 目標Mac 源IP 目標IP 數據部分
發送端主機 發送端Mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 數據

3.這個包會以廣播的方式在發送端所處的自網內傳輸,全部主機接收後拆開包,發現目標IP爲本身的,就響應,返回本身的Mac

4、傳輸層

傳輸層的由來:網絡層的IP幫咱們區分子網,以太網層的Mac幫咱們找到主機,而後你們使用的都是應用程序,你的電腦上可能同時開啓qq,暴風影音,等多個應用程序。

那麼咱們經過IP和Mac找到了一臺特定的主機,如何標識這臺主機上的應用程序,答案就是端口,端口即應用程序與網卡關聯的編號。

傳輸層功能:創建端口到端口的通訊

補充:端口範圍0-65535,0-1023爲系統佔用端口

  • 有了Mac地址+IP地址+端口,咱們就能肯定世界上獨一無二的一臺計算機上的應用程序

4.1 TCP協議

  • 可靠傳輸,TCP數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。
- - - -
以太網頭 IP頭 TCP頭 數據

4.2 UDP協議

  • 不可靠傳輸,」報頭」部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
- - - -
以太網頭 IP頭 UDP頭 數據

4.3 TCP報文

151-大白話OSI七層協議-tcp報文.jpg?x-oss-process=style/watermark

4.4 TCP三次握手和四次揮手

151-大白話OSI七層協議-tcp三次握手和四次揮手.jpg?x-oss-process=style/watermark

5、應用層

應用層由來:用戶使用的都是應用程序,均工做於應用層,互聯網是開發的,你們均可以開發本身的應用程序,數據多種多樣,必須規定好數據的組織形式

應用層功能:規定應用程序的數據格式。

  • 例:TCP協議能夠爲各類各樣的程序傳遞數據,好比Email、WWW、FTP等等。那麼,必須有不一樣協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了」應用層」。

151-大白話OSI七層協議-應用層.jpg?x-oss-process=style/watermark

注意:數據通過以上幾層的折騰,已經不成樣子了。

151-大白話OSI七層協議-七層數據內容.jpg?x-oss-process=style/watermark

相關文章
相關標籤/搜索