目錄服務器
互聯網的本質就是一系列的網絡協議,這個協議就叫OSI協議(一系列協議),按照功能不一樣,分工不一樣,人爲的分層七層。實際上這個七層是不存在的。沒有這七層的概念,只是人爲的劃分而已。區分出來的目的只是讓你明白哪一層是幹什麼用的。網絡
每一層都運行不一樣的協議。協議是幹什麼的,協議就是標準。tcp
實際上還有人把它劃成五層、四層。spa
七層劃分爲:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。3d
五層劃分爲:應用層、傳輸層、網絡層、數據鏈路層、物理層。blog
四層劃分爲:應用層、傳輸層、網絡層、網絡接口層。接口
每層運行常見的物理設備ip
物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0路由
物理層字面意思解釋:物理傳輸、硬件、物理特性。在深圳的你與北京的朋友聊天,你的電腦必需要能上網,物理體現是什麼?是否是接一根網線,插個路由器,北京的朋友那邊是否是也有根網線,也得插個路由器。也就是說計算機與計算機之間的通訊,必需要有底層物理層方面的連通,就相似於你打電話,中間是否是必須得連電話線。開發
中間的物理連接能夠是光纜、電纜、雙絞線、無線電波。中間傳的是電信號,即010101...這些二進制位。
底層傳輸的010010101001...這些二進制位怎麼才能讓它有意義呢?
要讓這些010010101001...有意思,人爲的分組再適合不過了,8位一組,發送及接收都按照8位一組來劃分。接收到8位爲一組的話,那麼就能夠按照這8位數來作運算。若是沒有分組,對方接收的計算機根本就不知道從哪一位開始來作計算,也解析不了收到的數據。我發了16位你就按照16位來作計算嗎?我發100位你就按照100位作計算嗎?沒什麼意義是吧。所以要想讓底層的電信號有意義,必需要把底層的電信號作分組。我作好8位一組,那麼我收到數據,我就知道這幾個8位作一組,這幾個8位作一組。那麼每一個8位就能夠獲得一個肯定的數。分組是誰幹的活呢?物理層幹不了,這個是數據鏈路層乾的。
數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麼意思
數據鏈路層的功能:定義了電信號的分組方式
早期的時候,數據鏈路層就是來對電信號來作分組的。之前每一個公司都有本身的分組方式,後來造成了統一的標準,即以太網協議ethernet
ethernet規定:一組電信號構成一個數據報,叫作'幀',每一數據幀分紅:報頭head和數據data兩部分
head包含:(固定18個字節)
發送者/源地址,6個字節
接收者/目標地址,6個字節
數據類型,6個字節
data包含:(最短46字節,最長1500字節)
- | - |
---|---|
head | data |
這就像寫信,發送者的地址(源地址)就是你家的地址,接收者地址(目標地址)就是對方的收信地址,你家的路由器就至關於郵局。其實在計算機通訊中的源地址和目標地址指的是Mac地址。
head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即Mac地址
有了Mac地址之後,計算機就能夠通訊了,假設一個教室就是一個局域網(隔離的網絡),這個教室裏面有幾臺計算機,計算機的通訊和人的通訊是一個道理,把教室裏面的人都比做一個個計算機,假設教室裏面的人都是瞎子,其實計算機就是瞎子的,計算機通訊基本靠吼,如今我要找教室裏面的飛哥要戰狼2的片,而後我就吼一聲,說我要找飛哥要戰狼2的片,戰狼2的片就屬於個人數據,可是我在發的時候我是否是要標識我是誰,我要找誰,我是誰就是個人Mac地址,我要找誰就是飛哥的Mac地址,這兩個地址作數據包的頭部,再加上數據戰狼2的片就構成了一個數據幀。
這個數據包封裝好之後就往外發,到物理層之後就所有轉成二進制,往外發是怎麼發的呢?就是靠吼。即「我是nick,我找飛哥要戰狼2的片」。這麼吼了一嗓子之後,全屋子的人都能聽到,這就是廣播。
計算機底層,只要在一個教室裏(一個局域網),都是靠廣播的方式,吼。
廣播出去之後,全部人都聽得見,全部人都會拆開這個包,讀發送者是誰,接收者是誰,只要接收者不是本身就丟棄掉。對計算機來講,它會看本身的Mac地址,飛哥收到之後,他就會把片發給我,發送回來一樣採用廣播的方式了,靠吼。
同一個教室(同一個局域網)的計算機靠吼來通訊,那不一樣教室的計算機又如何?
好比說局域網1的pc1與局域網2的pc10如何通訊?你在教室1(局域網1)吼,教室2(局域網2)的人確定是聽不見的。這就是跨網絡進行通訊,數據鏈路層就解決不了這個問題了,這就得靠網絡層出面了。
注意:在講網絡層以前,其實基於廣播的這種通訊就能夠實現全世界通訊了,你吼一聲,若是全世界是一個局域網,全世界的計算機確定能夠聽得見,從理論上彷佛行得通,若是全世界的計算機都在吼,你想想,這是否是一個災難。所以,全世界不能是一個局域網。因而就有了網絡層。
網絡層功能:引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址
網絡層的由來:有了ethernet、Mac地址、廣播的發送方式,世界上的計算機就能夠彼此通訊了,問題是世界範圍的互聯網是由 一個個彼此隔離的小的局域網組成的,那麼若是全部的通訊都採用以太網的廣播方式,那麼一臺機器發送的包全世界都會收到
爲了解決上述災難,網絡層定義了一個IP協議,
你想,我是這個教室的一個學生,我想找隔壁教室一個叫老王的學生,我也不認識老王,那怎麼辦,我吼?老王在另一個教室確定是聽不到的。找教室的負責人,這個教室的負責人就負責和隔壁教室的負責人說話,說咱們教室的有個學生要找大家教室的老王。往外傳的東西交給負責人就能夠了,內部的話上面已經提到,經過廣播的方式,對外的東西廣播失效。教室的負責人就是網關,網關即網絡關口的意思。
Mac地址是用來標識你這個教室的某個位置,IP地址是用來標識你在哪一個教室(哪一個局域網)。你要跨網絡發包你是否是要知道對方的IP地址,好比你要訪問百度,你確定得知道百度服務器的IP地址。計算機在發包前,會判斷你在哪一個教室,對方在哪一個教室,若是在一個教室,基於Mac地址的廣播發包就OK了;若是不在一個教室,即跨網絡發包,那麼就會把你的包交給教室負責人(網關)來轉發。Mac地址及IP地址惟一標識了你在互聯網中的位置。
數據鏈路層中會把網絡層的數據包封裝到數數據鏈路層的數據位置,而後再添加上本身的包頭,再發給物理層,物理層發給網關,網關再發給對方教室的網關,對方教室的網關收到後在那個教室作廣播。
在數據鏈路層看,數據封裝了兩層,跟玩俄羅斯套娃有點相似,一層套了一層。
最終變成
- | - | - |
---|---|---|
以太網頭 | 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 | 數據 |
注意:網關幫你去找飛哥,但對用戶來講,因爲速度太快咱們根本就感受不到網關的存在。
規定網絡地址的協議叫IP協議,它定義的地址稱之爲IP地址,普遍採用的v4版本即IPv4,它規定網絡地址由32位2進製表示
範圍0.0.0.0-255.255.255.255
網絡部分:標識子網
主機部分:標識主機
例:172.16.10.1與172.16.10.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地址,另外一個是肯定哪些地址在同一個子網絡。
IP數據包也分爲head和data部分,無須爲IP包定義單獨的欄位,直接放入以太網包的data部分
head:長度爲20到60字節
data:最長爲65,515字節
注意:以太網數據包的"數據"部分,最長只有1500字節。所以,若是IP數據包超過了1500字節,它就須要分割成幾個以太網數據包,分開發送了。
- | - | - |
---|---|---|
以太網頭 | IP頭 | IP數據 |
有了Mac地址+IP地址,咱們就能肯定世界上獨一無二的一臺計算機。
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
傳輸層的由來:網絡層的IP幫咱們區分子網,以太網層的Mac幫咱們找到主機,而後你們使用的都是應用程序,你的電腦上可能同時開啓qq,暴風影音,等多個應用程序。
那麼咱們經過IP和Mac找到了一臺特定的主機,如何標識這臺主機上的應用程序,答案就是端口,端口即應用程序與網卡關聯的編號。
傳輸層功能:創建端口到端口的通訊
補充:端口範圍0-65535,0-1023爲系統佔用端口
- | - | - | - |
---|---|---|---|
以太網頭 | IP頭 | TCP頭 | 數據 |
- | - | - | - |
---|---|---|---|
以太網頭 | IP頭 | UDP頭 | 數據 |
應用層由來:用戶使用的都是應用程序,均工做於應用層,互聯網是開發的,你們均可以開發本身的應用程序,數據多種多樣,必須規定好數據的組織形式
應用層功能:規定應用程序的數據格式。
注意:數據通過以上幾層的折騰,已經不成樣子了。